Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions src/main/java/org/apache/nifi/controller/NodeConnectionState.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/*
* 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.controller;

public enum NodeConnectionState {
/**
* A node has issued a connection request to the cluster, but has not yet
* sent a heartbeat. A connecting node can transition to DISCONNECTED or CONNECTED. The cluster
* will not accept any external requests to change the flow while any node is in
* this state.
*/
CONNECTING,

/**
* A node that is connected to the cluster. A connecting node transitions
* to connected after the cluster receives the node's first heartbeat. A
* connected node can transition to disconnecting.
*/
CONNECTED,

/**
* A node that is in the process of offloading its FlowFiles from the node.
*/
OFFLOADING,

/**
* A node that is in the process of disconnecting from the cluster.
* A DISCONNECTING node will always transition to DISCONNECTED.
*/
DISCONNECTING,

/**
* A node that has offloaded its FlowFiles from the node.
*/
OFFLOADED,

/**
* A node that is not connected to the cluster.
* A DISCONNECTED node can transition to CONNECTING.
*/
DISCONNECTED,

/**
* A NodeConnectionState of REMOVED indicates that the node was removed from the cluster
* and is used in order to notify other nodes in the cluster.
*/
REMOVED,

/**
* A NiFi instance that is not configured to participate in a cluster.
*/
STANDALONE
}
11 changes: 11 additions & 0 deletions src/main/java/org/apache/nifi/controller/NodeTypeProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,17 @@ default boolean isConnected() {
return false;
}

/**
* Returns the current node connection state and never null. The compatibility default is
* {@link NodeConnectionState#STANDALONE}. Providers for clustered NiFi should override this
* method with the current node lifecycle state.
*
* @return current node connection state
*/
default NodeConnectionState getNodeConnectionState() {
return NodeConnectionState.STANDALONE;
}

/**
* @return true if this instance is the primary node in the cluster; false otherwise
*/
Expand Down
40 changes: 40 additions & 0 deletions src/test/java/org/apache/nifi/controller/NodeTypeProviderTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
* 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.controller;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

class NodeTypeProviderTest {

@Test
void getNodeConnectionStateReturnsStandaloneForLegacyImplementations() {
final NodeTypeProvider nodeTypeProvider = new NodeTypeProvider() {
@Override
public boolean isClustered() {
return false;
}

@Override
public boolean isPrimary() {
return false;
}
};

assertEquals(NodeConnectionState.STANDALONE, nodeTypeProvider.getNodeConnectionState());
}
}
Loading