NIFI-4224: - Initial implementation of Process Group level Variable Registry - Updated to incorporate PR Feedback - Changed log message because slf4j-simple apparently has a memory leak; passing a String instead of passing in the Controller Service object as an argument addresses this. - This closes #2051
Project: http://git-wip-us.apache.org/repos/asf/nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/5cd8e93b Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/5cd8e93b Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/5cd8e93b Branch: refs/heads/master Commit: 5cd8e93beb30075ebe8623c2a278a5c9cf1afc75 Parents: c1b99d5 Author: Mark Payne <[email protected]> Authored: Tue Jul 25 13:46:10 2017 -0400 Committer: Matt Gilman <[email protected]> Committed: Thu Aug 17 10:42:29 2017 -0400 ---------------------------------------------------------------------- .../registry/ComponentVariableRegistry.java | 24 + .../nifi/registry/VariableDescriptor.java | 77 +- .../expression/language/EmptyPreparedQuery.java | 6 + .../language/InvalidPreparedQuery.java | 6 + .../language/NamedVariableImpact.java | 34 + .../language/NoVariablesImpacted.java | 25 + .../expression/language/PreparedQuery.java | 10 + .../attribute/expression/language/Query.java | 1082 +---------------- .../language/StandardPreparedQuery.java | 85 +- .../expression/language/ValueLookup.java | 1 + .../expression/language/VariableImpact.java | 26 + .../language/compile/CompiledExpression.java | 53 + .../language/compile/ExpressionCompiler.java | 1122 ++++++++++++++++++ .../functions/AttributeEvaluator.java | 45 - .../selection/AllAttributesEvaluator.java | 4 + .../selection/AnyAttributeEvaluator.java | 4 + .../selection/AttributeEvaluator.java | 49 + .../evaluation/selection/MappingEvaluator.java | 4 + .../selection/MultiNamedAttributeEvaluator.java | 4 + .../expression/language/TestQuery.java | 44 +- .../language/TestStandardPreparedQuery.java | 41 + .../expression/language/TestValueLookup.java | 4 +- .../nifi/web/api/dto/AffectedComponentDTO.java | 59 + .../nifi/web/api/dto/ProcessGroupDTO.java | 16 + .../apache/nifi/web/api/dto/VariableDTO.java | 69 ++ .../nifi/web/api/dto/VariableRegistryDTO.java | 50 + .../dto/VariableRegistryUpdateRequestDTO.java | 115 ++ .../api/dto/VariableRegistryUpdateStepDTO.java | 59 + .../ActivateControllerServicesEntity.java | 66 ++ .../api/entity/ScheduleComponentsEntity.java | 12 +- .../nifi/web/api/entity/VariableEntity.java | 51 + .../web/api/entity/VariableRegistryEntity.java | 50 + .../VariableRegistryUpdateRequestEntity.java | 49 + .../http/StandardHttpResponseMapper.java | 19 +- .../controller/AbstractConfiguredComponent.java | 42 +- .../nifi/controller/ConfiguredComponent.java | 7 + .../nifi/controller/ProcessScheduler.java | 9 +- .../apache/nifi/controller/ProcessorNode.java | 19 +- .../service/ControllerServiceNode.java | 2 +- .../service/ControllerServiceProvider.java | 6 +- .../service/ControllerServiceReference.java | 10 + .../org/apache/nifi/groups/ProcessGroup.java | 51 +- .../apache/nifi/controller/FlowController.java | 46 +- .../controller/StandardFlowSynchronizer.java | 70 +- .../nifi/controller/StandardProcessorNode.java | 77 +- .../reporting/AbstractReportingTaskNode.java | 22 +- .../reporting/StandardReportingTaskNode.java | 8 +- .../scheduling/EventDrivenSchedulingAgent.java | 9 +- .../scheduling/QuartzSchedulingAgent.java | 8 +- .../scheduling/StandardProcessScheduler.java | 42 +- .../scheduling/TimerDrivenSchedulingAgent.java | 6 +- .../serialization/FlowFromDOMFactory.java | 10 + .../serialization/StandardFlowSerializer.java | 16 +- .../service/ServiceStateTransition.java | 68 ++ .../service/StandardControllerServiceNode.java | 71 +- .../StandardControllerServiceProvider.java | 76 +- .../StandardControllerServiceReference.java | 33 + .../nifi/fingerprint/FingerprintFactory.java | 69 +- .../nifi/groups/StandardProcessGroup.java | 189 ++- .../nifi/processor/StandardProcessContext.java | 12 +- .../processor/StandardValidationContext.java | 7 +- .../variable/FileBasedVariableRegistry.java | 89 ++ .../variable/MutableVariableRegistry.java | 52 + .../StandardComponentVariableRegistry.java | 94 ++ .../nifi/util/FileBasedVariableRegistry.java | 88 -- .../src/main/resources/FlowConfiguration.xsd | 6 + .../src/main/resources/nifi-context.xml | 2 +- .../controller/StandardFlowServiceTest.java | 2 +- .../nifi/controller/TestFlowController.java | 2 +- .../controller/TestStandardProcessorNode.java | 48 +- .../reporting/TestStandardReportingContext.java | 20 +- .../scheduling/TestProcessorLifecycle.java | 2 +- .../TestStandardProcessScheduler.java | 10 +- .../StandardFlowSerializerTest.java | 2 +- .../StandardControllerServiceProviderTest.java | 2 +- .../TestStandardControllerServiceProvider.java | 41 +- .../service/mock/MockProcessGroup.java | 32 +- .../util/TestFileBasedVariableRegistry.java | 1 + .../apache/nifi/audit/ProcessGroupAuditor.java | 63 +- .../variable/VariableRegistryUpdateRequest.java | 109 ++ .../variable/VariableRegistryUpdateStep.java | 48 + .../org/apache/nifi/web/NiFiServiceFacade.java | 126 +- .../apache/nifi/web/NiFiServiceFacadeLock.java | 12 + .../nifi/web/StandardNiFiServiceFacade.java | 257 +++- .../nifi/web/api/ApplicationResource.java | 52 +- .../org/apache/nifi/web/api/FlowResource.java | 149 ++- .../nifi/web/api/ProcessGroupResource.java | 1034 +++++++++++++++- .../org/apache/nifi/web/api/dto/DtoFactory.java | 217 +++- .../apache/nifi/web/api/dto/EntityFactory.java | 13 + .../nifi/web/dao/ControllerServiceDAO.java | 2 +- .../apache/nifi/web/dao/ProcessGroupDAO.java | 44 +- .../dao/impl/StandardControllerServiceDAO.java | 9 +- .../web/dao/impl/StandardProcessGroupDAO.java | 80 +- .../java/org/apache/nifi/web/util/Pause.java | 30 + .../src/main/resources/nifi-web-api-context.xml | 1 + 95 files changed, 5258 insertions(+), 1831 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi/blob/5cd8e93b/nifi-api/src/main/java/org/apache/nifi/registry/ComponentVariableRegistry.java ---------------------------------------------------------------------- diff --git a/nifi-api/src/main/java/org/apache/nifi/registry/ComponentVariableRegistry.java b/nifi-api/src/main/java/org/apache/nifi/registry/ComponentVariableRegistry.java new file mode 100644 index 0000000..7284b77 --- /dev/null +++ b/nifi-api/src/main/java/org/apache/nifi/registry/ComponentVariableRegistry.java @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.registry; + +public interface ComponentVariableRegistry extends VariableRegistry { + VariableRegistry getParent(); + + void setParent(VariableRegistry parentRegistry); +} http://git-wip-us.apache.org/repos/asf/nifi/blob/5cd8e93b/nifi-api/src/main/java/org/apache/nifi/registry/VariableDescriptor.java ---------------------------------------------------------------------- diff --git a/nifi-api/src/main/java/org/apache/nifi/registry/VariableDescriptor.java b/nifi-api/src/main/java/org/apache/nifi/registry/VariableDescriptor.java index 5b1e88f..f9e9ce2 100644 --- a/nifi-api/src/main/java/org/apache/nifi/registry/VariableDescriptor.java +++ b/nifi-api/src/main/java/org/apache/nifi/registry/VariableDescriptor.java @@ -66,6 +66,44 @@ public final class VariableDescriptor implements Comparable<VariableDescriptor> return getName().compareTo(o.getName()); } + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public boolean isSensitive() { + return sensitive; + } + + @Override + public boolean equals(final Object other) { + if (other == null) { + return false; + } + if (this == other) { + return true; + } + if (!(other instanceof VariableDescriptor)) { + return false; + } + + final VariableDescriptor desc = (VariableDescriptor) other; + return this.name.equals(desc.name); + } + + @Override + public int hashCode() { + return 797 + this.name.hashCode() * 97; + } + + @Override + public String toString() { + return getClass().getSimpleName() + "[" + name + "]"; + } + public static final class Builder { private String name = null; @@ -112,43 +150,4 @@ public final class VariableDescriptor implements Comparable<VariableDescriptor> return new VariableDescriptor(this); } } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public boolean isSensitive() { - return sensitive; - } - - @Override - public boolean equals(final Object other) { - if (other == null) { - return false; - } - if (!(other instanceof VariableDescriptor)) { - return false; - } - if (this == other) { - return true; - } - - final VariableDescriptor desc = (VariableDescriptor) other; - return this.name.equals(desc.name); - } - - @Override - public int hashCode() { - return 797 + this.name.hashCode() * 97; - } - - @Override - public String toString() { - return getClass().getSimpleName() + "[" + name + "]"; - } - } http://git-wip-us.apache.org/repos/asf/nifi/blob/5cd8e93b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/EmptyPreparedQuery.java ---------------------------------------------------------------------- diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/EmptyPreparedQuery.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/EmptyPreparedQuery.java index a435b08..e9ac03b 100644 --- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/EmptyPreparedQuery.java +++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/EmptyPreparedQuery.java @@ -18,6 +18,7 @@ package org.apache.nifi.attribute.expression.language; import java.util.Map; + import org.apache.nifi.expression.AttributeValueDecorator; import org.apache.nifi.processor.exception.ProcessException; @@ -43,4 +44,9 @@ public class EmptyPreparedQuery implements PreparedQuery { public boolean isExpressionLanguagePresent() { return false; } + + @Override + public VariableImpact getVariableImpact() { + return VariableImpact.NEVER_IMPACTED; + } } http://git-wip-us.apache.org/repos/asf/nifi/blob/5cd8e93b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/InvalidPreparedQuery.java ---------------------------------------------------------------------- diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/InvalidPreparedQuery.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/InvalidPreparedQuery.java index ce0dec3..8ef996b 100644 --- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/InvalidPreparedQuery.java +++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/InvalidPreparedQuery.java @@ -18,6 +18,7 @@ package org.apache.nifi.attribute.expression.language; import java.util.Map; + import org.apache.nifi.attribute.expression.language.exception.AttributeExpressionLanguageException; import org.apache.nifi.expression.AttributeValueDecorator; import org.apache.nifi.processor.exception.ProcessException; @@ -52,4 +53,9 @@ public class InvalidPreparedQuery implements PreparedQuery { public boolean isExpressionLanguagePresent() { return false; } + + @Override + public VariableImpact getVariableImpact() { + return VariableImpact.NEVER_IMPACTED; + } } http://git-wip-us.apache.org/repos/asf/nifi/blob/5cd8e93b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/NamedVariableImpact.java ---------------------------------------------------------------------- diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/NamedVariableImpact.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/NamedVariableImpact.java new file mode 100644 index 0000000..730c6ec --- /dev/null +++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/NamedVariableImpact.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.attribute.expression.language; + +import java.util.Set; + +public class NamedVariableImpact implements VariableImpact { + private final Set<String> impactedVariableNames; + + public NamedVariableImpact(final Set<String> impactedVariableNames) { + this.impactedVariableNames = impactedVariableNames; + } + + @Override + public boolean isImpacted(final String variableName) { + return impactedVariableNames.contains(variableName); + } + +} http://git-wip-us.apache.org/repos/asf/nifi/blob/5cd8e93b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/NoVariablesImpacted.java ---------------------------------------------------------------------- diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/NoVariablesImpacted.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/NoVariablesImpacted.java new file mode 100644 index 0000000..669a532 --- /dev/null +++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/NoVariablesImpacted.java @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.nifi.attribute.expression.language; + +public class NoVariablesImpacted implements VariableImpact { + @Override + public boolean isImpacted(final String variableName) { + return false; + } +} http://git-wip-us.apache.org/repos/asf/nifi/blob/5cd8e93b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/PreparedQuery.java ---------------------------------------------------------------------- diff --git a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/PreparedQuery.java b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/PreparedQuery.java index 5552cac..c51656d 100644 --- a/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/PreparedQuery.java +++ b/nifi-commons/nifi-expression-language/src/main/java/org/apache/nifi/attribute/expression/language/PreparedQuery.java @@ -18,6 +18,7 @@ package org.apache.nifi.attribute.expression.language; import java.util.Map; + import org.apache.nifi.expression.AttributeValueDecorator; import org.apache.nifi.processor.exception.ProcessException; @@ -28,4 +29,13 @@ public interface PreparedQuery { String evaluateExpressions(final Map<String, String> valueLookup, final AttributeValueDecorator decorator, final Map<String, String> stateVariables) throws ProcessException; boolean isExpressionLanguagePresent(); + + /** + * Returns a {@link VariableImpact} that can be used to determine whether or not a given + * variable impacts this Expression. + * + * @return a {@link VariableImpact} that can be used to determine whether or not a given + * variable impacts this Expression. + */ + VariableImpact getVariableImpact(); }
