You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by kd...@apache.org on 2020/03/12 17:08:07 UTC

[nifi-registry] branch master updated: NIFIREG-370 Ensuring update retrieves the latest revision from RevisionManager

This is an automated email from the ASF dual-hosted git repository.

kdoran pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nifi-registry.git


The following commit(s) were added to refs/heads/master by this push:
     new fbf1744  NIFIREG-370 Ensuring update retrieves the latest revision from RevisionManager
fbf1744 is described below

commit fbf17445852f1bbfd498134cdb719f610138625e
Author: Bryan Bende <bb...@apache.org>
AuthorDate: Wed Mar 11 15:51:21 2020 -0400

    NIFIREG-370 Ensuring update retrieves the latest revision from RevisionManager
    
    This closes #266.
    
    Signed-off-by: Kevin Doran <kd...@apache.org>
---
 .../entity/StandardRevisableEntityService.java     | 53 +++++++++++++---------
 .../entity/TestStandardRevisableEntityService.java | 28 ++++++++++++
 2 files changed, 60 insertions(+), 21 deletions(-)

diff --git a/nifi-registry-core/nifi-registry-revision/nifi-registry-revision-entity-service/src/main/java/org/apache/nifi/registry/revision/entity/StandardRevisableEntityService.java b/nifi-registry-core/nifi-registry-revision/nifi-registry-revision-entity-service/src/main/java/org/apache/nifi/registry/revision/entity/StandardRevisableEntityService.java
index 541f31f..fa3d4f5 100644
--- a/nifi-registry-core/nifi-registry-revision/nifi-registry-revision-entity-service/src/main/java/org/apache/nifi/registry/revision/entity/StandardRevisableEntityService.java
+++ b/nifi-registry-core/nifi-registry-revision/nifi-registry-revision-entity-service/src/main/java/org/apache/nifi/registry/revision/entity/StandardRevisableEntityService.java
@@ -58,7 +58,22 @@ public class StandardRevisableEntityService implements RevisableEntityService {
             throw new IllegalArgumentException("Creator identity is required");
         }
 
-        return createOrUpdate(requestEntity, creatorIdentity, createEntity);
+        final Revision revision = createRevision(requestEntity.getIdentifier(), requestEntity.getRevision());
+        final RevisionClaim claim = new StandardRevisionClaim(revision);
+
+        final RevisionUpdate<T> revisionUpdate = revisionManager.updateRevision(claim, () -> {
+            final T updatedEntity = createEntity.get();
+
+            final Revision updatedRevision = revision.incrementRevision(revision.getClientId());
+            final EntityModification entityModification = new EntityModification(updatedRevision, creatorIdentity);
+
+            final RevisionInfo updatedRevisionInfo = createRevisionInfo(updatedRevision, entityModification);
+            updatedEntity.setRevision(updatedRevisionInfo);
+
+            return new StandardRevisionUpdate<>(updatedEntity, entityModification);
+        });
+
+        return revisionUpdate.getEntity();
     }
 
     @Override
@@ -91,7 +106,22 @@ public class StandardRevisableEntityService implements RevisableEntityService {
             throw new IllegalArgumentException("Updater identity is required");
         }
 
-        return createOrUpdate(requestEntity, updaterIdentity, updateEntity);
+        final Revision revision = createRevision(requestEntity.getIdentifier(), requestEntity.getRevision());
+        final RevisionClaim claim = new StandardRevisionClaim(revision);
+
+        final RevisionUpdate<T> revisionUpdate = revisionManager.updateRevision(claim, () -> {
+            final T updatedEntity = updateEntity.get();
+
+            final Revision updatedRevision = revisionManager.getRevision(requestEntity.getIdentifier()).incrementRevision(revision.getClientId());
+            final EntityModification entityModification = new EntityModification(updatedRevision, updaterIdentity);
+
+            final RevisionInfo updatedRevisionInfo = createRevisionInfo(updatedRevision, entityModification);
+            updatedEntity.setRevision(updatedRevisionInfo);
+
+            return new StandardRevisionUpdate<>(updatedEntity, entityModification);
+        });
+
+        return revisionUpdate.getEntity();
     }
 
     @Override
