diff --git a/src/main/java/org/gcube/dataanalysis/wps/statisticalmanager/synchserver/mapping/dataspace/DataspaceManager.java b/src/main/java/org/gcube/dataanalysis/wps/statisticalmanager/synchserver/mapping/dataspace/DataspaceManager.java index a96ce52..bfd0467 100644 --- a/src/main/java/org/gcube/dataanalysis/wps/statisticalmanager/synchserver/mapping/dataspace/DataspaceManager.java +++ b/src/main/java/org/gcube/dataanalysis/wps/statisticalmanager/synchserver/mapping/dataspace/DataspaceManager.java @@ -19,6 +19,7 @@ import org.gcube.common.storagehub.client.dsl.FolderContainer; import org.gcube.common.storagehub.client.dsl.ItemContainer; import org.gcube.common.storagehub.client.dsl.StorageHubClient; import org.gcube.common.storagehub.model.Metadata; +import org.gcube.common.storagehub.model.exceptions.ItemLockedException; import org.gcube.common.storagehub.model.items.GCubeItem; import org.gcube.common.storagehub.model.items.Item; import org.gcube.contentmanagement.lexicalmatcher.utils.FileTools; @@ -62,6 +63,9 @@ public class DataspaceManager implements Runnable { public static String operator = "operator_name"; public static String payload = "payload"; + private String statusComputationName; + private static final String STATUS_POSTFIX="-STATUS"; + public DataspaceManager(AlgorithmConfiguration config, ComputationData computation, List inputData, List outputData, List generatedFiles) { this.config = config; @@ -69,6 +73,8 @@ public class DataspaceManager implements Runnable { this.inputData = inputData; this.outputData = outputData; this.generatedFiles = generatedFiles; + this.statusComputationName = this.computation.id+STATUS_POSTFIX; + LOGGER.debug("DataspaceManager [config=" + config + ", computation=" + computation + ", inputData=" + inputData + ", outputData=" + outputData + ", generatedFiles=" + generatedFiles + "]"); } @@ -432,7 +438,7 @@ public class DataspaceManager implements Runnable { } catch (Exception e) { LOGGER.debug("Dataspace->impossible to delete running computation : {} ", e.getMessage()); } - + // LOGGER.debug("Dataspace->create folders network"); FolderContainer folderContainer = createFoldersNetwork(); @@ -459,8 +465,10 @@ public class DataspaceManager implements Runnable { List scopes = new ArrayList(); scopes.add(config.getGcubeScope()); + + //TODO: update gcubeItem not recreate it... GCubeItem gcubeItem = new GCubeItem(); - gcubeItem.setName(computation.id); + gcubeItem.setName(this.statusComputationName); gcubeItem.setDescription(computation.operatorDescription); gcubeItem.setScopes(scopes.toArray(new String[scopes.size()])); gcubeItem.setItemType(itemType); @@ -501,19 +509,25 @@ public class DataspaceManager implements Runnable { .getContainers().get(0); LOGGER.debug("Dataspace->removing computation data"); - List> wi = computationContainer.findByName(computation.id).getContainers(); - if (wi.isEmpty()) { - for (ItemContainer container : wi) - container.forceDelete(); + List> wi = computationContainer.findByName(this.statusComputationName).getContainers(); + if (!wi.isEmpty()) { + for (ItemContainer container : wi) { + boolean retry = false; + do { + try { + container.forceDelete(); + retry = false; + }catch (ItemLockedException e) { + LOGGER.warn("item locked, retrying"); + Thread.sleep(1000); + retry = true; + } + }while (retry); + } } else - LOGGER.debug("Dataspace->Warning Could not find {} under {}", computation.id, + LOGGER.debug("Dataspace->Warning Could not find {} under {}", this.statusComputationName, computationContainer.get().getName()); - List> fileComputations = computationContainer.findByName(computation.id) - .getContainers(); - - if (fileComputations.size() > 0) - fileComputations.get(0).forceDelete();; /* * TODO: ASK GIANPAOLO int maxtries = 3; int i =1; while