@Override public List<String> getResourcesInCluster(String clusterName) { return _zkClient.getChildren(PropertyPathBuilder.idealState(clusterName)); }
@Override public List<String> getResourcesInCluster(String clusterName) { return _zkClient.getChildren(PropertyPathBuilder.idealState(clusterName)); }
/** * Selectively removes fields appearing in the given IdealState (input) from the IdealState in ZK. * @param clusterName * @param resourceName * @param idealState */ @Override public void removeFromIdealState(String clusterName, String resourceName, IdealState idealState) { String zkPath = PropertyPathBuilder.idealState(clusterName, resourceName); ZKUtil.subtract(_zkClient, zkPath, idealState.getRecord()); }
List<String> resourcesInIdealState = zkClient.getChildren(PropertyPathBuilder.idealState(clusterId)); List<String> resourcesInExternalView = zkClient.getChildren(PropertyPathBuilder.externalView(clusterId));
requiredPaths.add(PropertyPathBuilder.idealState(clusterName)); requiredPaths.add(PropertyPathBuilder.clusterConfig(clusterName)); requiredPaths.add(PropertyPathBuilder.instanceConfig(clusterName));
requiredPaths.add(PropertyPathBuilder.idealState(clusterName)); requiredPaths.add(PropertyPathBuilder.clusterConfig(clusterName)); requiredPaths.add(PropertyPathBuilder.instanceConfig(clusterName));
public void verifyResource(HelixZkClient zkClient, String clusterName, String resource, boolean wantExists) { String resourcePath = PropertyPathBuilder.idealState(clusterName, resource); AssertJUnit.assertEquals(wantExists, zkClient.exists(resourcePath)); }
@Override public void enableResource(final String clusterName, final String resourceName, final boolean enabled) { logger.info("{} resource {} in cluster {}.", enabled ? "Enable" : "Disable", resourceName, clusterName); String path = PropertyPathBuilder.idealState(clusterName, resourceName); BaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<ZNRecord>(_zkClient); if (!baseAccessor.exists(path, 0)) { throw new HelixException("Cluster " + clusterName + ", resource: " + resourceName + ", ideal-state does not exist"); } baseAccessor.update(path, new DataUpdater<ZNRecord>() { @Override public ZNRecord update(ZNRecord currentData) { if (currentData == null) { throw new HelixException( "Cluster: " + clusterName + ", resource: " + resourceName + ", ideal-state is null"); } IdealState idealState = new IdealState(currentData); idealState.enable(enabled); return idealState.getRecord(); } }, AccessOption.PERSISTENT); }
@Override public void enableResource(final String clusterName, final String resourceName, final boolean enabled) { logger.info("{} resource {} in cluster {}.", enabled ? "Enable" : "Disable", resourceName, clusterName); String path = PropertyPathBuilder.idealState(clusterName, resourceName); BaseDataAccessor<ZNRecord> baseAccessor = new ZkBaseDataAccessor<ZNRecord>(_zkClient); if (!baseAccessor.exists(path, 0)) { throw new HelixException("Cluster " + clusterName + ", resource: " + resourceName + ", ideal-state does not exist"); } baseAccessor.update(path, new DataUpdater<ZNRecord>() { @Override public ZNRecord update(ZNRecord currentData) { if (currentData == null) { throw new HelixException( "Cluster: " + clusterName + ", resource: " + resourceName + ", ideal-state is null"); } IdealState idealState = new IdealState(currentData); idealState.enable(enabled); return idealState.getRecord(); } }, AccessOption.PERSISTENT); }
/** * Partially updates the fields appearing in the given IdealState (input). * @param clusterName * @param resourceName * @param idealState */ @Override public void updateIdealState(String clusterName, String resourceName, IdealState idealState) { if (!ZKUtil.isClusterSetup(clusterName, _zkClient)) { throw new HelixException( "updateIdealState failed. Cluster: " + clusterName + " is NOT setup properly."); } String zkPath = PropertyPathBuilder.idealState(clusterName, resourceName); if (!_zkClient.exists(zkPath)) { throw new HelixException(String.format( "updateIdealState failed. The IdealState for the given resource does not already exist. Resource name: %s", resourceName)); } // Update by way of merge ZKUtil.createOrUpdate(_zkClient, zkPath, idealState.getRecord(), true, true); }
@Override public void addResource(String clusterName, String resourceName, IdealState idealstate) { logger.info("Add resource {} in cluster {}.", resourceName, clusterName); String stateModelRef = idealstate.getStateModelDefRef(); String stateModelDefPath = PropertyPathBuilder.stateModelDef(clusterName, stateModelRef); if (!_zkClient.exists(stateModelDefPath)) { throw new HelixException( "State model " + stateModelRef + " not found in the cluster STATEMODELDEFS path"); } String idealStatePath = PropertyPathBuilder.idealState(clusterName); String resourceIdealStatePath = idealStatePath + "/" + resourceName; if (_zkClient.exists(resourceIdealStatePath)) { throw new HelixException("Skip the operation. Resource ideal state directory already exists:" + resourceIdealStatePath); } ZKUtil.createChildren(_zkClient, idealStatePath, idealstate.getRecord()); }
@Override public void addResource(String clusterName, String resourceName, IdealState idealstate) { logger.info("Add resource {} in cluster {}.", resourceName, clusterName); String stateModelRef = idealstate.getStateModelDefRef(); String stateModelDefPath = PropertyPathBuilder.stateModelDef(clusterName, stateModelRef); if (!_zkClient.exists(stateModelDefPath)) { throw new HelixException( "State model " + stateModelRef + " not found in the cluster STATEMODELDEFS path"); } String idealStatePath = PropertyPathBuilder.idealState(clusterName); String resourceIdealStatePath = idealStatePath + "/" + resourceName; if (_zkClient.exists(resourceIdealStatePath)) { throw new HelixException("Skip the operation. Resource ideal state directory already exists:" + resourceIdealStatePath); } ZKUtil.createChildren(_zkClient, idealStatePath, idealstate.getRecord()); }
@GET public Response getResources(@PathParam("clusterId") String clusterId) { ObjectNode root = JsonNodeFactory.instance.objectNode(); root.put(Properties.id.name(), JsonNodeFactory.instance.textNode(clusterId)); HelixZkClient zkClient = getHelixZkClient(); ArrayNode idealStatesNode = root.putArray(ResourceProperties.idealStates.name()); ArrayNode externalViewsNode = root.putArray(ResourceProperties.externalViews.name()); List<String> idealStates = zkClient.getChildren(PropertyPathBuilder.idealState(clusterId)); List<String> externalViews = zkClient.getChildren(PropertyPathBuilder.externalView(clusterId)); if (idealStates != null) { idealStatesNode.addAll((ArrayNode) OBJECT_MAPPER.valueToTree(idealStates)); } else { return notFound(); } if (externalViews != null) { externalViewsNode.addAll((ArrayNode) OBJECT_MAPPER.valueToTree(externalViews)); } return JSONRepresentation(root); }
@Test public void testGetPath() { String actual; actual = PropertyPathBuilder.idealState("test_cluster"); AssertJUnit.assertEquals(actual, "/test_cluster/IDEALSTATES"); actual = PropertyPathBuilder.idealState("test_cluster", "resource"); AssertJUnit.assertEquals(actual, "/test_cluster/IDEALSTATES/resource"); actual = PropertyPathBuilder.instance("test_cluster", "instanceName1"); AssertJUnit.assertEquals(actual, "/test_cluster/INSTANCES/instanceName1"); actual = PropertyPathBuilder.instanceCurrentState("test_cluster", "instanceName1"); AssertJUnit.assertEquals(actual, "/test_cluster/INSTANCES/instanceName1/CURRENTSTATES"); actual = PropertyPathBuilder.instanceCurrentState("test_cluster", "instanceName1", "sessionId"); AssertJUnit.assertEquals(actual, "/test_cluster/INSTANCES/instanceName1/CURRENTSTATES/sessionId"); actual = PropertyPathBuilder.controller("test_cluster"); AssertJUnit.assertEquals(actual, "/test_cluster/CONTROLLER"); actual = PropertyPathBuilder.controllerMessage("test_cluster"); AssertJUnit.assertEquals(actual, "/test_cluster/CONTROLLER/MESSAGES"); } }
"MasterSlave", true); // do rebalance String idealStatePath = PropertyPathBuilder.idealState(clusterName, "TestDB0"); ZNRecord idealState = _gZkClient.readData(idealStatePath); idealState.getSimpleFields().remove(IdealState.IdealStateProperty.REPLICAS.toString());
String idealPath = PropertyPathBuilder.idealState(clusterName, "TestDB0"); ZNRecord curIdealState = _gZkClient.readData(idealPath);
public static void main(String[] args) throws Exception { setup(); zkServer.getZkClient().setZkSerializer(new ZNRecordSerializer()); ZNRecord record = zkServer.getZkClient().readData(PropertyPathBuilder.idealState(clusterName, "TestDB")); String externalViewPath = PropertyPathBuilder.externalView(clusterName, "TestDB"); MockSpectatorProcess process = new MockSpectatorProcess(); process.start(); // try to route, there is no master or slave available process.routeRequest("TestDB", "TestDB_1"); // update the externalview on zookeeper zkServer.getZkClient().createPersistent(externalViewPath, record); // sleep for sometime so that the ZK Callback is received. Thread.sleep(1000); process.routeRequest("TestDB", "TestDB_1"); System.exit(1); }
_zkClient.createPersistent(PropertyPathBuilder.idealState(clusterName));
_zkClient.createPersistent(PropertyPathBuilder.idealState(clusterName));
.create(PropertyPathBuilder.idealState(clusterName), new ZNRecord(clusterName), 0);