From ada9439ab9647dfce97931d0b2c35294876ec3c3 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Fri, 5 Mar 2021 16:19:55 +0100 Subject: [PATCH] DryRun has been implemented as transaction rollback --- .../instances/base/ElementManagement.java | 1 - .../model/entities/EntityManagement.java | 41 +++++++------ .../model/entities/FacetManagement.java | 7 +-- .../model/entities/ResourceManagement.java | 4 +- .../model/relations/RelationManagement.java | 57 ++++++++++--------- 5 files changed, 54 insertions(+), 56 deletions(-) diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/base/ElementManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/base/ElementManagement.java index 5784706..2f687d5 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/base/ElementManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/base/ElementManagement.java @@ -165,7 +165,6 @@ public abstract class ElementManagement { this.dryRun = dryRun; } - protected void setAsEntryPoint() { this.entryPoint = true; } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/EntityManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/EntityManagement.java index 1a4710f..54e8b2a 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/EntityManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/EntityManagement.java @@ -301,9 +301,7 @@ public abstract class EntityManagement protected void reallyAddToContext() throws ContextException, ResourceRegistryException { - if(!dryRun) { - targetSecurityContext.addElement(getElement(), oDatabaseDocument); - } + targetSecurityContext.addElement(getElement(), oDatabaseDocument); /* * DO NOT UNCOMMENT @@ -331,10 +329,8 @@ public abstract class EntityManagement try { setOperation(Operation.ADD_TO_CONTEXT); reallyAddToContext(); - if(!dryRun) { - HeaderUtility.updateModifiedByAndLastUpdate(element); - element.save(); - } + HeaderUtility.updateModifiedByAndLastUpdate(element); + element.save(); affectedInstances.put(uuid, serializeSelfAsJsonNode()); sanityCheck(); } catch(ResourceRegistryException e) { @@ -359,7 +355,11 @@ public abstract class EntityManagement internalAddToContext(); - oDatabaseDocument.commit(); + if(!dryRun) { + oDatabaseDocument.commit(); + }else { + oDatabaseDocument.rollback(); + } logger.info("{} with UUID {} successfully added to Context with UUID {}", typeName, uuid, contextUUID); } catch(ResourceRegistryException e) { logger.error("Unable to add {} with UUID {} to Context with UUID {} - Reason is {}", typeName, uuid, contextUUID, e.getMessage()); @@ -390,10 +390,8 @@ public abstract class EntityManagement try { setOperation(Operation.REMOVE_FROM_CONTEXT); reallyRemoveFromContext(); - if(!dryRun) { - HeaderUtility.updateModifiedByAndLastUpdate(element); - element.save(); - } + HeaderUtility.updateModifiedByAndLastUpdate(element); + element.save(); affectedInstances.put(uuid, serializeSelfAsJsonNode()); sanityCheck(); } catch(ResourceRegistryException e) { @@ -404,7 +402,7 @@ public abstract class EntityManagement } } - protected Map reallyRemoveFromContext() + protected void reallyRemoveFromContext() throws ContextException, ResourceRegistryException { if(honourPropagationConstraintsInContextSharing) { @@ -420,17 +418,14 @@ public abstract class EntityManagement } } - if(!dryRun) { - targetSecurityContext.removeElement(getElement(), oDatabaseDocument); - } + targetSecurityContext.removeElement(getElement(), oDatabaseDocument); + /* * DO NOT UNCOMMENT * the instance is added internalAddToContext() function after * the update of Header metadata i.e. modifiedBy, lastUpdateTime * affectedInstances.put(uuid, serializeSelfOnly()); */ - - return affectedInstances; } public void removeFromContext(UUID contextUUID) @@ -448,7 +443,11 @@ public abstract class EntityManagement internalRemoveFromContext(); - oDatabaseDocument.commit(); + if(!dryRun) { + oDatabaseDocument.commit(); + }else { + oDatabaseDocument.rollback(); + } logger.info("{} with UUID {} successfully removed from Context with UUID {}", typeName, uuid, contextUUID); } catch(ResourceRegistryException e) { logger.error("Unable to remove {} with UUID {} from Context with UUID {}", typeName, uuid, contextUUID); @@ -498,7 +497,7 @@ public abstract class EntityManagement } } - public boolean propertyMatchRequestedVlaue(OVertex v, String key, String requestedValue, Object instanceValue) throws SchemaException, ResourceRegistryException { + public boolean propertyMatchRequestedValue(OVertex v, String key, String requestedValue, Object instanceValue) throws SchemaException, ResourceRegistryException { return requestedValue.compareTo(instanceValue.toString())==0; @@ -585,7 +584,7 @@ public abstract class EntityManagement skip = true; break; }else { - skip = !propertyMatchRequestedVlaue(v, key, value, o); + skip = !propertyMatchRequestedValue(v, key, value, o); if(skip) { break; } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/FacetManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/FacetManagement.java index 9fc65e1..6edde5e 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/FacetManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/FacetManagement.java @@ -1,8 +1,5 @@ package org.gcube.informationsystem.resourceregistry.instances.model.entities; -import java.util.Map; -import java.util.UUID; - import org.gcube.com.fasterxml.jackson.databind.JsonNode; import org.gcube.informationsystem.base.reference.AccessType; import org.gcube.informationsystem.model.reference.entities.Facet; @@ -70,14 +67,14 @@ public class FacetManagement extends EntityManagement { } @Override - protected Map reallyRemoveFromContext() + protected void reallyRemoveFromContext() throws ContextException, ResourceRegistryException { if(entryPoint) { OVertex oVertex = getElement().getVertices(ODirection.IN).iterator().next(); resourceManagement = new ResourceManagement(); resourceManagement.setElement(oVertex); } - return super.reallyRemoveFromContext(); + super.reallyRemoveFromContext(); } @Override diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/ResourceManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/ResourceManagement.java index 0533826..d9a976d 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/ResourceManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/ResourceManagement.java @@ -249,9 +249,7 @@ public class ResourceManagement extends EntityManagement protected void reallyAddToContext() throws ContextException, ResourceRegistryException { - if(!dryRun) { - targetSecurityContext.addElement(getElement(), oDatabaseDocument); - } + targetSecurityContext.addElement(getElement(), oDatabaseDocument); /* * DO NOT UNCOMMENT diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/relations/RelationManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/relations/RelationManagement.java index 3bec270..a79ac2d 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/relations/RelationManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/relations/RelationManagement.java @@ -421,9 +421,8 @@ public abstract class RelationManagement iterable = target.getEdges(ODirection.IN); + OVertex target = t.getElement(); + Iterable iterable = t.getElement().getEdges(ODirection.IN); Iterator iterator = iterable.iterator(); if(iterator.hasNext()) { logger.trace("{} point to {} which is not orphan. Giving {} directive, it will be keep.", element, @@ -742,6 +744,9 @@ public abstract class RelationManagement serializeEdges(Iterable edges, boolean postFilterPolymorphic)