/** * Get a StateModelDefinition without transitions. The auto rebalancer doesn't take transitions * into account when computing mappings, so this is acceptable. * @param modelName name to give the model * @param initialState initial state for all nodes * @param states ordered map of state to count * @return incomplete StateModelDefinition for rebalancing */ private StateModelDefinition getIncompleteStateModelDef(String modelName, String initialState, LinkedHashMap<String, Integer> states) { StateModelDefinition.Builder builder = new StateModelDefinition.Builder(modelName); builder.initialState(initialState); int i = states.size(); for (String state : states.keySet()) { builder.addState(state, i); builder.upperBound(state, states.get(state)); i--; } return builder.build(); }
.upperBound("MASTER", 1)
/** * Create a modified version of OnlineOffline where the parallelism is enforced by the upper bound * of ONLINE * @param stateModelName * @param parallelism * @return */ private StateModelDefinition createEnforcedParallelismStateModelDef(String stateModelName, int parallelism) { StateModelDefinition.Builder builder = new StateModelDefinition.Builder(stateModelName).addState("ONLINE", 1).addState("OFFLINE") .addState("DROPPED").addState("ERROR").initialState("OFFLINE") .addTransition("ERROR", "OFFLINE", 1).addTransition("ONLINE", "OFFLINE", 2) .addTransition("OFFLINE", "DROPPED", 3).addTransition("OFFLINE", "ONLINE", 4) .dynamicUpperBound("ONLINE", String.valueOf(PARALLELISM)).upperBound("OFFLINE", -1) .upperBound("DROPPED", -1).upperBound("ERROR", -1); return builder.build(); }
/** * Build Leader-standby state model definition * @return */ public static StateModelDefinition build() { StateModelDefinition.Builder builder =new StateModelDefinition.Builder(name); // init state builder.initialState(States.OFFLINE.name()); // add states builder.addState(States.LEADER.name(), 0); builder.addState(States.STANDBY.name(), 1); builder.addState(States.OFFLINE.name(), 2); for (HelixDefinedState state : HelixDefinedState.values()) { builder.addState(state.name()); } // add transitions builder.addTransition(States.LEADER.name(), States.STANDBY.name(), 0); builder.addTransition(States.STANDBY.name(), States.LEADER.name(), 1); builder.addTransition(States.OFFLINE.name(), States.STANDBY.name(), 2); builder.addTransition(States.STANDBY.name(), States.OFFLINE.name(), 3); builder.addTransition(States.OFFLINE.name(), HelixDefinedState.DROPPED.name()); // bounds builder.upperBound(States.LEADER.name(), 1); builder.dynamicUpperBound(States.STANDBY.name(), "R"); return builder.build(); }
builder.upperBound("MASTER", 1);
private static StateModelDefinition defineStateModel() { StateModelDefinition.Builder builder = new StateModelDefinition.Builder(STATE_MODEL_NAME); // Add states and their rank to indicate priority. Lower the rank higher the // priority builder.addState(MASTER, 1); builder.addState(SLAVE, 2); builder.addState(OFFLINE); builder.addState(DROPPED); // Set the initial state when the node starts builder.initialState(OFFLINE); // Add transitions between the states. builder.addTransition(OFFLINE, SLAVE); builder.addTransition(SLAVE, OFFLINE); builder.addTransition(SLAVE, MASTER); builder.addTransition(MASTER, SLAVE); builder.addTransition(OFFLINE, DROPPED); // set constraints on states. // static constraint builder.upperBound(MASTER, 1); // dynamic constraint, R means it should be derived based on the replication // factor. builder.dynamicUpperBound(SLAVE, "R"); StateModelDefinition statemodelDefinition = builder.build(); return statemodelDefinition; }
/** * Build Master-slave state model definition * @return */ public static StateModelDefinition build() { StateModelDefinition.Builder builder =new StateModelDefinition.Builder(name); // init state builder.initialState(States.OFFLINE.name()); // add states builder.addState(States.MASTER.name(), 0); builder.addState(States.SLAVE.name(), 1); builder.addState(States.OFFLINE.name(), 2); for (HelixDefinedState state : HelixDefinedState.values()) { builder.addState(state.name()); } // add transitions builder.addTransition(States.MASTER.name(), States.SLAVE.name(), 0); builder.addTransition(States.SLAVE.name(), States.MASTER.name(), 1); builder.addTransition(States.OFFLINE.name(), States.SLAVE.name(), 2); builder.addTransition(States.SLAVE.name(), States.OFFLINE.name(), 3); builder.addTransition(States.OFFLINE.name(), HelixDefinedState.DROPPED.name()); // bounds builder.upperBound(States.MASTER.name(), 1); builder.dynamicUpperBound(States.SLAVE.name(), "R"); return builder.build(); }
/** * Build Leader-standby state model definition * @return */ public static StateModelDefinition build() { StateModelDefinition.Builder builder =new StateModelDefinition.Builder(name); // init state builder.initialState(States.OFFLINE.name()); // add states builder.addState(States.LEADER.name(), 0); builder.addState(States.STANDBY.name(), 1); builder.addState(States.OFFLINE.name(), 2); for (HelixDefinedState state : HelixDefinedState.values()) { builder.addState(state.name()); } // add transitions builder.addTransition(States.LEADER.name(), States.STANDBY.name(), 0); builder.addTransition(States.STANDBY.name(), States.LEADER.name(), 1); builder.addTransition(States.OFFLINE.name(), States.STANDBY.name(), 2); builder.addTransition(States.STANDBY.name(), States.OFFLINE.name(), 3); builder.addTransition(States.OFFLINE.name(), HelixDefinedState.DROPPED.name()); // bounds builder.upperBound(States.LEADER.name(), 1); builder.dynamicUpperBound(States.STANDBY.name(), "R"); return builder.build(); }
/** * Build Master-slave state model definition * @return */ public static StateModelDefinition build() { StateModelDefinition.Builder builder =new StateModelDefinition.Builder(name); // init state builder.initialState(States.OFFLINE.name()); // add states builder.addState(States.MASTER.name(), 0); builder.addState(States.SLAVE.name(), 1); builder.addState(States.OFFLINE.name(), 2); for (HelixDefinedState state : HelixDefinedState.values()) { builder.addState(state.name()); } // add transitions builder.addTransition(States.MASTER.name(), States.SLAVE.name(), 0); builder.addTransition(States.SLAVE.name(), States.MASTER.name(), 1); builder.addTransition(States.OFFLINE.name(), States.SLAVE.name(), 2); builder.addTransition(States.SLAVE.name(), States.OFFLINE.name(), 3); builder.addTransition(States.OFFLINE.name(), HelixDefinedState.DROPPED.name()); // bounds builder.upperBound(States.MASTER.name(), 1); builder.dynamicUpperBound(States.SLAVE.name(), "R"); return builder.build(); }
private static StateModelDefinition defineStateModel() { StateModelDefinition.Builder builder = new StateModelDefinition.Builder(STATE_MODEL_NAME); // Add states and their rank to indicate priority. Lower the rank higher the // priority builder.addState(MASTER, 1); builder.addState(SLAVE, 2); builder.addState(OFFLINE); builder.addState(DROPPED); // Set the initial state when the node starts builder.initialState(OFFLINE); // Add transitions between the states. builder.addTransition(OFFLINE, SLAVE); builder.addTransition(SLAVE, OFFLINE); builder.addTransition(SLAVE, MASTER); builder.addTransition(MASTER, SLAVE); builder.addTransition(OFFLINE, DROPPED); // set constraints on states. // static constraint builder.upperBound(MASTER, 1); // dynamic constraint, R means it should be derived based on the replication // factor. builder.dynamicUpperBound(SLAVE, "R"); StateModelDefinition statemodelDefinition = builder.build(); return statemodelDefinition; }
/** * Create a modified version of OnlineOffline where the transition to ONLINE is given lowest * priority * @param stateModelName * @return */ private StateModelDefinition createReprioritizedStateModelDef(String stateModelName) { StateModelDefinition.Builder builder = new StateModelDefinition.Builder(stateModelName).addState("ONLINE", 1).addState("OFFLINE") .addState("DROPPED").addState("ERROR").initialState("OFFLINE") .addTransition("ERROR", "OFFLINE", 1).addTransition("ONLINE", "OFFLINE", 2) .addTransition("OFFLINE", "DROPPED", 3).addTransition("OFFLINE", "ONLINE", 4) .dynamicUpperBound("ONLINE", "R").upperBound("OFFLINE", -1).upperBound("DROPPED", -1) .upperBound("ERROR", -1); return builder.build(); }