zkClient.waitUntilConnected(CommonConstants.Helix.ZkClient.DEFAULT_CONNECT_TIMEOUT_SEC, TimeUnit.SECONDS); ZkBaseDataAccessor<ZNRecord> baseDataAccessor = new ZkBaseDataAccessor<>(zkClient); ZKHelixDataAccessor zkHelixDataAccessor = new ZKHelixDataAccessor(_clusterName, baseDataAccessor); PropertyKey property = zkHelixDataAccessor.keyBuilder().liveInstances(); List<String> liveInstances = zkHelixDataAccessor.getChildNames(property); PropertyKey controllerLeaderKey = zkHelixDataAccessor.keyBuilder().controllerLeader(); LiveInstance controllerLeaderLiveInstance = zkHelixDataAccessor.getProperty(controllerLeaderKey); ControllerInfo controllerInfo = new ControllerInfo(); controllerInfo.leaderName = controllerLeaderLiveInstance.getId();
@Deprecated @Override public <T extends HelixProperty> List<T> getChildValues(PropertyKey key) { return getChildValues(key, false); }
@Deprecated @Override public <T extends HelixProperty> Map<String, T> getChildValuesMap(PropertyKey key) { return getChildValuesMap(key, false); }
@Override public void removeInstanceTag(String clusterName, String instanceName, String tag) { logger.info("Remove instance tag {} for instance {} in cluster {}.", tag, instanceName, clusterName); if (!ZKUtil.isClusterSetup(clusterName, _zkClient)) { throw new HelixException("cluster " + clusterName + " is not setup yet"); } if (!ZKUtil.isInstanceSetup(_zkClient, clusterName, instanceName, InstanceType.PARTICIPANT)) { throw new HelixException( "cluster " + clusterName + " instance " + instanceName + " is not setup yet"); } ZKHelixDataAccessor accessor = new ZKHelixDataAccessor(clusterName, new ZkBaseDataAccessor<ZNRecord>(_zkClient)); Builder keyBuilder = accessor.keyBuilder(); InstanceConfig config = accessor.getProperty(keyBuilder.instanceConfig(instanceName)); config.removeTag(tag); accessor.setProperty(keyBuilder.instanceConfig(instanceName), config); }
public static String getInstanceSessionId(ZkClient zkClient, String clusterName, String instanceName) { ZKHelixDataAccessor accessor = new ZKHelixDataAccessor(clusterName, new ZkBaseDataAccessor<ZNRecord>(zkClient)); Builder keyBuilder = accessor.keyBuilder(); ZNRecord liveInstance = accessor.getProperty(keyBuilder.liveInstance(instanceName)).getRecord(); return liveInstance.getSimpleField(LiveInstanceProperty.SESSION_ID.toString()); }
public void createExternalView(List<String> instanceNames, int partitions, int replicas, String dbName, long randomSeed) { ZKHelixDataAccessor accessor = new ZKHelixDataAccessor(clusterName, new ZkBaseDataAccessor(client)); Builder keyBuilder = accessor.keyBuilder(); ExternalView externalView = new ExternalView(computeRoutingTable(instanceNames, partitions, replicas, dbName, randomSeed)); accessor.setProperty(keyBuilder.externalView(dbName), externalView); }
zkClient.setZkSerializer(new ZNRecordSerializer()); HelixDataAccessor accessor = new ZKHelixDataAccessor(helixClusterName, new ZkBaseDataAccessor<ZNRecord>(zkClient)); PropertyKey.Builder keyBuilder = accessor.keyBuilder(); accessor.setProperty(keyBuilder.stateModelDef(segmentStateModelName), newStateModelDef);
private void clearStatusUpdate(String clusterName, String instance, String resource, String partition) { // clear status update for error partition so verify() will not fail on old // errors ZKHelixDataAccessor accessor = new ZKHelixDataAccessor(clusterName, new ZkBaseDataAccessor<ZNRecord>(_gZkClient)); Builder keyBuilder = accessor.keyBuilder(); LiveInstance liveInstance = accessor.getProperty(keyBuilder.liveInstance(instance)); accessor.removeProperty(keyBuilder.stateTransitionStatus(instance, liveInstance.getSessionId(), resource, partition)); } // TODO: throw exception in reset()
public static String getPropertyAsString(ZkClient zkClient, String clusterName, PropertyKey propertyKey, MediaType mediaType) throws JsonGenerationException, JsonMappingException, IOException { ZKHelixDataAccessor accessor = new ZKHelixDataAccessor(clusterName, new ZkBaseDataAccessor<ZNRecord>(zkClient)); ZNRecord record = EMPTY_ZNRECORD; HelixProperty property = accessor.getProperty(propertyKey); if (property != null) { record = property.getRecord(); } return ObjectToJson(record); }
List<String> sessions = _dataAccessor.getChildNames(_keyBuilder.sessions(_instanceName)); _dataAccessor.getChildValues(_keyBuilder.currentStates(_instanceName, session)); _dataAccessor.getProperty(_keyBuilder.stateModelDef(stateModelDefRef)); BaseDataAccessor<ZNRecord> baseAccessor = _dataAccessor.getBaseDataAccessor(); String curStatePath = _keyBuilder.currentState(_instanceName, _sessionId, lastCurState.getResourceName()) _dataAccessor.getBaseDataAccessor().update(curStatePath, new CurStateCarryOverUpdater(_sessionId, initState, lastCurState), AccessOption.PERSISTENT);
private void cleanupRebalanceError() { ZKHelixDataAccessor accessor = new ZKHelixDataAccessor(CLUSTER_NAME, _baseAccessor); PropertyKey errorNodeKey = accessor.keyBuilder().controllerTaskError(RebalanceResourceFailure.name()); accessor.removeProperty(errorNodeKey); }
public void testParticipantStatusUpdates() throws Exception { ZKHelixDataAccessor accessor = new ZKHelixDataAccessor(CLUSTER_NAME, new ZkBaseDataAccessor(_gZkClient)); Builder keyBuilder = accessor.keyBuilder(); List<ExternalView> extViews = accessor.getChildValues(keyBuilder.externalViews()); Assert.assertNotNull(extViews);
new ZKHelixDataAccessor(clusterName, new ZkBaseDataAccessor<ZNRecord>(_gZkClient)); Builder keyBuilder = new Builder(clusterName); LiveInstance liveInstance = new LiveInstance("localhost_12918"); liveInstance.setSessionId("session_0"); liveInstance.setHelixVersion("version_0"); accessor.setProperty(keyBuilder.liveInstance("localhost_12918"), liveInstance); accessor.removeProperty(keyBuilder.liveInstance("localhost_12918")); }); Assert.assertNull(accessor.getProperty(keyBuilder.instanceConfig("localhost_12918")), "Instance config should be dropped"); Assert.assertFalse(
@Deprecated @Override public <T extends HelixProperty> List<T> getProperty(List<PropertyKey> keys) { return getProperty(keys, false); }
public static String getInstancePropertiesAsString(ZkClient zkClient, String clusterName, PropertyKey propertyKey, MediaType mediaType) throws JsonGenerationException, JsonMappingException, IOException { zkClient.setZkSerializer(new ZNRecordSerializer()); ZKHelixDataAccessor accessor = new ZKHelixDataAccessor(clusterName, new ZkBaseDataAccessor<ZNRecord>(zkClient)); List<ZNRecord> records = HelixProperty.convertToList(accessor.getChildValues(propertyKey)); return ObjectToJson(records); }
@Override @BeforeClass public void beforeClass() throws Exception { System.out.println("START " + CLASS_NAME + " at " + new Date(System.currentTimeMillis())); // setup storage cluster _gSetupTool.addCluster(CLUSTER_NAME, true); for (int i = 0; i < NODE_NR; i++) { String storageNodeName = PARTICIPANT_PREFIX + "_" + (START_PORT + i); _gSetupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName); } // start controller String controllerName = CONTROLLER_PREFIX + "_0"; _controller = new ClusterControllerManager(ZK_ADDR, CLUSTER_NAME, controllerName); _controller.syncStart(); // start dummy participants for (int i = 0; i < NODE_NR; i++) { String instanceName = PARTICIPANT_PREFIX + "_" + (START_PORT + i); _instanceNames.add(instanceName); _participants[i] = new MockParticipantManager(ZK_ADDR, CLUSTER_NAME, instanceName); _participants[i].syncStart(); } enablePersistBestPossibleAssignment(_gZkClient, CLUSTER_NAME, true); accessor = new ZKHelixDataAccessor(CLUSTER_NAME, _baseAccessor); errorNodeKey = accessor.keyBuilder().controllerTaskError(RebalanceResourceFailure.name()); _clusterVerifier = new BestPossibleExternalViewVerifier.Builder(CLUSTER_NAME).setZkAddr(ZK_ADDR).build(); }
private void setupCluster(String clusterName, ZKHelixDataAccessor accessor) throws Exception { TestHelper.setupCluster(clusterName, ZK_ADDR, 12918, // participant start port "localhost", // participant name prefix resourceNamePrefix, // resource name prefix 1, // resources 15, // partitions per resource participantCount, // number of nodes 3, // replicas "MasterSlave", IdealState.RebalanceMode.FULL_AUTO, true); // do rebalance PropertyKey.Builder keyBuilder = accessor.keyBuilder(); ClusterConfig clusterConfig = accessor.getProperty(accessor.keyBuilder().clusterConfig()); clusterConfig.setResourcePriorityField("Name"); List<StateTransitionThrottleConfig> throttleConfigs = new ArrayList<>(); throttleConfigs.add( new StateTransitionThrottleConfig(StateTransitionThrottleConfig.RebalanceType.LOAD_BALANCE, StateTransitionThrottleConfig.ThrottleScope.CLUSTER, 100)); throttleConfigs.add(new StateTransitionThrottleConfig( StateTransitionThrottleConfig.RebalanceType.RECOVERY_BALANCE, StateTransitionThrottleConfig.ThrottleScope.CLUSTER, 100)); clusterConfig.setStateTransitionThrottleConfigs(throttleConfigs); accessor.setProperty(keyBuilder.clusterConfig(), clusterConfig); }
@Override public <T extends HelixProperty> Map<String, T> getChildValuesMap(PropertyKey key, boolean throwException) { PropertyType type = key.getType(); String parentPath = key.getPath(); int options = constructOptions(type); List<T> children = getChildValues(key, throwException); Map<String, T> childValuesMap = new HashMap<String, T>(); for (T t : children) { childValuesMap.put(t.getRecord().getId(), t); } return childValuesMap; }
private void persistHistory(ParticipantHistory history) { PropertyKey propertyKey = _keyBuilder.participantHistory(_instanceName); if (!_dataAccessor.setProperty(propertyKey, history)) { LOG.error("Failed to persist participant history to zk!"); } }
@Override public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception { if (currentChilds != null && currentChilds.size() > 1) { List<ZNRecord> records = accessor.getBaseDataAccessor().getChildren(parentPath, null, 0); int transitionMsgCount = 0; for (ZNRecord record : records) { Message msg = new Message(record); if (msg.getMsgType().equals(Message.MessageType.STATE_TRANSITION.name())) { transitionMsgCount++; } } if (transitionMsgCount > 1) { success.set(false); Assert.fail("Should not see more than 1 message"); } } } });