From d08bb8315ae652f4c19b23433f8a301001d3588b Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Tue, 3 Aug 2021 15:33:28 +0200 Subject: [PATCH] Fixed Layer deletion on multiple GS instances --- .../geoportal/service/engine/SDIManager.java | 25 ++++++++++++++++--- .../service/rest/ConcessioniOverMongo.java | 2 +- .../service/BasicServiceTestUnit.java | 1 - .../service/ConcessioniOverMongoTest.java | 9 ++++++- .../geoportal/service/SDITests.java | 1 - .../service/{legacy => }/TokenSetter.java | 2 +- .../geoportal/service/legacy/MongoTests.java | 1 + 7 files changed, 33 insertions(+), 8 deletions(-) rename src/test/java/org/gcube/application/geoportal/service/{legacy => }/TokenSetter.java (93%) diff --git a/src/main/java/org/gcube/application/geoportal/service/engine/SDIManager.java b/src/main/java/org/gcube/application/geoportal/service/engine/SDIManager.java index 3aa8d28..7527fa4 100644 --- a/src/main/java/org/gcube/application/geoportal/service/engine/SDIManager.java +++ b/src/main/java/org/gcube/application/geoportal/service/engine/SDIManager.java @@ -337,6 +337,7 @@ public class SDIManager { //Checking layer publishStyle(Files.getFileFromResources("styles/clustered_points.sld"),style); + log.info("Creating layer in {} : {} with FTE {} , LE {}",workspace,storeName,fte,layerEncoder); if(currentGeoserver.getReader().getLayer(workspace, name)==null) if(!currentGeoserver.getPublisher().publishDBLayer(workspace, storeName, fte, layerEncoder)) throw new SDIInteractionException("Unable to create layer "+name); @@ -351,13 +352,30 @@ public class SDIManager { public void deleteContent(GeoServerContent toDelete) throws IllegalArgumentException, MalformedURLException, RemoteServiceException { - log.debug("Deleting geoserver layer "+toDelete); + log.info("Deleting geoserver layer "+toDelete); + + String geoserverHostName=toDelete.getGeoserverHostName(); + log.debug("Looking for geoserver {}",geoserverHostName); + + AbstractGeoServerDescriptor geoServerDescriptor=null; + + for(AbstractGeoServerDescriptor gs :gis.getCurrentCacheElements(false)){ + log.debug("Checking gs {}",gs); + if(new URL(gs.getUrl()).getHost().equals(geoserverHostName)) + geoServerDescriptor=gs; + } + if(geoServerDescriptor == null) throw new IllegalArgumentException("Unable to find geoserver "+geoserverHostName); + + GeoServerRESTPublisher publisher=geoServerDescriptor.getPublisher(); + //delete layer - GeoServerRESTPublisher publisher=currentGeoserver.getPublisher(); //delete store + log.debug("Removing DS {} : {} ",toDelete.getWorkspace(),toDelete.getStore()); publisher.removeDatastore(toDelete.getWorkspace(), toDelete.getStore(), true); + //delete WS if empty - GeoServerRESTReader reader=currentGeoserver.getReader(); + GeoServerRESTReader reader=geoServerDescriptor.getReader(); + log.debug("Checking if WS {} is empty",toDelete.getWorkspace()); if(reader.getDatastores(toDelete.getWorkspace()).isEmpty()) { log.debug("Deleting emtpy workspace "+toDelete.getWorkspace()); publisher.removeWorkspace(toDelete.getWorkspace(), true); @@ -367,6 +385,7 @@ public class SDIManager { // TODO REMOVE HARDCODED PATCH String path=toDelete.getGeoserverPath().replace("/srv/geoserver_data","geoserver"); + log.info("Deleting files at {} [{}]",path,toDelete.getGeoserverPath()); // path=toDelete.getGeoserverPath(); dtGeoServer.getWebClient().delete(path); } diff --git a/src/main/java/org/gcube/application/geoportal/service/rest/ConcessioniOverMongo.java b/src/main/java/org/gcube/application/geoportal/service/rest/ConcessioniOverMongo.java index d449e11..8668087 100644 --- a/src/main/java/org/gcube/application/geoportal/service/rest/ConcessioniOverMongo.java +++ b/src/main/java/org/gcube/application/geoportal/service/rest/ConcessioniOverMongo.java @@ -92,7 +92,7 @@ public class ConcessioniOverMongo { @Produces(MediaType.APPLICATION_JSON) @Path("{"+InterfaceConstants.Parameters.PROJECT_ID+"}") public void deleteById(@PathParam(InterfaceConstants.Parameters.PROJECT_ID) String id, - @QueryParam("force") Boolean forceOption) { + @QueryParam(InterfaceConstants.Parameters.FORCE) Boolean forceOption) { new GuardedMethod () { @Override protected Concessione run() throws Exception, WebApplicationException { diff --git a/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java b/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java index 33bbf10..616ff5c 100644 --- a/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java +++ b/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java @@ -5,7 +5,6 @@ import org.gcube.application.geoportal.service.engine.ImplementationProvider; import org.gcube.application.geoportal.service.engine.StorageClientProvider; import org.gcube.application.geoportal.service.engine.cache.MongoClientProvider; import org.gcube.application.geoportal.service.engine.cache.MongoConnectionProvider; -import org.gcube.application.geoportal.service.legacy.TokenSetter; import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException; import org.gcube.application.geoportal.service.utils.Serialization; import org.gcube.contentmanagement.blobstorage.service.IClient; diff --git a/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java b/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java index 3d912d6..f8c1ab8 100644 --- a/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java +++ b/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java @@ -9,7 +9,6 @@ import org.gcube.application.geoportal.common.rest.InterfaceConstants; import org.gcube.application.geoportal.common.rest.TempFile; import org.gcube.application.geoportal.common.utils.Files; import org.gcube.application.geoportal.common.utils.StorageUtils; -import org.gcube.application.geoportal.service.legacy.TokenSetter; import org.gcube.application.geoportal.service.utils.Serialization; import org.junit.Assert; import org.junit.Before; @@ -101,6 +100,14 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{ check(target.path(published.getMongo_id()).request(MediaType.APPLICATION_JSON).delete(),null); } + @Test + public void deletePrecise(){ + WebTarget target=target(PATH); + String id="60195d0c02ad3d7fa3614d75"; + target.path(id).queryParam(InterfaceConstants.Parameters.FORCE,true).request(MediaType.APPLICATION_JSON).delete(); + } + + @Test public void getById() throws Exception { diff --git a/src/test/java/org/gcube/application/geoportal/service/SDITests.java b/src/test/java/org/gcube/application/geoportal/service/SDITests.java index a5a44a3..e2f45b0 100644 --- a/src/test/java/org/gcube/application/geoportal/service/SDITests.java +++ b/src/test/java/org/gcube/application/geoportal/service/SDITests.java @@ -3,7 +3,6 @@ package org.gcube.application.geoportal.service; import org.gcube.application.geoportal.service.engine.SDIManager; import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex; -import org.gcube.application.geoportal.service.legacy.TokenSetter; import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException; import org.gcube.application.geoportal.service.model.internal.faults.SDIInteractionException; import org.junit.Assert; diff --git a/src/test/java/org/gcube/application/geoportal/service/legacy/TokenSetter.java b/src/test/java/org/gcube/application/geoportal/service/TokenSetter.java similarity index 93% rename from src/test/java/org/gcube/application/geoportal/service/legacy/TokenSetter.java rename to src/test/java/org/gcube/application/geoportal/service/TokenSetter.java index 2254591..783226d 100644 --- a/src/test/java/org/gcube/application/geoportal/service/legacy/TokenSetter.java +++ b/src/test/java/org/gcube/application/geoportal/service/TokenSetter.java @@ -1,4 +1,4 @@ -package org.gcube.application.geoportal.service.legacy; +package org.gcube.application.geoportal.service; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.scope.api.ScopeProvider; diff --git a/src/test/java/org/gcube/application/geoportal/service/legacy/MongoTests.java b/src/test/java/org/gcube/application/geoportal/service/legacy/MongoTests.java index 9680e28..1eea8b2 100644 --- a/src/test/java/org/gcube/application/geoportal/service/legacy/MongoTests.java +++ b/src/test/java/org/gcube/application/geoportal/service/legacy/MongoTests.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.mongodb.Block; import com.mongodb.MongoClient; import org.bson.Document; +import org.gcube.application.geoportal.service.TokenSetter; import org.gcube.application.geoportal.service.engine.ImplementationProvider; import org.gcube.application.geoportal.service.engine.cache.MongoClientProvider; import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;