Matthew Clarke created NIFI-7255:
------------------------------------
Summary: nifi.properties configuration change can result in
duplicate nodes listed in Cluster UI
Key: NIFI-7255
URL: https://issues.apache.org/jira/browse/NIFI-7255
Project: Apache NiFi
Issue Type: Bug
Components: Core Framework
Affects Versions: 1.10.0, 1.9.0, 1.8.0, 1.7.0
Reporter: Matthew Clarke
The elements that go in to coming up with the "Node identifier" which is then
store in local state on a NiFi node include:
/**
the unique identifier for the node
*/
private final String id; /**
the IP or hostname to use for sending requests to the node's external
interface
*/
private final String apiAddress; /**
the port to use use for sending requests to the node's external interface,
this can be HTTP API port or HTTPS API port depending on whether //TODO: .
*/
private final int apiPort; /**
the IP or hostname to use for sending requests to the node's internal
interface
*/
private final String socketAddress; /**
the port to use for sending requests to the node's internal interface
*/
private final int socketPort; /**
The IP or hostname to use for sending FlowFiles when load balancing a connection
*/
private final String loadBalanceAddress; /**
the port to use for sending FlowFiles when load balancing a connection
*/
private final int loadBalancePort; /**
the IP or hostname that external clients should use to communicate with this
node via Site-to-Site
*/
private final String siteToSiteAddress; /**
the port that external clients should use to communicate with this node via
Site-to-Site RAW Socket protocol
*/
private final Integer siteToSitePort; /**
the port that external clients should use to communicate with this node via
Site-to-Site HTTP protocol,
this can be HTTP API port or HTTPS API port depending on whether
siteToSiteSecure or not.
*/
private final Integer siteToSiteHttpApiPort; /**
whether or not site-to-site communications with this node are secure
*/
private final Boolean siteToSiteSecure; private final Set<String>
nodeIdentities;
With the following fields being used to determine quality:
apiAddress
apiPort
socketAddress
socketPort
If for example the apiPort is changed by switching from 8080 for (http) to 8443
(for https), the node will show up twice in the in the cluster UI (
hostname:8443 --> connected and hostname:8080 --> disconnected). Having these
disconnected nodes will prevent changes to the UI. Worse yet is that ZK may
report <hostname> as the elected Cluster coordinator and end up having both the
8080 and 8443 node both being marked as the cluster coordinator. Then you may
not even be able to access the cluster because requests fails to replicate to
the Cluster coordinator because it is not connected.
Resolving this issue requires users to shutdown NiFi, delete the local state
directory contents, and restart NiFi.
Downside to this resolution is any local state retained for NiFi components
(for example processors) is lost as well.
Suggested solution here is for NiFi to retain current node identifier field
configuration values. If on restart loaded configurations show any change to
those values, NiFi should clear out the previous retained node ids and create
all new node Ids.
Might also make sense to move the stored out of local state to make manual
removal of this information possible without affecting state stored by
components found in the flow.xml.
The following Jira only addressed what specific configuration change that can
result in this issue:
https://jira.apache.org/jira/browse/NIFI-5672
--
This message was sent by Atlassian Jira
(v8.3.4#803005)