Jackie-Jiang commented on code in PR #15190:
URL: https://github.com/apache/pinot/pull/15190#discussion_r1980025335
##########
pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixSegmentOnlineOfflineStateModelGenerator.java:
##########
@@ -46,23 +40,37 @@ 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;
+ 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(CONSUMING_STATE, ONLINE_STATE,
DEFAULT_STATE_TRANSITION_PRIORITY);
+ builder.addTransition(OFFLINE_STATE, CONSUMING_STATE,
DEFAULT_STATE_TRANSITION_PRIORITY);
+ builder.addTransition(OFFLINE_STATE, ONLINE_STATE,
DEFAULT_STATE_TRANSITION_PRIORITY);
+ builder.addTransition(CONSUMING_STATE, OFFLINE_STATE,
DEFAULT_STATE_TRANSITION_PRIORITY);
+ builder.addTransition(ONLINE_STATE, OFFLINE_STATE,
DEFAULT_STATE_TRANSITION_PRIORITY);
Review Comment:
(minor) Shall we re-order them with certain pattern? Without a pattern it is
quite easy to miss some state transitions
##########
pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/PinotHelixSegmentOnlineOfflineStateModelGenerator.java:
##########
@@ -46,23 +40,37 @@ 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;
Review Comment:
Let's also give higher priority to state transitions to `OFFLINE` state
(e.g. 2) because that can reduce the memory pressure of the server.
--
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]