diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/FlowController.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/FlowController.java index 8da894f055..2e351a32b4 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/FlowController.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/FlowController.java @@ -1870,6 +1870,10 @@ public class FlowController implements EventAccess, ControllerServiceProvider, R procNode.setExecutionNode(ExecutionNode.valueOf(config.getExecutionNode())); } + if (processorDTO.getState().equals(ScheduledState.DISABLED.toString())) { + procNode.disable(); + } + // ensure that the scheduling strategy is set prior to these values procNode.setMaxConcurrentTasks(config.getConcurrentlySchedulableTaskCount()); procNode.setScheduldingPeriod(config.getSchedulingPeriod()); diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/TemplateUtils.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/TemplateUtils.java index ff7d61f4f5..be27c5e35d 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/TemplateUtils.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/TemplateUtils.java @@ -205,7 +205,6 @@ public class TemplateUtils { processorDTO.setDescription(null); processorDTO.setInputRequirement(null); processorDTO.setPersistsState(null); - processorDTO.setState(null); processorDTO.setSupportsBatching(null); processorDTO.setSupportsEventDriven(null); processorDTO.setSupportsParallelProcessing(null); diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/TestFlowController.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/TestFlowController.java index 31bf497996..691af10b6e 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/TestFlowController.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/TestFlowController.java @@ -846,6 +846,62 @@ public class TestFlowController { assertEquals(1, controller.getRootGroup().getProcessors().size()); } + @Test + public void testInstantiateSnippetWithDisabledProcessor() throws ProcessorInstantiationException { + final String id = UUID.randomUUID().toString(); + final BundleCoordinate coordinate = systemBundle.getBundleDetails().getCoordinate(); + final ProcessorNode processorNode = controller.createProcessor(DummyProcessor.class.getName(), id, coordinate); + processorNode.disable(); + + // create a processor dto + final ProcessorDTO processorDTO = new ProcessorDTO(); + processorDTO.setId(UUID.randomUUID().toString()); // use a different id here + processorDTO.setPosition(new PositionDTO(new Double(0), new Double(0))); + processorDTO.setStyle(processorNode.getStyle()); + processorDTO.setParentGroupId("1234"); + processorDTO.setInputRequirement(processorNode.getInputRequirement().name()); + processorDTO.setPersistsState(processorNode.getProcessor().getClass().isAnnotationPresent(Stateful.class)); + processorDTO.setRestricted(processorNode.isRestricted()); + processorDTO.setExtensionMissing(processorNode.isExtensionMissing()); + + processorDTO.setType(processorNode.getCanonicalClassName()); + processorDTO.setBundle(new BundleDTO(coordinate.getGroup(), coordinate.getId(), coordinate.getVersion())); + processorDTO.setName(processorNode.getName()); + processorDTO.setState(processorNode.getScheduledState().toString()); + + processorDTO.setRelationships(new ArrayList<>()); + + processorDTO.setDescription("description"); + processorDTO.setSupportsParallelProcessing(!processorNode.isTriggeredSerially()); + processorDTO.setSupportsEventDriven(processorNode.isEventDrivenSupported()); + processorDTO.setSupportsBatching(processorNode.isHighThroughputSupported()); + + ProcessorConfigDTO configDTO = new ProcessorConfigDTO(); + configDTO.setSchedulingPeriod(processorNode.getSchedulingPeriod()); + configDTO.setPenaltyDuration(processorNode.getPenalizationPeriod()); + configDTO.setYieldDuration(processorNode.getYieldPeriod()); + configDTO.setRunDurationMillis(processorNode.getRunDuration(TimeUnit.MILLISECONDS)); + configDTO.setConcurrentlySchedulableTaskCount(processorNode.getMaxConcurrentTasks()); + configDTO.setLossTolerant(processorNode.isLossTolerant()); + configDTO.setComments(processorNode.getComments()); + configDTO.setBulletinLevel(processorNode.getBulletinLevel().name()); + configDTO.setSchedulingStrategy(processorNode.getSchedulingStrategy().name()); + configDTO.setExecutionNode(processorNode.getExecutionNode().name()); + configDTO.setAnnotationData(processorNode.getAnnotationData()); + + processorDTO.setConfig(configDTO); + + // create the snippet with the processor + final FlowSnippetDTO flowSnippetDTO = new FlowSnippetDTO(); + flowSnippetDTO.setProcessors(Collections.singleton(processorDTO)); + + // instantiate the snippet + assertEquals(0, controller.getRootGroup().getProcessors().size()); + controller.instantiateSnippet(controller.getRootGroup(), flowSnippetDTO); + assertEquals(1, controller.getRootGroup().getProcessors().size()); + assertTrue(controller.getRootGroup().getProcessors().iterator().next().getScheduledState().equals(ScheduledState.DISABLED)); + } + @Test(expected = IllegalArgumentException.class) public void testInstantiateSnippetWhenControllerServiceMissingBundle() throws ProcessorInstantiationException { final String id = UUID.randomUUID().toString(); 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 ff8b566aa9..db7a5b0347 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 @@ -599,7 +599,11 @@ public final class SnippetUtils { final ProcessorDTO cp = dtoFactory.copy(processorDTO); cp.setId(generateId(processorDTO.getId(), idGenerationSeed, isCopy)); cp.setParentGroupId(groupId); - cp.setState(ScheduledState.STOPPED.toString()); + if(processorDTO.getState() != null && processorDTO.getState().equals(ScheduledState.DISABLED.toString())) { + cp.setState(ScheduledState.DISABLED.toString()); + } else { + cp.setState(ScheduledState.STOPPED.toString()); + } processors.add(cp); connectableMap.put(processorDTO.getParentGroupId() + "-" + processorDTO.getId(), dtoFactory.createConnectableDto(cp));