public void start(ControllerMetrics controllerMetrics) { _controllerMetrics = controllerMetrics; LOGGER.info("Starting realtime segments manager, adding a listener on the property store table configs path."); String zkUrl = _pinotHelixResourceManager.getHelixZkURL(); _zkClient = new ZkClient(zkUrl, ZkClient.DEFAULT_SESSION_TIMEOUT, ZkClient.DEFAULT_CONNECTION_TIMEOUT); _zkClient.setZkSerializer(new ZNRecordSerializer()); _zkClient.waitUntilConnected(CommonConstants.Helix.ZkClient.DEFAULT_CONNECT_TIMEOUT_SEC, TimeUnit.SECONDS); // Subscribe to any data/child changes to property _zkClient.subscribeChildChanges(_tableConfigPath, this); _zkClient.subscribeDataChanges(_tableConfigPath, this); // Subscribe to leadership changes ControllerLeadershipManager.getInstance().subscribe(PinotLLCRealtimeSegmentManager.class.getName(), this); // Setup change listeners for already existing tables, if any. processPropertyStoreChange(_tableConfigPath); }
_zkClient.subscribeChildChanges(realtimeSegmentsPathForTable, this);
/** * Subscrie to zookeeper data changes */ @Override public List<String> subscribeChildChanges(String path, IZkChildListener listener) { return _zkClient.subscribeChildChanges(path, listener); }
private void subscribeChildChange(String path, NotificationContext.Type callbackType) { if (callbackType == NotificationContext.Type.INIT || callbackType == NotificationContext.Type.CALLBACK) { if (logger.isDebugEnabled()) { logger.debug( _manager.getInstanceName() + " subscribes child-change. path: " + path + ", listener: " + _listener); } _zkClient.subscribeChildChanges(path, this); } else if (callbackType == NotificationContext.Type.FINALIZE) { logger.info( _manager.getInstanceName() + " unsubscribe child-change. path: " + path + ", listener: " + _listener); _zkClient.unsubscribeChildChanges(path, this); } }
public boolean verifyByCallback(long timeout, List<ClusterVerifyTrigger> triggers) { _countdown = new CountDownLatch(1); for (ClusterVerifyTrigger trigger : triggers) { String path = trigger._triggerKey.getPath(); _zkclient.subscribeChildChanges(path, this); if (trigger._triggerOnChildDataChange) { List<String> childs = _zkclient.getChildren(path); for (String child : childs) { String childPath = String.format("%s/%s", path, child); _zkclient.subscribeDataChanges(childPath, this); } } } boolean success = false; try { success = verify(); if (!success) { success = _countdown.await(timeout, TimeUnit.MILLISECONDS); if (!success) { // make a final try if timeout success = verify(); } } } catch (Exception e) { LOG.error("Exception in verifier", e); } // clean up _zkclient.unsubscribeAll(); return success; }
zkClient.subscribeChildChanges(extViewPath, listener); for (String child : zkClient.getChildren(extViewPath)) { String childPath = extViewPath.equals("/") ? extViewPath + child : extViewPath + "/" + child;
private void subscribeTrigger(ClusterVerifyTrigger trigger) { String path = trigger.getTriggerKey().getPath(); if (trigger.isTriggerOnDataChange()) { _zkClient.subscribeDataChanges(path, this); } if (trigger.isTriggerOnChildChange()) { _zkClient.subscribeChildChanges(path, this); } if (trigger.isTriggerOnChildDataChange()) { List<String> childs = _zkClient.getChildren(path); for (String child : childs) { String childPath = String.format("%s/%s", path, child); _zkClient.subscribeDataChanges(childPath, this); } } }
client.subscribeChildChanges(path, listener);
client.subscribeChildChanges(path, listener);