return toggle ? PinotResourceManagerResponse.FAILURE : PinotResourceManagerResponse.SUCCESS; PropertyKey instanceCurrentStatesKey = _keyBuilder.currentStates(instanceName, liveInstance.getSessionId()); List<CurrentState> instanceCurrentStates = _helixDataAccessor.getChildValues(instanceCurrentStatesKey); if (instanceCurrentStates == null) {
private void refreshCurrentStatesCache(HelixDataAccessor accessor, Map<String, LiveInstance> liveInstanceMap) { long start = System.currentTimeMillis(); PropertyKey.Builder keyBuilder = accessor.keyBuilder(); Set<PropertyKey> currentStateKeys = new HashSet<>(); for (String instanceName : liveInstanceMap.keySet()) { LiveInstance liveInstance = liveInstanceMap.get(instanceName); String sessionId = liveInstance.getSessionId(); List<String> currentStateNames = accessor.getChildNames(keyBuilder.currentStates(instanceName, sessionId)); for (String currentStateName : currentStateNames) { currentStateKeys.add(keyBuilder.currentState(instanceName, sessionId, currentStateName)); } } // All new entries from zk not cached locally yet should be read from ZK. Set<PropertyKey> reloadKeys = new HashSet<>(currentStateKeys); reloadKeys.removeAll(_currentStateCache.keySet()); Set<PropertyKey> cachedKeys = new HashSet<>(_currentStateCache.keySet()); cachedKeys.retainAll(currentStateKeys); _currentStateCache = Collections.unmodifiableMap( refreshProperties(accessor, new ArrayList<>(reloadKeys), new ArrayList<>(cachedKeys), _currentStateCache)); if (LOG.isDebugEnabled()) { LogUtil.logDebug(LOG, getEventId(), "# of CurrentStates reload: " + reloadKeys.size() + ", skipped:" + ( currentStateKeys.size() - reloadKeys.size()) + ". took " + (System.currentTimeMillis() - start) + " ms to reload new current states for cluster: " + _clusterName); } }
String sessionId = liveInstance.getSessionId(); List<String> currentStateNames = accessor.getChildNames(keyBuilder.currentStates(instanceName, sessionId)); for (String currentStateName : currentStateNames) { currentStateKeys.add(keyBuilder.currentState(instanceName, sessionId, currentStateName));
accessor.getChildNames(keyBuilder.currentStates(instanceName, sessionId)); List<PropertyKey> createCurStateKeys = new ArrayList<>(); List<CurrentState> metaCurStates = new ArrayList<>();
accessor.getChildNames(keyBuilder.currentStates(instanceName, sessionId)); List<PropertyKey> createCurStateKeys = new ArrayList<>(); List<CurrentState> metaCurStates = new ArrayList<>();
.assertEquals(childListeners.size(), 2, "Should have 2 paths (CURRENTSTATE/{sessionId}, and MESSAGES) each of which has 1 child-listener"); path = keyBuilder.currentStates(participantToExpire.getInstanceName(), oldSessionId).getPath(); Assert.assertEquals(childListeners.get(path).size(), 1, "Should have 1 child-listener on path: " + path); "Should have 2 paths (CURRENTSTATE/{oldSessionId}, and MESSAGES). " + "CONTROLLER and MESSAGE has 1 child-listener each. CURRENTSTATE/{oldSessionId} doesn't have listener (ZkClient doesn't remove empty childListener set. probably a ZkClient bug. see ZkClient#unsubscribeChildChange())"); path = keyBuilder.currentStates(participantToExpire.getInstanceName(), oldSessionId).getPath(); Assert.assertEquals(childListeners.get(path).size(), 0, "Should have no child-listener on path: " + path);
manager.removeListener(keyBuilder.currentStates(instanceName, session), this);
_dataAccessor.getChildValues(_keyBuilder.currentStates(_instanceName, session)); String path = _keyBuilder.currentStates(_instanceName, session).getPath(); LOG.info("Removing current states from previous sessions. path: " + path); _zkclient.deleteRecursively(path);
manager.removeListener(keyBuilder.currentStates(instanceName, session), this);
_dataAccessor.getChildValues(_keyBuilder.currentStates(_instanceName, session)); String path = _keyBuilder.currentStates(_instanceName, session).getPath(); LOG.info("Removing current states from previous sessions. path: " + path); _zkclient.deleteRecursively(path);
if (!curSessions.containsKey(session)) { String instanceName = lastSessions.get(session).getInstanceName(); manager.removeListener(keyBuilder.currentStates(instanceName, session), this); logger.info("remove current-state listener for instance: {}, session: {}", instanceName, session);
if (!curSessions.containsKey(session)) { String instanceName = lastSessions.get(session).getInstanceName(); manager.removeListener(keyBuilder.currentStates(instanceName, session), this); logger.info("remove current-state listener for instance: {}, session: {}", instanceName, session);
void checkDuplicatedMessages(List<Message> messages) { HelixDataAccessor accessor = manager.getHelixDataAccessor(); PropertyKey.Builder keyBuilder = accessor.keyBuilder(); PropertyKey path = keyBuilder.currentStates(manager.getInstanceName(), manager.getSessionId()); Map<String, CurrentState> currentStateMap = accessor.getChildValuesMap(path);
accessor.getChildNames(accessor.keyBuilder().currentStates(instanceName, session)); for (String currentStateName : currentStateNames) { PropertyKey key =
accessor.getChildNames(accessor.keyBuilder().currentStates(instanceName, session)); for (String currentStateName : currentStateNames) { PropertyKey key =
@GET @Path("{instanceName}/resources") public Response getResourcesOnInstance(@PathParam("clusterId") String clusterId, @PathParam("instanceName") String instanceName) throws IOException { HelixDataAccessor accessor = getDataAccssor(clusterId); ObjectNode root = JsonNodeFactory.instance.objectNode(); root.put(Properties.id.name(), instanceName); ArrayNode resourcesNode = root.putArray(InstanceProperties.resources.name()); List<String> sessionIds = accessor.getChildNames(accessor.keyBuilder().sessions(instanceName)); if (sessionIds == null || sessionIds.size() == 0) { return null; } // Only get resource list from current session id String currentSessionId = sessionIds.get(0); List<String> resources = accessor.getChildNames(accessor.keyBuilder().currentStates(instanceName, currentSessionId)); if (resources != null && resources.size() > 0) { resourcesNode.addAll((ArrayNode) OBJECT_MAPPER.valueToTree(resources)); } return JSONRepresentation(root); }
@Override public void addCurrentStateChangeListener(CurrentStateChangeListener listener, String instanceName, String sessionId) throws Exception { addListener(listener, new Builder(_clusterName).currentStates(instanceName, sessionId), ChangeType.CURRENT_STATE, new EventType[] { EventType.NodeChildrenChanged }); }
@Override public void addCurrentStateChangeListener(CurrentStateChangeListener listener, String instanceName, String sessionId) throws Exception { addListener(listener, new Builder(_clusterName).currentStates(instanceName, sessionId), ChangeType.CURRENT_STATE, new EventType[] { EventType.NodeChildrenChanged }); }
@Deprecated @Override public void addCurrentStateChangeListener(org.apache.helix.CurrentStateChangeListener listener, String instanceName, String sessionId) throws Exception { addListener(listener, new Builder(_clusterName).currentStates(instanceName, sessionId), ChangeType.CURRENT_STATE, new EventType[] { EventType.NodeChildrenChanged }); }
@Deprecated @Override public void addCurrentStateChangeListener(org.apache.helix.CurrentStateChangeListener listener, String instanceName, String sessionId) throws Exception { addListener(listener, new Builder(_clusterName).currentStates(instanceName, sessionId), ChangeType.CURRENT_STATE, new EventType[] { EventType.NodeChildrenChanged }); }