You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2016/12/14 20:46:45 UTC

nifi git commit: NIFI-3129: When adding controller services to a snippet, ensure that we don't add the service multiple times, even when it's referenced by child process groups. This closes #1284

Repository: nifi
Updated Branches:
  refs/heads/support/nifi-1.0.x f477590e7 -> fc2941553


NIFI-3129: When adding controller services to a snippet, ensure that we don't add the service multiple times, even when it's referenced by child process groups. This closes #1284


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/fc294155
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/fc294155
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/fc294155

Branch: refs/heads/support/nifi-1.0.x
Commit: fc2941553ecea7a29d6e74ac0fa93c8533506121
Parents: f477590
Author: Mark Payne <ma...@hotmail.com>
Authored: Wed Nov 30 11:07:32 2016 -0500
Committer: Mark Payne <ma...@hotmail.com>
Committed: Wed Dec 14 15:40:38 2016 -0500

----------------------------------------------------------------------
 .../apache/nifi/util/ComponentIdGenerator.java   |  8 +++++++-
 .../org/apache/nifi/web/util/SnippetUtils.java   | 19 +++++++++++++------
 2 files changed, 20 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/fc294155/nifi-commons/nifi-utils/src/main/java/org/apache/nifi/util/ComponentIdGenerator.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-utils/src/main/java/org/apache/nifi/util/ComponentIdGenerator.java b/nifi-commons/nifi-utils/src/main/java/org/apache/nifi/util/ComponentIdGenerator.java
index 49f00b8..51cf0c0 100644
--- a/nifi-commons/nifi-utils/src/main/java/org/apache/nifi/util/ComponentIdGenerator.java
+++ b/nifi-commons/nifi-utils/src/main/java/org/apache/nifi/util/ComponentIdGenerator.java
@@ -19,6 +19,9 @@ package org.apache.nifi.util;
 import java.security.SecureRandom;
 import java.util.UUID;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
  * IMPORTANT: This component is not part of public API!
  * ====================================================
@@ -48,6 +51,7 @@ import java.util.UUID;
  * </p>
  */
 public class ComponentIdGenerator {
+    private static final Logger logger = LoggerFactory.getLogger(ComponentIdGenerator.class);
 
     public static final Object lock = new Object();
 
@@ -97,6 +101,8 @@ public class ComponentIdGenerator {
         long clockSequenceHi = clockSequence;
         clockSequenceHi <<= 48;
         lsb = clockSequenceHi | lsb;
-        return new UUID(time, lsb);
+        final UUID uuid = new UUID(time, lsb);
+        logger.debug("Generating UUID {} for msb={}, lsb={}, ensureUnique={}", uuid, msb, lsb, ensureUnique);
+        return uuid;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi/blob/fc294155/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/SnippetUtils.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/SnippetUtils.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/SnippetUtils.java
index 4f8afde..c5baa8c 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/SnippetUtils.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/SnippetUtils.java
@@ -110,6 +110,7 @@ public final class SnippetUtils {
         }
 
         final Set<ControllerServiceDTO> controllerServices = new HashSet<>();
+        final Set<ControllerServiceDTO> allServicesReferenced = new HashSet<>();
 
         // add any processors
         final Set<ProcessorDTO> processors = new LinkedHashSet<>();
@@ -122,7 +123,10 @@ public final class SnippetUtils {
                 processors.add(dtoFactory.createProcessorDto(processor));
 
                 if (includeControllerServices) {
-                    controllerServices.addAll(getControllerServices(processor.getProperties()));
+                    // Include all referenced services that are not already included in this snippet.
+                    getControllerServices(processor.getProperties()).stream()
+                        .filter(svc -> allServicesReferenced.add(svc))
+                        .forEach(svc -> controllerServices.add(svc));
                 }
             }
         }
@@ -199,7 +203,7 @@ public final class SnippetUtils {
                 final ProcessGroupDTO childGroupDto = dtoFactory.createProcessGroupDto(childGroup, recurse);
                 processGroups.add(childGroupDto);
 
-                addControllerServices(childGroup, childGroupDto);
+                addControllerServices(childGroup, childGroupDto, allServicesReferenced);
             }
         }
 
@@ -241,7 +245,7 @@ public final class SnippetUtils {
         return snippetDto;
     }
 
-    private void addControllerServices(final ProcessGroup group, final ProcessGroupDTO dto) {
+    private void addControllerServices(final ProcessGroup group, final ProcessGroupDTO dto, final Set<ControllerServiceDTO> allServicesReferenced) {
         final FlowSnippetDTO contents = dto.getContents();
         if (contents == null) {
             return;
@@ -250,8 +254,10 @@ public final class SnippetUtils {
         final Set<ControllerServiceDTO> controllerServices = new HashSet<>();
 
         for (final ProcessorNode procNode : group.getProcessors()) {
-            final Set<ControllerServiceDTO> servicesForProcessor = getControllerServices(procNode.getProperties());
-            controllerServices.addAll(servicesForProcessor);
+            // Include all referenced services that are not already included in this snippet.
+            getControllerServices(procNode.getProperties()).stream()
+                .filter(svc -> allServicesReferenced.add(svc))
+                .forEach(svc -> controllerServices.add(svc));
         }
 
         contents.setControllerServices(controllerServices);
@@ -266,7 +272,7 @@ public final class SnippetUtils {
                 continue;
             }
 
-            addControllerServices(childGroup, childDto);
+            addControllerServices(childGroup, childDto, allServicesReferenced);
         }
     }
 
@@ -826,6 +832,7 @@ public final class SnippetUtils {
                 uuid = new UUID(msb, seedId.getLeastSignificantBits());
             }
         }
+        logger.debug("Generating UUID {} from currentId={}, seed={}, isCopy={}", uuid, currentId, seed, isCopy);
         return uuid.toString();
     }