Esempio n. 1
0
 def start(self):
     self._zk.start()
     datawatch_next_target = DataWatch(client=self._zk,
                                       path=ZK_NEXT_TARGET,
                                       func=self._on_next_target_changed)
     datawatch_current_target = DataWatch(
         client=self._zk,
         path=ZK_CURRENT_TARGET,
         func=self._on_current_target_changed)
Esempio n. 2
0
    def start(self, zkPath):
        self._lastNodeList = self._zk.get_children(zkPath)
        try:
            ChildrenWatch(client=self._zk, path=zkPath, func=self._NodeChange)

            DataWatch(client=self._zk, path=zkPath, func=self._DataChange)
            # 这里的死循环就是为了不让程序退出,你可以把时间设置长一点观察,其实即便没有到60秒的睡眠时间,如果
            # 子节点或者节点数量发生变化也会收到通知。这里的wathch底层就是在节点上设置监听器,然后捕捉事件,如果有
            # 事件触发就调用你传递的方法来处理。
            while True:
                time.sleep(5)
                print("OK")
        except Exception as err:
            print(err.message)
Esempio n. 3
0
 def get_configvalue(self,appkey,configkey,defaultvalue=None,is_watch=False):
     '''hight-level DataWatch, return the configvalue of the key'''
     configPath = os.path.join(Constants.ZOOKEEPER_ROOT_PATH,appkey,configkey)
     if not self.iszktimeout():
         if configPath not in self.WatchDict: 
             # first watch and add it ;will  not fire event
             if is_watch:
                 DataWatch(self.zk.client,configPath,self._datawatch_handle) 
                 self.WatchDict[configPath] = True
           # if not load conf then init it
         if appkey not in self.initAppKeyDict:
             self.loadconfig_byappKey_fromzk(appkey)
             self.initAppKeyDict[appkey] = True
     configvalue = self.localCacheDict[configPath]
     return configvalue if configvalue else defaultvalue
Esempio n. 4
0
    def exec(self):
        zkc = KazooClient(hosts=self._url, timeout=3)
        zkc.start()
        print('\npid=%d, zookeeper version: %s' %
              (os.getpid(), zkc.server_version()))

        try:
            self._list_ori = zkc.get_children(self._zk_node)

            print('\nattach data and child watch')
            # watch func trigger for each change
            DataWatch(client=zkc, path=self._zk_node, func=self._data_change)
            ChildrenWatch(client=zkc,
                          path=self._zk_node,
                          func=self._child_change)
            print('\nzk watch is running ...')
            time.sleep(6)
        finally:
            if zkc is not None:
                zkc.stop()
Esempio n. 5
0
 def start(self):
     self._zk.start()
     datawatch_next_target = DataWatch(
         client=self._zk,
         path=ZK_ASSEMBLER_LAST_BUILT_TARGET,
         func=self._on_assembler_last_built_target_changed)
Esempio n. 6
0
 def watcher(self):
     try:
         DataWatch(client=self.zk, path=self.path, func=self.data_change)
     except Exception as e:
         print("Create data wather failed: [{}]".format(e))

def OnDataChange(data, stat):
    print("ZkNode Version: %s, data: %s" %
          (stat.version, data.decode("utf-8")))


if __name__ == '__main__':
    client = None
    try:
        logging.basicConfig()

        client = KazooClient(hosts='127.0.0.1:2181')
        client.start()

        DataWatch(client, "/tfs/tfs_clusters/ht_gpu/11.7.157.11", OnDataChange)

        sys.stdin.readline()
        client.stop()
        sys.exit(0)

    except KeyboardInterrupt:
        print('Terminated by user.')
        if client:
            client.stop()
        sys.exit(0)

    except Exception as ex:
        print('Exception: %s' % ex)
        if client:
            client.stop()