This is an automated email from the ASF dual-hosted git repository. markap14 pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push: new 29618ae5c6 NIFI-11076: Resolving deadlock issue in StandardParameterContext (#6865) 29618ae5c6 is described below commit 29618ae5c64a210fb9b497512fcc5d2e26575c75 Author: Joe Gresock <jgres...@gmail.com> AuthorDate: Mon Jan 23 10:54:38 2023 -0500 NIFI-11076: Resolving deadlock issue in StandardParameterContext (#6865) * NIFI-11076: Resolving deadlock issue in StandardParameterContext * NIFI-11076: Resolving deadlock issue in StandardParameterContext --- .../nifi/parameter/StandardParameterContext.java | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/parameter/StandardParameterContext.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/parameter/StandardParameterContext.java index 63aa3e50d6..339317fdd9 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/parameter/StandardParameterContext.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/parameter/StandardParameterContext.java @@ -47,6 +47,7 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Stack; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -61,7 +62,7 @@ public class StandardParameterContext implements ParameterContext { private final Authorizable parentAuthorizable; private String name; - private long version = 0L; + private AtomicLong version = new AtomicLong(0L); private final Map<ParameterDescriptor, Parameter> parameters = new LinkedHashMap<>(); private final List<ParameterContext> inheritedParameterContexts = new ArrayList<>(); private ParameterProvider parameterProvider; @@ -105,7 +106,7 @@ public class StandardParameterContext implements ParameterContext { public void setName(final String name) { writeLock.lock(); try { - this.version++; + this.version.incrementAndGet(); this.name = name; } finally { writeLock.unlock(); @@ -125,8 +126,9 @@ public class StandardParameterContext implements ParameterContext { @Override public void setParameters(final Map<String, Parameter> updatedParameters) { writeLock.lock(); + final Map<String, ParameterUpdate> parameterUpdates = new HashMap<>(); try { - this.version++; + this.version.incrementAndGet(); final Map<ParameterDescriptor, Parameter> currentEffectiveParameters = getEffectiveParameters(); final Map<ParameterDescriptor, Parameter> effectiveProposedParameters = getEffectiveParameters(getProposedParameters(updatedParameters)); @@ -139,12 +141,11 @@ public class StandardParameterContext implements ParameterContext { updateParameters(parameters, updatedParameters, true); // Get a list of all effective updates in order to alert referencing components - final Map<String, ParameterUpdate> parameterUpdates = new HashMap<>(updateParameters(currentEffectiveParameters, effectiveParameterUpdates, false)); - - alertReferencingComponents(parameterUpdates); + parameterUpdates.putAll(updateParameters(currentEffectiveParameters, effectiveParameterUpdates, false)); } finally { writeLock.unlock(); } + alertReferencingComponents(parameterUpdates); } private Map<ParameterDescriptor, Parameter> getProposedParameters(final Map<String, Parameter> proposedParameterUpdates) { @@ -270,12 +271,7 @@ public class StandardParameterContext implements ParameterContext { @Override public long getVersion() { - readLock.lock(); - try { - return version; - } finally { - readLock.unlock(); - } + return version.get(); } public Optional<Parameter> getParameter(final String parameterName) { @@ -597,7 +593,7 @@ public class StandardParameterContext implements ParameterContext { writeLock.lock(); try { - this.version++; + this.version.incrementAndGet(); final Map<ParameterDescriptor, Parameter> currentEffectiveParameters = getEffectiveParameters(); final Map<ParameterDescriptor, Parameter> effectiveProposedParameters = getEffectiveParameters(inheritedParameterContexts);