Jackie-Jiang commented on code in PR #15190:
URL: https://github.com/apache/pinot/pull/15190#discussion_r1980345385
##########
pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixSegmentOnlineOfflineStateModelGenerator.java:
##########
@@ -46,23 +40,40 @@ private PinotHelixSegmentOnlineOfflineStateModelGenerator()
{
public static final String DROPPED_STATE = "DROPPED";
public static final String CONSUMING_STATE = "CONSUMING";
+ // Helix state transitions can be assigned a priority which is used by Helix
+ // to issue the order of state transitions. A lower priority value means a
higher
+ // priority in Helix.
+ // Set all DROPPED related state transitions to have a higher priority.
+ // Handling DROPPED state transitions with a higher priority can help prevent
+ // servers from running into disk utilization problems.
+ public static final int DROPPED_STATE_TRANSITION_PRIORITY = 1;
+ // Set all state transitions to OFFLINE state to have higher priority than
default but less
+ // than DROPPED. Processing OFFLINE transitions earlier can help reduce
memory pressure on servers.
+ public static final int OFFLINE_STATE_TRANSITION_PRIORITY = 2;
+ public static final int DEFAULT_STATE_TRANSITION_PRIORITY =
Integer.MAX_VALUE;
+
public static StateModelDefinition generatePinotStateModelDefinition() {
StateModelDefinition.Builder builder = new
StateModelDefinition.Builder(PINOT_SEGMENT_ONLINE_OFFLINE_STATE_MODEL);
+ // Set the initial state when the node starts
builder.initialState(OFFLINE_STATE);
builder.addState(ONLINE_STATE);
builder.addState(CONSUMING_STATE);
builder.addState(OFFLINE_STATE);
builder.addState(DROPPED_STATE);
- // Set the initial state when the node starts
// Add transitions between the states.
- builder.addTransition(CONSUMING_STATE, ONLINE_STATE);
- builder.addTransition(OFFLINE_STATE, CONSUMING_STATE);
- builder.addTransition(OFFLINE_STATE, ONLINE_STATE);
- builder.addTransition(CONSUMING_STATE, OFFLINE_STATE);
- builder.addTransition(ONLINE_STATE, OFFLINE_STATE);
- builder.addTransition(OFFLINE_STATE, DROPPED_STATE);
+ builder.addTransition(OFFLINE_STATE, CONSUMING_STATE,
DEFAULT_STATE_TRANSITION_PRIORITY);
+ builder.addTransition(OFFLINE_STATE, ONLINE_STATE,
DEFAULT_STATE_TRANSITION_PRIORITY);
+ builder.addTransition(CONSUMING_STATE, ONLINE_STATE,
DEFAULT_STATE_TRANSITION_PRIORITY);
+ builder.addTransition(CONSUMING_STATE, OFFLINE_STATE,
OFFLINE_STATE_TRANSITION_PRIORITY);
+ builder.addTransition(ONLINE_STATE, OFFLINE_STATE,
OFFLINE_STATE_TRANSITION_PRIORITY);
Review Comment:
(minor) Add some comment for state transitions to OFFLINE as well. Currently
they are query easy to be mixed with `DEFAULT_STATE_TRANSITION_PRIORITY`
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]