stateTransitionPriorityList); return new StateModelDefinition(record);
@Override public void addStateModelDef(String clusterName, String stateModelDefName, String stateModelDefFile) throws IOException { ZNRecord record = (ZNRecord) (new ZNRecordSerializer().deserialize(readFile(stateModelDefFile))); if (record == null || record.getId() == null || !record.getId().equals(stateModelDefName)) { throw new IllegalArgumentException( "state model definition must have same id as state model def name"); } addStateModelDef(clusterName, stateModelDefName, new StateModelDefinition(record), false); }
@Override public void addStateModelDef(String clusterName, String stateModelDefName, String stateModelDefFile) throws IOException { ZNRecord record = (ZNRecord) (new ZNRecordSerializer().deserialize(readFile(stateModelDefFile))); if (record == null || record.getId() == null || !record.getId().equals(stateModelDefName)) { throw new IllegalArgumentException( "state model definition must have same id as state model def name"); } addStateModelDef(clusterName, stateModelDefName, new StateModelDefinition(record), false); }
/** * Ensure that state models that we know to be good pass validation */ @Test public void testValidModels() { StateModelDefinition masterSlave = new StateModelDefinition(StateModelConfigGenerator.generateConfigForMasterSlave()); Assert.assertTrue(masterSlave.isValid()); StateModelDefinition leaderStandby = new StateModelDefinition(StateModelConfigGenerator.generateConfigForLeaderStandby()); Assert.assertTrue(leaderStandby.isValid()); StateModelDefinition onlineOffline = new StateModelDefinition(StateModelConfigGenerator.generateConfigForOnlineOffline()); Assert.assertTrue(onlineOffline.isValid()); }
new StateModelDefinition(StateModelConfigGenerator.generateConfigForOnlineOffline()));
private void addStateModels(HelixDataAccessor accessor) { StateModelDefinition masterSlave = new StateModelDefinition(StateModelConfigGenerator.generateConfigForMasterSlave()); accessor.setProperty(accessor.keyBuilder().stateModelDef(masterSlave.getId()), masterSlave); StateModelDefinition onlineOffline = new StateModelDefinition(StateModelConfigGenerator.generateConfigForOnlineOffline()); accessor.setProperty(accessor.keyBuilder().stateModelDef(onlineOffline.getId()), onlineOffline); } }
protected void setupStateModel() { Builder keyBuilder = accessor.keyBuilder(); ZNRecord masterSlave = new StateModelConfigGenerator().generateConfigForMasterSlave(); accessor.setProperty(keyBuilder.stateModelDef(masterSlave.getId()), new StateModelDefinition(masterSlave)); ZNRecord leaderStandby = new StateModelConfigGenerator().generateConfigForLeaderStandby(); accessor.setProperty(keyBuilder.stateModelDef(leaderStandby.getId()), new StateModelDefinition(leaderStandby)); ZNRecord onlineOffline = new StateModelConfigGenerator().generateConfigForOnlineOffline(); accessor.setProperty(keyBuilder.stateModelDef(onlineOffline.getId()), new StateModelDefinition(onlineOffline)); }
new StateModelDefinition(newStateModel)); } else { throw new HelixException("Unsupported command: " + command + ". Should be one of ["
new StateModelDefinition(generator.generateConfigForOnlineOffline()));
new StateModelDefinition(newStateModel)); getResponse().setEntity(getStateModelsRepresentation()); } else {
protected void setupStateModel(String clusterName) { ZKHelixDataAccessor accessor = new ZKHelixDataAccessor(clusterName, new ZkBaseDataAccessor<ZNRecord>(_gZkClient)); Builder keyBuilder = accessor.keyBuilder(); StateModelDefinition masterSlave = new StateModelDefinition(StateModelConfigGenerator.generateConfigForMasterSlave()); accessor.setProperty(keyBuilder.stateModelDef(masterSlave.getId()), masterSlave); StateModelDefinition leaderStandby = new StateModelDefinition(StateModelConfigGenerator.generateConfigForLeaderStandby()); accessor.setProperty(keyBuilder.stateModelDef(leaderStandby.getId()), leaderStandby); StateModelDefinition onlineOffline = new StateModelDefinition(StateModelConfigGenerator.generateConfigForOnlineOffline()); accessor.setProperty(keyBuilder.stateModelDef(onlineOffline.getId()), onlineOffline); }
@Test public void testDisableResource() { String className = TestHelper.getTestClassName(); String methodName = TestHelper.getTestMethodName(); String clusterName = className + "_" + methodName; System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis())); HelixAdmin admin = new ZKHelixAdmin(_gZkClient); admin.addCluster(clusterName, true); Assert.assertTrue(ZKUtil.isClusterSetup(clusterName, _gZkClient), "Cluster should be setup"); String resourceName = "TestDB"; admin.addStateModelDef(clusterName, "MasterSlave", new StateModelDefinition( StateModelConfigGenerator.generateConfigForMasterSlave())); admin.addResource(clusterName, resourceName, 4, "MasterSlave"); admin.enableResource(clusterName, resourceName, false); BaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<ZNRecord>(_gZkClient); HelixDataAccessor accessor = new ZKHelixDataAccessor(clusterName, baseAccessor); PropertyKey.Builder keyBuilder = accessor.keyBuilder(); IdealState idealState = accessor.getProperty(keyBuilder.idealStates(resourceName)); Assert.assertFalse(idealState.isEnabled()); admin.enableResource(clusterName, resourceName, true); idealState = accessor.getProperty(keyBuilder.idealStates(resourceName)); Assert.assertTrue(idealState.isEnabled()); admin.dropCluster(clusterName); System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis())); }
@Test public void testDropResource() { String className = TestHelper.getTestClassName(); String methodName = TestHelper.getTestMethodName(); String clusterName = className + "_" + methodName; System.out.println("START " + clusterName + " at " + new Date(System.currentTimeMillis())); HelixAdmin tool = new ZKHelixAdmin(_gZkClient); tool.addCluster(clusterName, true); Assert.assertTrue(ZKUtil.isClusterSetup(clusterName, _gZkClient), "Cluster should be setup"); tool.addStateModelDef(clusterName, "MasterSlave", new StateModelDefinition( StateModelConfigGenerator.generateConfigForMasterSlave())); tool.addResource(clusterName, "test-db", 4, "MasterSlave"); Map<String, String> resourceConfig = new HashMap<String, String>(); resourceConfig.put("key1", "value1"); tool.setConfig(new HelixConfigScopeBuilder(ConfigScopeProperty.RESOURCE) .forCluster(clusterName).forResource("test-db").build(), resourceConfig); PropertyKey.Builder keyBuilder = new PropertyKey.Builder(clusterName); Assert.assertTrue(_gZkClient.exists(keyBuilder.idealStates("test-db").getPath()), "test-db ideal-state should exist"); Assert.assertTrue(_gZkClient.exists(keyBuilder.resourceConfig("test-db").getPath()), "test-db resource config should exist"); tool.dropResource(clusterName, "test-db"); Assert.assertFalse(_gZkClient.exists(keyBuilder.idealStates("test-db").getPath()), "test-db ideal-state should be dropped"); Assert.assertFalse(_gZkClient.exists(keyBuilder.resourceConfig("test-db").getPath()), "test-db resource config should be dropped"); tool.dropCluster(clusterName); System.out.println("END " + clusterName + " at " + new Date(System.currentTimeMillis())); }
@Override public boolean createStateModelDef(StateModelDefinition stateModelDef) { String path = PropertyPathBuilder.stateModelDef(_clusterName, stateModelDef.getId()); HelixProperty property = getProperty(new PropertyKey.Builder(_clusterName).stateModelDef(stateModelDef.getId())); // Set new StateModelDefinition if it is different from old one. if (property != null) { // StateModelDefinition need to be updated if (!new StateModelDefinition(property.getRecord()).equals(stateModelDef)) { return stateModelDef.isValid() && _baseDataAccessor .set(path, stateModelDef.getRecord(), AccessOption.PERSISTENT); } } else { // StateModeDefinition does not exist return stateModelDef.isValid() && _baseDataAccessor .create(path, stateModelDef.getRecord(), AccessOption.PERSISTENT); } // StateModelDefinition exists but not need to be updated return true; }
@Override public boolean createStateModelDef(StateModelDefinition stateModelDef) { String path = PropertyPathBuilder.stateModelDef(_clusterName, stateModelDef.getId()); HelixProperty property = getProperty(new PropertyKey.Builder(_clusterName).stateModelDef(stateModelDef.getId())); // Set new StateModelDefinition if it is different from old one. if (property != null) { // StateModelDefinition need to be updated if (!new StateModelDefinition(property.getRecord()).equals(stateModelDef)) { return stateModelDef.isValid() && _baseDataAccessor .set(path, stateModelDef.getRecord(), AccessOption.PERSISTENT); } } else { // StateModeDefinition does not exist return stateModelDef.isValid() && _baseDataAccessor .create(path, stateModelDef.getRecord(), AccessOption.PERSISTENT); } // StateModelDefinition exists but not need to be updated return true; }
HelixDataAccessor accessor = manager.getHelixDataAccessor(); StateModelDefinition stateModelDef = new StateModelDefinition(StateModelConfigGenerator.generateConfigForMasterSlave()); Builder keyBuilder = accessor.keyBuilder(); accessor.setProperty(keyBuilder.stateModelDef("MasterSlave"), stateModelDef);
new StateModelDefinition(StateModelConfigGenerator.generateConfigForMasterSlave()); Builder keyBuilder = accessor.keyBuilder(); accessor.setProperty(keyBuilder.stateModelDef("MasterSlave"), stateModelDef);
void startAdmin() throws Exception { HelixAdmin admin = new ZKHelixAdmin(ZK_ADDR); // create cluster System.out.println("Creating cluster: " + clusterName); admin.addCluster(clusterName, true); // add MasterSlave state mode definition admin.addStateModelDef(clusterName, "MasterSlave", new StateModelDefinition( generateConfigForMasterSlave())); // ideal-state znrecord ZNRecord record = new ZNRecord(resourceName); record.setSimpleField("IDEAL_STATE_MODE", "AUTO"); record.setSimpleField("NUM_PARTITIONS", "1"); record.setSimpleField("REPLICAS", "2"); record.setSimpleField("STATE_MODEL_DEF_REF", "MasterSlave"); record.setListField(resourceName, Arrays.asList("node1", "node2")); admin.setResourceIdealState(clusterName, resourceName, new IdealState(record)); ConstraintItemBuilder builder = new ConstraintItemBuilder(); // limit one transition message at a time across the entire cluster builder.addConstraintAttribute("MESSAGE_TYPE", "STATE_TRANSITION") // .addConstraintAttribute("INSTANCE", ".*") // un-comment this line if using instance-level // constraint .addConstraintAttribute("CONSTRAINT_VALUE", "1"); admin.setConstraint(clusterName, ClusterConstraints.ConstraintType.MESSAGE_CONSTRAINT, "constraint1", builder.build()); }
new StateModelDefinition(StateModelConfigGenerator.generateConfigForOnlineOffline()));
HelixDataAccessor accessor = manager.getHelixDataAccessor(); StateModelDefinition stateModelDef = new StateModelDefinition(StateModelConfigGenerator.generateConfigForMasterSlave()); Builder keyBuilder = accessor.keyBuilder(); accessor.setProperty(keyBuilder.stateModelDef("MasterSlave"), stateModelDef);