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);