@@ -127,25 +157,6 @@ public class StandardRevisableEntityService implements RevisableEntityService {
         }
     }
 
-    private <T extends RevisableEntity> T createOrUpdate(final T requestEntity, final String userIdentity, final Supplier<T> updateOrCreateEntity) {
-        final Revision revision = createRevision(requestEntity.getIdentifier(), requestEntity.getRevision());
-        final RevisionClaim claim = new StandardRevisionClaim(revision);
-
-        final RevisionUpdate<T> revisionUpdate = revisionManager.updateRevision(claim, () -> {
-            final T updatedEntity = updateOrCreateEntity.get();
-
-            final Revision updatedRevision = revision.incrementRevision(revision.getClientId());
-            final EntityModification entityModification = new EntityModification(updatedRevision, userIdentity);
-
-            final RevisionInfo updatedRevisionInfo = createRevisionInfo(updatedRevision, entityModification);
-            updatedEntity.setRevision(updatedRevisionInfo);
-
-            return new StandardRevisionUpdate<>(updatedEntity, entityModification);
-        });
-
-        return revisionUpdate.getEntity();
-    }
-
     private <T extends RevisableEntity> void populateRevisableEntityRevisions(final Collection<T> revisableEntities) {
         if (revisableEntities == null) {
             return;
diff --git a/nifi-registry-core/nifi-registry-revision/nifi-registry-revision-entity-service/src/test/java/org/apache/nifi/registry/revision/entity/TestStandardRevisableEntityService.java b/nifi-registry-core/nifi-registry-revision/nifi-registry-revision-entity-service/src/test/java/org/apache/nifi/registry/revision/entity/TestStandardRevisableEntityService.java
index 47b3d9c..0458d5c 100644
--- a/nifi-registry-core/nifi-registry-revision/nifi-registry-revision-entity-service/src/test/java/org/apache/nifi/registry/revision/entity/TestStandardRevisableEntityService.java
+++ b/nifi-registry-core/nifi-registry-revision/nifi-registry-revision-entity-service/src/test/java/org/apache/nifi/registry/revision/entity/TestStandardRevisableEntityService.java
@@ -133,6 +133,34 @@ public class TestStandardRevisableEntityService {
         assertEquals("user2", updatedEntity.getRevision().getLastModifier());
     }
 
+    @Test
+    public void testUpdateWithClientId() {
+        final RevisionInfo revisionInfo = new RevisionInfo("client-1", 0L);
+        final TestEntity requestEntity = new TestEntity("1", revisionInfo);
+
+        final RevisableEntity createdEntity = entityService.create(
+                requestEntity, "user1", () -> requestEntity);
+        assertNotNull(createdEntity);
+        assertEquals(requestEntity.getIdentifier(), createdEntity.getIdentifier());
+        assertNotNull(createdEntity.getRevision());
+        assertEquals(1, createdEntity.getRevision().getVersion().longValue());
+
+        final RevisableEntity updatedEntity = entityService.update(
+                createdEntity, "user2", () -> createdEntity);
+        assertNotNull(updatedEntity.getRevision());
+        assertEquals(2, updatedEntity.getRevision().getVersion().longValue());
+        assertEquals("user2", updatedEntity.getRevision().getLastModifier());
+
+        // set the version back to 0 to prove that we can update based on client id being the same
+        updatedEntity.getRevision().setVersion(0L);
+
+        final RevisableEntity updatedEntity2 = entityService.update(
+                createdEntity, "user3", () -> updatedEntity);
+        assertNotNull(updatedEntity2.getRevision());
+        assertEquals(3, updatedEntity2.getRevision().getVersion().longValue());
+        assertEquals("user3", updatedEntity2.getRevision().getLastModifier());
+    }
+
     @Test(expected = IllegalArgumentException.class)
     public void testUpdateWhenMissingRevision() {
         final RevisionInfo revisionInfo = new RevisionInfo(null, 0L);