This is an automated email from the ASF dual-hosted git repository.
exceptionfactory 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 c77f85aafb NIFI-10070 Updated status merging for ControllerService and
ReportingTask entities
c77f85aafb is described below
commit c77f85aafb7d055caf2215fc6d382cb3faed1544
Author: Nathan Gough <[email protected]>
AuthorDate: Thu Jun 23 17:41:44 2022 -0400
NIFI-10070 Updated status merging for ControllerService and ReportingTask
entities
- Corrected node identifier selection in multiple Mergers
This closes #6154
Signed-off-by: David Handermann <[email protected]>
---
.../web/api/dto/status/ReportingTaskStatusDTO.java | 4 +
.../ControllerServicesEndpointMerger.java | 8 +-
.../http/endpoints/InputPortsEndpointMerger.java | 8 +-
.../http/endpoints/OutputPortsEndpointMerger.java | 8 +-
.../endpoints/ProcessGroupsEndpointMerger.java | 8 +-
.../http/endpoints/ProcessorsEndpointMerger.java | 8 +-
.../RemoteProcessGroupsEndpointMerger.java | 8 +-
.../endpoints/ReportingTasksEndpointMerger.java | 8 +-
.../endpoints/RuntimeManifestEndpointMerger.java | 2 +-
.../http/endpoints/UserGroupsEndpointMerger.java | 8 +-
.../http/endpoints/UsersEndpointMerger.java | 8 +-
.../manager/ControllerServiceEntityMerger.java | 11 +++
.../cluster/manager/ReportingTaskEntityMerger.java | 11 +++
.../apache/nifi/cluster/manager/StatusMerger.java | 36 +++++++++
.../manager/ControllerServiceEntityMergerTest.java | 86 +++++++++++++++++++++
.../manager/ReportingTaskEntityMergerTest.java | 87 ++++++++++++++++++++++
16 files changed, 245 insertions(+), 64 deletions(-)
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ReportingTaskStatusDTO.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ReportingTaskStatusDTO.java
index 7426557ee4..e518e0c27c 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ReportingTaskStatusDTO.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/status/ReportingTaskStatusDTO.java
@@ -27,6 +27,10 @@ import javax.xml.bind.annotation.XmlType;
@XmlType(name = "reportingTaskStatus")
public class ReportingTaskStatusDTO extends ComponentStatusDTO {
+ public static final String RUNNING = "RUNNING";
+ public static final String STOPPED = "STOPPED";
+ public static final String DISABLED = "DISABLED";
+
@ApiModelProperty(value = "The run status of this ReportingTask",
accessMode = ApiModelProperty.AccessMode.READ_ONLY,
allowableValues = "RUNNING, STOPPED, DISABLED")
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ControllerServicesEndpointMerger.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ControllerServicesEndpointMerger.java
index b63d0eeb09..78c1aade0e 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ControllerServicesEndpointMerger.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ControllerServicesEndpointMerger.java
@@ -54,13 +54,7 @@ public class ControllerServicesEndpointMerger implements
EndpointResponseMerger
final Set<ControllerServiceEntity> nodeControllerServiceEntities =
nodeResponseEntity.getControllerServices();
for (final ControllerServiceEntity nodeControllerServiceEntity :
nodeControllerServiceEntities) {
- final NodeIdentifier nodeId = nodeResponse.getNodeId();
- Map<NodeIdentifier, ControllerServiceEntity> innerMap =
entityMap.get(nodeId);
- if (innerMap == null) {
- innerMap = new HashMap<>();
- entityMap.put(nodeControllerServiceEntity.getId(),
innerMap);
- }
-
+ Map<NodeIdentifier, ControllerServiceEntity> innerMap =
entityMap.computeIfAbsent(nodeControllerServiceEntity.getId(), k -> new
HashMap<>());
innerMap.put(nodeResponse.getNodeId(),
nodeControllerServiceEntity);
}
}
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/InputPortsEndpointMerger.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/InputPortsEndpointMerger.java
index 22d697e764..e5a6daa0f5 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/InputPortsEndpointMerger.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/InputPortsEndpointMerger.java
@@ -53,13 +53,7 @@ public class InputPortsEndpointMerger implements
EndpointResponseMerger {
final Set<PortEntity> nodePortEntities =
nodeResponseEntity.getInputPorts();
for (final PortEntity nodePortEntity : nodePortEntities) {
- final NodeIdentifier nodeId = nodeResponse.getNodeId();
- Map<NodeIdentifier, PortEntity> innerMap =
entityMap.get(nodeId);
- if (innerMap == null) {
- innerMap = new HashMap<>();
- entityMap.put(nodePortEntity.getId(), innerMap);
- }
-
+ Map<NodeIdentifier, PortEntity> innerMap =
entityMap.computeIfAbsent(nodePortEntity.getId(), k -> new HashMap<>());
innerMap.put(nodeResponse.getNodeId(), nodePortEntity);
}
}
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/OutputPortsEndpointMerger.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/OutputPortsEndpointMerger.java
index 1ab5236c74..562a90f514 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/OutputPortsEndpointMerger.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/OutputPortsEndpointMerger.java
@@ -53,13 +53,7 @@ public class OutputPortsEndpointMerger implements
EndpointResponseMerger {
final Set<PortEntity> nodePortEntities =
nodeResponseEntity.getOutputPorts();
for (final PortEntity nodePortEntity : nodePortEntities) {
- final NodeIdentifier nodeId = nodeResponse.getNodeId();
- Map<NodeIdentifier, PortEntity> innerMap =
entityMap.get(nodeId);
- if (innerMap == null) {
- innerMap = new HashMap<>();
- entityMap.put(nodePortEntity.getId(), innerMap);
- }
-
+ Map<NodeIdentifier, PortEntity> innerMap =
entityMap.computeIfAbsent(nodePortEntity.getId(), k -> new HashMap<>());
innerMap.put(nodeResponse.getNodeId(), nodePortEntity);
}
}
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ProcessGroupsEndpointMerger.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ProcessGroupsEndpointMerger.java
index 7cd6a44c8f..26bb7b4154 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ProcessGroupsEndpointMerger.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ProcessGroupsEndpointMerger.java
@@ -53,13 +53,7 @@ public class ProcessGroupsEndpointMerger implements
EndpointResponseMerger {
final Set<ProcessGroupEntity> nodeProcessGroupEntities =
nodeResponseEntity.getProcessGroups();
for (final ProcessGroupEntity nodeProcessGroupEntity :
nodeProcessGroupEntities) {
- final NodeIdentifier nodeId = nodeResponse.getNodeId();
- Map<NodeIdentifier, ProcessGroupEntity> innerMap =
entityMap.get(nodeId);
- if (innerMap == null) {
- innerMap = new HashMap<>();
- entityMap.put(nodeProcessGroupEntity.getId(), innerMap);
- }
-
+ Map<NodeIdentifier, ProcessGroupEntity> innerMap =
entityMap.computeIfAbsent(nodeProcessGroupEntity.getId(), k -> new HashMap<>());
innerMap.put(nodeResponse.getNodeId(), nodeProcessGroupEntity);
}
}
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ProcessorsEndpointMerger.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ProcessorsEndpointMerger.java
index 0a9b193d7d..2caea60c3e 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ProcessorsEndpointMerger.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ProcessorsEndpointMerger.java
@@ -53,13 +53,7 @@ public class ProcessorsEndpointMerger implements
EndpointResponseMerger {
final Set<ProcessorEntity> nodeProcessorEntities =
nodeResponseEntity.getProcessors();
for (final ProcessorEntity nodeProcessorEntity :
nodeProcessorEntities) {
- final NodeIdentifier nodeId = nodeResponse.getNodeId();
- Map<NodeIdentifier, ProcessorEntity> innerMap =
entityMap.get(nodeId);
- if (innerMap == null) {
- innerMap = new HashMap<>();
- entityMap.put(nodeProcessorEntity.getId(), innerMap);
- }
-
+ Map<NodeIdentifier, ProcessorEntity> innerMap =
entityMap.computeIfAbsent(nodeProcessorEntity.getId(), k -> new HashMap<>());
innerMap.put(nodeResponse.getNodeId(), nodeProcessorEntity);
}
}
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/RemoteProcessGroupsEndpointMerger.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/RemoteProcessGroupsEndpointMerger.java
index ce5be06886..8329681df9 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/RemoteProcessGroupsEndpointMerger.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/RemoteProcessGroupsEndpointMerger.java
@@ -65,13 +65,7 @@ public class RemoteProcessGroupsEndpointMerger implements
EndpointResponseMerger
if (nodeRpgEntities != null) {
for (final RemoteProcessGroupEntity nodeRpgEntity :
nodeRpgEntities) {
- final NodeIdentifier nodeId = nodeResponse.getNodeId();
- Map<NodeIdentifier, RemoteProcessGroupEntity> innerMap
= entityMap.get(nodeId);
- if (innerMap == null) {
- innerMap = new HashMap<>();
- entityMap.put(nodeRpgEntity.getId(), innerMap);
- }
-
+ Map<NodeIdentifier, RemoteProcessGroupEntity> innerMap
= entityMap.computeIfAbsent(nodeRpgEntity.getId(), k -> new HashMap<>());
innerMap.put(nodeResponse.getNodeId(), nodeRpgEntity);
}
}
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ReportingTasksEndpointMerger.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ReportingTasksEndpointMerger.java
index 643630bf22..47403d1ba2 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ReportingTasksEndpointMerger.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/ReportingTasksEndpointMerger.java
@@ -52,13 +52,7 @@ public class ReportingTasksEndpointMerger implements
EndpointResponseMerger {
final Set<ReportingTaskEntity> nodeReportingTaskEntities =
nodeResponseEntity.getReportingTasks();
for (final ReportingTaskEntity nodeReportingTaskEntity :
nodeReportingTaskEntities) {
- final NodeIdentifier nodeId = nodeResponse.getNodeId();
- Map<NodeIdentifier, ReportingTaskEntity> innerMap =
entityMap.get(nodeId);
- if (innerMap == null) {
- innerMap = new HashMap<>();
- entityMap.put(nodeReportingTaskEntity.getId(), innerMap);
- }
-
+ Map<NodeIdentifier, ReportingTaskEntity> innerMap =
entityMap.computeIfAbsent(nodeReportingTaskEntity.getId(), k -> new
HashMap<>());
innerMap.put(nodeResponse.getNodeId(),
nodeReportingTaskEntity);
}
}
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/RuntimeManifestEndpointMerger.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/RuntimeManifestEndpointMerger.java
index c673299add..070294d7a5 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/RuntimeManifestEndpointMerger.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/RuntimeManifestEndpointMerger.java
@@ -48,7 +48,7 @@ public class RuntimeManifestEndpointMerger implements
EndpointResponseMerger {
final RuntimeManifestEntity responseEntity =
clientResponse.getClientResponse().readEntity(RuntimeManifestEntity.class);
final RuntimeManifest responseManifest =
responseEntity.getRuntimeManifest();
- final Set<Bundle> responseBundles = responseManifest.getBundles() ==
null ? Collections.emptySet() : new
LinkedHashSet<>(responseManifest.getBundles());
+ final Set<Bundle> responseBundles = responseManifest.getBundles() ==
null ? new LinkedHashSet<>() : new
LinkedHashSet<>(responseManifest.getBundles());
for (final NodeResponse nodeResponse : successfulResponses) {
final RuntimeManifestEntity nodeResponseEntity =
nodeResponse.getClientResponse().readEntity(RuntimeManifestEntity.class);
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/UserGroupsEndpointMerger.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/UserGroupsEndpointMerger.java
index 51cc915b77..6019680206 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/UserGroupsEndpointMerger.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/UserGroupsEndpointMerger.java
@@ -57,13 +57,7 @@ public class UserGroupsEndpointMerger implements
EndpointResponseMerger {
userGroupEntities.retainAll(nodeUserGroupEntities);
for (final UserGroupEntity nodeUserGroupEntity :
nodeUserGroupEntities) {
- final NodeIdentifier nodeId = nodeResponse.getNodeId();
- Map<NodeIdentifier, UserGroupEntity> innerMap =
entityMap.get(nodeId);
- if (innerMap == null) {
- innerMap = new HashMap<>();
- entityMap.put(nodeUserGroupEntity.getId(), innerMap);
- }
-
+ Map<NodeIdentifier, UserGroupEntity> innerMap =
entityMap.computeIfAbsent(nodeUserGroupEntity.getId(), k -> new HashMap<>());
innerMap.put(nodeResponse.getNodeId(), nodeUserGroupEntity);
}
}
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/UsersEndpointMerger.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/UsersEndpointMerger.java
index 7984197694..9356ba6f01 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/UsersEndpointMerger.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/UsersEndpointMerger.java
@@ -57,13 +57,7 @@ public class UsersEndpointMerger implements
EndpointResponseMerger {
userEntities.retainAll(nodeUserEntities);
for (final UserEntity nodeUserEntity : nodeUserEntities) {
- final NodeIdentifier nodeId = nodeResponse.getNodeId();
- Map<NodeIdentifier, UserEntity> innerMap =
entityMap.get(nodeId);
- if (innerMap == null) {
- innerMap = new HashMap<>();
- entityMap.put(nodeUserEntity.getId(), innerMap);
- }
-
+ Map<NodeIdentifier, UserEntity> innerMap =
entityMap.computeIfAbsent(nodeUserEntity.getId(), k -> new HashMap<>());
innerMap.put(nodeResponse.getNodeId(), nodeUserEntity);
}
}
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/ControllerServiceEntityMerger.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/ControllerServiceEntityMerger.java
index 86d39ab8f5..18c8727ec4 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/ControllerServiceEntityMerger.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/ControllerServiceEntityMerger.java
@@ -36,6 +36,17 @@ import java.util.stream.Collectors;
public class ControllerServiceEntityMerger implements
ComponentEntityMerger<ControllerServiceEntity> {
+ @Override
+ public void merge(ControllerServiceEntity clientEntity,
Map<NodeIdentifier, ControllerServiceEntity> entityMap) {
+ ComponentEntityMerger.super.merge(clientEntity, entityMap);
+ for (Map.Entry<NodeIdentifier, ControllerServiceEntity> entry :
entityMap.entrySet()) {
+ final ControllerServiceEntity entityStatus = entry.getValue();
+ if (clientEntity != entityStatus) {
+ StatusMerger.merge(clientEntity.getStatus(),
entry.getValue().getStatus());
+ }
+ }
+ }
+
/**
* Merges the ControllerServiceEntity responses.
*
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/ReportingTaskEntityMerger.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/ReportingTaskEntityMerger.java
index 2784776e29..7617969523 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/ReportingTaskEntityMerger.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/ReportingTaskEntityMerger.java
@@ -29,6 +29,17 @@ import java.util.stream.Collectors;
public class ReportingTaskEntityMerger implements
ComponentEntityMerger<ReportingTaskEntity> {
+ @Override
+ public void merge(ReportingTaskEntity clientEntity, Map<NodeIdentifier,
ReportingTaskEntity> entityMap) {
+ ComponentEntityMerger.super.merge(clientEntity, entityMap);
+ for (Map.Entry<NodeIdentifier, ReportingTaskEntity> entry :
entityMap.entrySet()) {
+ final ReportingTaskEntity entityStatus = entry.getValue();
+ if (clientEntity != entityStatus) {
+ StatusMerger.merge(clientEntity.getStatus(),
entityStatus.getStatus());
+ }
+ }
+ }
+
/**
* Merges the ReportingTaskEntity responses.
*
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/StatusMerger.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/StatusMerger.java
index 0ad131fe79..8be82d919a 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/StatusMerger.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/manager/StatusMerger.java
@@ -17,6 +17,8 @@
package org.apache.nifi.cluster.manager;
+import org.apache.nifi.components.validation.ValidationStatus;
+import org.apache.nifi.controller.service.ControllerServiceState;
import org.apache.nifi.controller.status.FlowFileAvailability;
import org.apache.nifi.controller.status.ProcessGroupStatus;
import org.apache.nifi.controller.status.RunStatus;
@@ -41,6 +43,7 @@ import
org.apache.nifi.web.api.dto.diagnostics.JVMSystemDiagnosticsSnapshotDTO;
import org.apache.nifi.web.api.dto.status.ConnectionStatusDTO;
import
org.apache.nifi.web.api.dto.status.ConnectionStatusPredictionsSnapshotDTO;
import org.apache.nifi.web.api.dto.status.ConnectionStatusSnapshotDTO;
+import org.apache.nifi.web.api.dto.status.ControllerServiceStatusDTO;
import org.apache.nifi.web.api.dto.status.ControllerStatusDTO;
import org.apache.nifi.web.api.dto.status.NodeConnectionStatusSnapshotDTO;
import org.apache.nifi.web.api.dto.status.NodePortStatusSnapshotDTO;
@@ -55,6 +58,7 @@ import org.apache.nifi.web.api.dto.status.ProcessorStatusDTO;
import org.apache.nifi.web.api.dto.status.ProcessorStatusSnapshotDTO;
import org.apache.nifi.web.api.dto.status.RemoteProcessGroupStatusDTO;
import org.apache.nifi.web.api.dto.status.RemoteProcessGroupStatusSnapshotDTO;
+import org.apache.nifi.web.api.dto.status.ReportingTaskStatusDTO;
import org.apache.nifi.web.api.entity.ConnectionStatusSnapshotEntity;
import org.apache.nifi.web.api.entity.PortStatusSnapshotEntity;
import org.apache.nifi.web.api.entity.ProcessGroupStatusSnapshotEntity;
@@ -1015,4 +1019,36 @@ public class StatusMerger {
return formatCount(count) + " (" + formatDataSize(bytes) + ")";
}
+ public static void merge(final ControllerServiceStatusDTO target, final
ControllerServiceStatusDTO toMerge) {
+ if (target == null || toMerge == null) {
+ return;
+ }
+
+ // RunStatus for ControllerServiceStatusDTO can be one of [ENABLED,
ENABLING, DISABLED, DISABLING]
+ if
(ControllerServiceState.DISABLING.name().equalsIgnoreCase(toMerge.getRunStatus()))
{
+ target.setRunStatus(ControllerServiceState.DISABLING.name());
+ } else if
(ControllerServiceState.ENABLING.name().equalsIgnoreCase(toMerge.getRunStatus()))
{
+ target.setRunStatus(ControllerServiceState.ENABLING.name());
+ }
+
+ if
(ValidationStatus.VALIDATING.name().equalsIgnoreCase(toMerge.getValidationStatus()))
{
+ target.setValidationStatus(ValidationStatus.VALIDATING.name());
+ } else if
(ValidationStatus.INVALID.name().equalsIgnoreCase(toMerge.getRunStatus())) {
+ target.setValidationStatus(ValidationStatus.INVALID.name());
+ }
+ }
+
+ public static void merge(final ReportingTaskStatusDTO target, final
ReportingTaskStatusDTO toMerge) {
+ if (target == null || toMerge == null) {
+ return;
+ }
+
+ target.setActiveThreadCount(target.getActiveThreadCount() +
toMerge.getActiveThreadCount());
+
+ if
(ValidationStatus.VALIDATING.name().equalsIgnoreCase(toMerge.getValidationStatus()))
{
+ target.setValidationStatus(ValidationStatus.VALIDATING.name());
+ } else if
(ValidationStatus.INVALID.name().equalsIgnoreCase(toMerge.getRunStatus())) {
+ target.setValidationStatus(ValidationStatus.INVALID.name());
+ }
+ }
}
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/test/java/org/apache/nifi/cluster/manager/ControllerServiceEntityMergerTest.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/test/java/org/apache/nifi/cluster/manager/ControllerServiceEntityMergerTest.java
new file mode 100644
index 0000000000..cd31430aae
--- /dev/null
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/test/java/org/apache/nifi/cluster/manager/ControllerServiceEntityMergerTest.java
@@ -0,0 +1,86 @@
+/*
+ * 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.cluster.manager;
+
+import org.apache.nifi.cluster.protocol.NodeIdentifier;
+import org.apache.nifi.components.validation.ValidationStatus;
+import org.apache.nifi.controller.ScheduledState;
+import org.apache.nifi.controller.status.RunStatus;
+import org.apache.nifi.web.api.dto.ControllerServiceDTO;
+import org.apache.nifi.web.api.dto.PermissionsDTO;
+import org.apache.nifi.web.api.dto.RevisionDTO;
+import org.apache.nifi.web.api.dto.status.ControllerServiceStatusDTO;
+import org.apache.nifi.web.api.entity.ControllerServiceEntity;
+import org.junit.jupiter.api.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class ControllerServiceEntityMergerTest {
+
+ @Test
+ void testMergeStatusFields() {
+ final ControllerServiceEntity nodeOneControllerserviceEntity =
getControllerServiceEntity("id1", RunStatus.Stopped.name(),
ValidationStatus.VALIDATING.name());
+ final ControllerServiceEntity nodeTwoControllerServiceEntity =
getControllerServiceEntity("id2", RunStatus.Validating.name(),
ValidationStatus.INVALID.name());
+ final Map<NodeIdentifier, ControllerServiceEntity> entityMap = new
HashMap();
+ entityMap.put(getNodeIdentifier("node1", 8000),
nodeOneControllerserviceEntity);
+ entityMap.put(getNodeIdentifier("node2", 8010),
nodeTwoControllerServiceEntity);
+
+ ControllerServiceEntityMerger merger = new
ControllerServiceEntityMerger();
+ merger.merge(nodeOneControllerserviceEntity, entityMap);
+ assertEquals("Stopped",
nodeOneControllerserviceEntity.getStatus().getRunStatus());
+ }
+
+ private NodeIdentifier getNodeIdentifier(final String id, final int port) {
+ return new NodeIdentifier(id, "localhost", port, "localhost", port+1,
"localhost", port+2, port+3, true);
+ }
+
+ private ControllerServiceEntity getControllerServiceEntity(final String
id, final String runStatus, final String validationStatus) {
+ final ControllerServiceDTO dto = new ControllerServiceDTO();
+ dto.setId(id);
+ dto.setState(ScheduledState.STOPPED.name());
+ dto.setValidationStatus(ValidationStatus.VALIDATING.name());
+
+ final ControllerServiceStatusDTO statusDto = new
ControllerServiceStatusDTO();
+ statusDto.setRunStatus(RunStatus.Stopped.name());
+ statusDto.setActiveThreadCount(1);
+ statusDto.setValidationStatus(ValidationStatus.VALIDATING.name());
+
+ final PermissionsDTO permissed = new PermissionsDTO();
+ permissed.setCanRead(true);
+ permissed.setCanWrite(true);
+
+ final ControllerServiceEntity entity = new ControllerServiceEntity();
+ entity.setComponent(dto);
+ entity.setRevision(createNewRevision());
+ entity.setDisconnectedNodeAcknowledged(true);
+ entity.setPermissions(permissed);
+ entity.setStatus(statusDto);
+
+ return entity;
+ }
+
+ public RevisionDTO createNewRevision() {
+ final RevisionDTO revisionDto = new RevisionDTO();
+ revisionDto.setClientId(getClass().getName());
+ revisionDto.setVersion(0L);
+ return revisionDto;
+ }
+}
\ No newline at end of file
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/test/java/org/apache/nifi/cluster/manager/ReportingTaskEntityMergerTest.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/test/java/org/apache/nifi/cluster/manager/ReportingTaskEntityMergerTest.java
new file mode 100644
index 0000000000..8554587368
--- /dev/null
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/test/java/org/apache/nifi/cluster/manager/ReportingTaskEntityMergerTest.java
@@ -0,0 +1,87 @@
+/*
+ * 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.cluster.manager;
+
+import org.apache.nifi.cluster.protocol.NodeIdentifier;
+import org.apache.nifi.components.validation.ValidationStatus;
+import org.apache.nifi.controller.ScheduledState;
+import org.apache.nifi.web.api.dto.PermissionsDTO;
+import org.apache.nifi.web.api.dto.ReportingTaskDTO;
+import org.apache.nifi.web.api.dto.RevisionDTO;
+import org.apache.nifi.web.api.dto.status.ReportingTaskStatusDTO;
+import org.apache.nifi.web.api.entity.ReportingTaskEntity;
+import org.junit.jupiter.api.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class ReportingTaskEntityMergerTest {
+
+ @Test
+ void testMergeStatusFields() {
+ final ReportingTaskEntity nodeOneReportingTaskEntity =
getReportingTaskEntity("id1", ReportingTaskStatusDTO.RUNNING,
ValidationStatus.VALID.name());
+ final ReportingTaskEntity nodeTwoReportingTaskEntity =
getReportingTaskEntity("id2", ReportingTaskStatusDTO.RUNNING,
ValidationStatus.VALIDATING.name());
+ final Map<NodeIdentifier, ReportingTaskEntity> entityMap = new
HashMap();
+ entityMap.put(getNodeIdentifier("node1", 8000),
nodeOneReportingTaskEntity);
+ entityMap.put(getNodeIdentifier("node2", 8010),
nodeTwoReportingTaskEntity);
+
+ ReportingTaskEntityMerger merger = new ReportingTaskEntityMerger();
+ merger.merge(nodeOneReportingTaskEntity, entityMap);
+ assertEquals(2,
nodeOneReportingTaskEntity.getStatus().getActiveThreadCount());
+ assertEquals(ReportingTaskStatusDTO.RUNNING,
nodeOneReportingTaskEntity.getStatus().getRunStatus());
+ assertEquals(ValidationStatus.VALIDATING.name(),
nodeOneReportingTaskEntity.getStatus().getValidationStatus());
+ }
+
+ private NodeIdentifier getNodeIdentifier(final String id, final int port) {
+ return new NodeIdentifier(id, "localhost", port, "localhost", port+1,
"localhost", port+2, port+3, true);
+ }
+
+ private ReportingTaskEntity getReportingTaskEntity(final String id, final
String runStatus, final String validationStatus) {
+ final ReportingTaskDTO dto = new ReportingTaskDTO();
+ dto.setId(id);
+ dto.setState(ScheduledState.STOPPED.name());
+ dto.setValidationStatus(validationStatus);
+
+ final ReportingTaskStatusDTO statusDto = new ReportingTaskStatusDTO();
+ statusDto.setRunStatus(runStatus);
+ statusDto.setActiveThreadCount(1);
+ statusDto.setValidationStatus(validationStatus);
+
+ final PermissionsDTO permissed = new PermissionsDTO();
+ permissed.setCanRead(true);
+ permissed.setCanWrite(true);
+
+ final ReportingTaskEntity entity = new ReportingTaskEntity();
+ entity.setComponent(dto);
+ entity.setRevision(createNewRevision());
+ entity.setDisconnectedNodeAcknowledged(true);
+ entity.setPermissions(permissed);
+ entity.setStatus(statusDto);
+
+ return entity;
+ }
+
+ public RevisionDTO createNewRevision() {
+ final RevisionDTO revisionDto = new RevisionDTO();
+ revisionDto.setClientId(getClass().getName());
+ revisionDto.setVersion(0L);
+ return revisionDto;
+ }
+}
\ No newline at end of file