zookeeper 实现一个简单的服务注册与发现(C++) 三:服务发现

git:git@github.com:ccx19930930/services_register_and_discovery.git

参考链接:<https://www.cnblogs.com/haippy/archive/2013/02/21/2920280.html&gt;

down_service_mgr.h

 1 #ifndef _DOWN_SERVICE_MGR_H_
 2 #define _DOWN_SERVICE_MGR_H_
 3 
 4 #include &quot;base_class.h&quot;
 5 
 6 class CDownServiceMgr : CUnCopyable
 7 {
 8 public:
 9     CDownServiceMgr(int module_id) : m_module_id(module_id) {}
10     ~CDownServiceMgr() {}
11 private:
12     CDownServiceMgr() {}
13 
14 public:
15     int Register(const string&amp; zk_path, CNodeInfo* node_info);
16     int UnRegister(const string&amp; zk_path);
17 
18 private:
19     int m_module_id;
20     map&lt;string, CNodeInfo *&gt; m_node_list;
21      pthread_mutex_t m_mutex;
22 };
23 
24 #endif

down_service_mgr.cpp

 1 #include &quot;down_service_mgr.h&quot;
 2 #include &quot;auto_lock.h&quot;
 3 
 4 int CDownServiceMgr::Register(const string&amp; zk_path, CNodeInfo* node_info)
 5 {
 6     CAutoMutexLock auto_lock(m_mutex);
 7     if (m_node_list.count(zk_path))
 8     {
 9         return -1;
10     }
11     m_node_list[zk_path] = node_info;
12     //TODO 长连接等
13 
14     return 0;
15 }
16 
17 int CDownServiceMgr::UnRegister(const string&amp; zk_path)
18 {
19     CAutoMutexLock auto_lock(m_mutex);
20     if (m_node_list.count(zk_path) == 0)
21     {
22         return -1;
23     }
24     //TODO 长连接等
25 
26     m_node_list.erase(zk_path);
27     return 0;
28 }

discovery.h

 1 #ifndef _DISCOVERY_H_
 2 #define _DISCOVERY_H_
 3 
 4 #include &quot;base_class.h&quot;
 5 #include &quot;zk_handle.h&quot;
 6 #include &quot;down_service_mgr.h&quot;
 7 
 8 #include &lt;zookeeper.jute.h&gt;
 9 
10 class CDownNode
11 {
12 public:
13     CDownNode() { Reset(); }
14     ~CDownNode() {}
15 
16     void Reset()
17     {
18         m_full_node = false;
19         m_node_info.Reset();
20         m_node_list.clear();
21         m_invalid_node_path_list.clear();
22     }
23 
24 public:
25     bool m_full_node;
26     CNodeInfo m_node_info;
27 
28     map&lt;string, CNodeInfo&gt; m_node_list;
29     set&lt;string&gt; m_invalid_node_path_list;
30 
31 };
32 
33 class CDiscovery : public CUnCopyable
34 {
35 private:
36     static pthread_mutex_t m_mutex;
37     static CDiscovery* m_pins;
38     CDiscovery();
39 public:
40     static CDiscovery* GetInstance();
41     int Init(const set&lt;string&gt; &amp; down_path_list, const set&lt;int&gt; &amp; down_service_list);
42 
43 
44 public:
45     int StartCheck();
46     int Stop();
47     static void OnZkHandleResetFunc();
48 
49 private:
50     static void* DiscoveryCheckThread(void * param);
51     int DiscoveryCheck();
52     int DownPathCheck();
53     int InvalidNodeCheck();
54     int DebugPrintAllNode();
55     bool IsRunning();
56 
57 private:
58     static void ZkPathWatcher(zhandle_t* zh, int type, int state, const char* path, void* watcherCtx);
59     static void ZkNodeWatcher(zhandle_t* zh, int type, int state, const char* path, void* watcherCtx);
60 
61 private:
62     int OnPathChange(string path);
63     int OnNodeChange(string node);
64     void OnZkHandleReset();
65     
66 private:
67     pthread_t m_down_check_thread_id;
68     bool m_is_running;
69     map&lt;string, CDownNode*&gt; m_down_path_list; // &lt;zk_path, down_node_info&gt;
70     map&lt;string, string&gt; m_down_path_2_dir;    // &lt;zk_node, zk_node&gt;
71     map&lt;int, CDownServiceMgr* &gt; m_down_service_list;
72 };
73 
74 #endif

discovery.cpp

![]()![]()```
1 #include "discovery.h"
2 #include "auto_lock.h"
3
4 #include <stdlib.h>
5 #include <sys/prctl.h>
6 #include <unistd.h>
7 #include <pthread.h>
8
9 CDiscovery CDiscovery::m_pins = nullptr;
10 pthread_mutex_t CDiscovery::m_mutex;
11
12 CDiscovery::CDiscovery()
13 : m_is_running(false)
14 , m_down_check_thread_id(0)
15 {
16 }
17
18 CDiscovery
CDiscovery::GetInstance()
19 {
20 if (m_pins == nullptr)
21 {
22 CAutoMutexLock auto_lock(m_mutex);
23 if (m_pins == nullptr)
24 {
25 m_pins = new CDiscovery;
26 }
27 }
28 return m_pins;
29 }
30
31 int CDiscovery::Init(const set<string>& down_path_list, const set<int>& down_service_list)
32 {
33 CAutoMutexLock auto_lock(m_mutex);
34 for (const auto & zk_path : down_path_list)
35 {
36 m_down_path_list[zk_path] = new CDownNode;
37 }
38
39 for (const auto& module_id : down_service_list)
40 {
41 m_down_service_list[module_id] = new CDownServiceMgr(module_id);
42 }
43
44 return 0;
45 }
46
47 int CDiscovery::StartCheck()
48 {
49 if (0 == m_down_check_thread_id)
50 {
51 m_is_running = true;
52 if (0 != pthread_create(&m_down_check_thread_id, nullptr, CDiscovery::DiscoveryCheckThread, nullptr))
53 {
54 printf("CDiscovery::StartCheck create discovery check thread fail.");
55 return -1;
56 }
57 printf("CDiscovery::StartCheck create discovery check thread succ.");
58 }
59 return 0;
60 }
61
62 int CDiscovery::Stop()
63 {
64 m_is_running = false;
65 }
66
67 void CDiscovery::OnZkHandleResetFunc()
68 {
69 CDiscovery::GetInstance()->OnZkHandleReset();
70 }
71
72 void CDiscovery::DiscoveryCheckThread(void param)
73 {
74 prctl(PR_SET_NAME, "zk_discovery_check");
75
76 CZkHandle::GetInstance()->AddResetHandleFn("discovery", CDiscovery::OnZkHandleResetFunc);
77
78 while (true == CDiscovery::GetInstance()->IsRunning())
79 {
80 CDiscovery::GetInstance()->DiscoveryCheck();
81 usleep(kZkDiscoveryIntervalTime);
82 }
83 return nullptr;
84 }
85
86 int CDiscovery::DiscoveryCheck()
87 {
88 DownPathCheck();
89 InvalidNodeCheck();
90
91 #ifdef DEBUG
92 DebugPrintAllNode();
93 #endif
94 }
95
96 int CDiscovery::DownPathCheck()
97 {
98 printf("%s =======================================================\n", func);
99 CAutoMutexLock auto_lock(m_mutex);
100 for (const auto& down_path : m_down_path_list)
101 {
102 CDownNode down_node = down_path.second;
103 if (down_node->m_full_node)
104 {
105 continue;
106 }
107 set<string> node_list;
108 if (ZOK == CZkHandle::GetInstance()->ZkWgetChildren(down_path.first, CDiscovery::ZkPathWatcher, node_list))
109 {
110 for (auto node_path : node_list)
111 {
112 down_node->m_invalid_node_path_list.insert(down_path.first + '/' + node_path);
113 }
114 for (const auto& node : down_node->m_node_list)
115 {
116 down_node->m_invalid_node_path_list.insert(node.first);
117 }
118
119 down_node->m_full_node = true;
120 }
121 }
122 return 0;
123 }
124
125 int CDiscovery::InvalidNodeCheck()
126 {
127 printf("%s =======================================================\n", func);
128 CAutoMutexLock auto_lock(m_mutex);
129 for (const auto& down_path : m_down_path_list)
130 {
131 CDownNode
down_node = down_path.second;
132 for (auto it_node_path = down_node->m_invalid_node_path_list.begin(); it_node_path != down_node->m_invalid_node_path_list.end();)
133 {
134 struct Stat stat;
135 string zk_node_info;
136 int ret_code = CZkHandle::GetInstance()->ZkWGetNodeInfo(it_node_path, CDiscovery::ZkNodeWatcher, zk_node_info, stat);
137 if (ZOK == ret_code)
138 {
139 CNodeInfo node_info;
140 node_info.FromString(zk_node_info);
141 down_node->m_node_list[
it_node_path] = node_info;
142 it_node_path = down_node->m_invalid_node_path_list.erase(it_node_path);
143 m_down_service_list[atoi(node_info.m_module_id.c_str())]->Register(it_node_path, &node_info);
144 m_down_path_2_dir[
it_node_path] = down_path.first;
145 }
146 else if(ZNONODE == ret_code)
147 {
148 if (down_node->m_node_list.count(it_node_path))
149 {
150 CNodeInfo& node_info = down_node->m_node_list[
it_node_path];
151 m_down_service_list[atoi(node_info.m_module_id.c_str())]->UnRegister(it_node_path);
152 down_node->m_node_list.erase(
it_node_path);
153 }
154 if (m_down_path_2_dir.count(it_node_path))
155 {
156 m_down_path_2_dir.erase(
it_node_path);
157 }
158 it_node_path = down_node->m_invalid_node_path_list.erase(it_node_path);
159 }
160 else
161 {
162 ++it_node_path;
163 }
164 }
165 }
166 return 0;
167 }
168
169 int CDiscovery::DebugPrintAllNode()
170 {
171 printf("%s =======================================================\n", func);
172 CAutoMutexLock auto_lock(m_mutex);
173 for (const auto& down_path : m_down_path_list)
174 {
175 printf("%s down_path=%s is_full_node=%d --------------------------------------------\n", func, down_path.first.c_str(), down_path.second->m_full_node);
176 printf("%s node_list: \n", func);
177 for (auto& down_node : down_path.second->m_node_list)
178 {
179 printf("%s node=%s \n", func, down_node.first.c_str());
180 printf("%s info=%s \n", func, down_node.second.ToString().c_str());
181 }
182
183 printf("%s invalid_node_list: \n", func);
184 for (const auto& invalid_node : down_path.second->m_invalid_node_path_list)
185 {
186 printf("%s invalid_node:%s \n", func, invalid_node.c_str());
187 }
188 }
189 return 0;
190 }
191
192 bool CDiscovery::IsRunning()
193 {
194 return m_is_running;
195 }
196
197 void CDiscovery::ZkPathWatcher(zhandle_t zh, int type, int state, const char path, void watcherCtx)
198 {
199 if (ZOO_CHILD_EVENT == type)
200 {
201 CDiscovery::GetInstance()->OnPathChange(path);
202 }
203 }
204
205 void CDiscovery::ZkNodeWatcher(zhandle_t
zh, int type, int state, const char path, void watcherCtx)
206 {
207 if (ZOO_CHANGED_EVENT == type)
208 {
209 CDiscovery::GetInstance()->OnNodeChange(path);
210 }
211 else if (ZOO_DELETED_EVENT == type)
212 {
213 CDiscovery::GetInstance()->OnNodeChange(path);
214 }
215 }
216
217 int CDiscovery::OnPathChange(string path)
218 {
219 printf("%s path=%s =======================================================\n", func, path.c_str());
220 CAutoMutexLock auto_lock(m_mutex);
221 if (m_down_path_list.count(path))
222 {
223 m_down_path_list[path]->m_full_node = false;
224 }
225 return 0;
226 }
227
228 int CDiscovery::OnNodeChange(string node)
229 {
230 printf("%s node=%s =======================================================\n", func, node.c_str());
231 CAutoMutexLock auto_lock(m_mutex);
232 string path;
233 if (m_down_path_2_dir.count(node))
234 {
235 path = m_down_path_2_dir[node];
236 }
237 if (m_down_path_list.count(path))
238 {
239 m_down_path_list[path]->m_invalid_node_path_list.insert(node);
240 }
241 return 0;
242 }
243
244 void CDiscovery::OnZkHandleReset()
245 {
246 printf("%s =======================================================\n", func);
247 CAutoMutexLock auto_lock(m_mutex);
248 for (const auto& down_path : m_down_path_list)
249 {
250 down_path.second->m_full_node = false;
251 }
252 }


View Code

discovery\_test main.cpp

1 #include "../zk_util/zk_handle.h"
2 #include "../zk_util/discovery.h"
3
4 #include <unistd.h>
5
6 //伪分布式部署 host list最好以配置文件形式,此处为测试程序,暂时写死
7 const char* host_list = "xx.xx.xx.xx:port,xx.xx.xx.xx:port,xx.xx.xx.xx:port";
8 const int time_out = 3000;
9 int main()
10 {
11 CZkHandle::GetInstance()->ZkInit(host_list, time_out);
12
13 set<string> down_path_list;
14 down_path_list.insert("/zk_test1");
15 down_path_list.insert("/zk_test2");
16
17 set<int> down_service_list;
18 down_service_list.insert(1);
19 down_service_list.insert(2);
20
21 CDiscovery::GetInstance()->Init(down_path_list, down_service_list);
22 CDiscovery::GetInstance()->StartCheck();
23
24 sleep(60);
25
26 return 0;
27 }


Makefile

1 INC_DIR:= ./ ../zk_util/ /usr/local/include/zookeeper/ /usr/local/include/json/
2 SRCS:= $(wildcard ./cpp ../zk_util/cpp)
3 OBJS:= $(patsubst %.cpp, %.o, $(SRCS))
4 LIBS:= -lpthread -lzookeeper_mt -ljsoncpp
5
6 CXX:= g++
7
8 CXXFLAGS:= -w -g -std=c++11 $(addprefix -I, $(INC_DIR)) $(LIBS) -Wl,-rpath="/usr/local/lib" -D DEBUG
9
10 EXE:= ../../bin/discovery_test
11
12 $(EXE):$(OBJS)
13 $(CXX) -o $(EXE) $(OBJS) $(CXXFLAGS)
14
15 clean:
16 rm -rf $(EXE)
17 rm -rf $(OBJS)


执行结果:

只执行discovery\_test

ccx@ccx:~/self_test/zookeeper/services_register_and_discovery/bin$ ./discovery_test
CZkHandle::ZkInit create register check thread succ.
CDiscovery::StartCheck create discovery check thread succ.CZkHandle::ResetZkHandle: connect to zk succ.
DownPathCheck =======================================================
CZkHandle::ZkWgetChildren get children for path=/zk_test1
CZkHandle::ZkInitWatchar: [type=-1] [state=3] [path=] [watcher_ctx=(nil)]
CZkHandle::ZkWgetChildren get children succ. children_num=0
CZkHandle::ZkWgetChildren get children for path=/zk_test2
CZkHandle::ZkWgetChildren get children succ. children_num=0
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode down_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode invalid_node_list:
DebugPrintAllNode down_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode invalid_node_list:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
DownPathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode down_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode invalid_node_list:
DebugPrintAllNode down_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode invalid_node_list:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
DownPathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================


使用register\_test\_1.conf 启动多个测试程序后

DownPathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode down_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode invalid_node_list:
DebugPrintAllNode down_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode invalid_node_list:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
OnPathChange path=/zk_test1 =======================================================
DownPathCheck =======================================================
CZkHandle::ZkWgetChildren get children for path=/zk_test1
CZkHandle::ZkWgetChildren get children succ. children_num=1
CZkHandle::ZkWgetChildren children_idx=0, children_name=register_test_1
InvalidNodeCheck =======================================================
CZkHandle::ZkWGetNodeInfo get node info for path=/zk_test1/register_test_1
CZkHandle::ZkWGetNodeInfo get node info for path=/zk_test1/register_test_1 succ. buffer=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1]
CZkHandle::ZkWGetNodeInfo: [path=/zk_test1/register_test_1] [czxid=17179873794] [mzxid=17179873794] [version=0] [cversion=0] [child_num=0]
DebugPrintAllNode =======================================================
DebugPrintAllNode down_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode node=/zk_test1/register_test_1
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1]
DebugPrintAllNode invalid_node_list:
DebugPrintAllNode down_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode invalid_node_list:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
DownPathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode down_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode node=/zk_test1/register_test_1
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1]
DebugPrintAllNode invalid_node_list:
DebugPrintAllNode down_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode invalid_node_list:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]


使用register\_test\_2.conf 启动多个测试程序后

DownPathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode down_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode node=/zk_test1/register_test_1
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1]
DebugPrintAllNode invalid_node_list:
DebugPrintAllNode down_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode invalid_node_list:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
OnPathChange path=/zk_test2 =======================================================
DownPathCheck =======================================================
CZkHandle::ZkWgetChildren get children for path=/zk_test2
CZkHandle::ZkWgetChildren get children succ. children_num=1
CZkHandle::ZkWgetChildren children_idx=0, children_name=register_test_20000000010
InvalidNodeCheck =======================================================
CZkHandle::ZkWGetNodeInfo get node info for path=/zk_test2/register_test_20000000010
CZkHandle::ZkWGetNodeInfo get node info for path=/zk_test2/register_test_20000000010 succ. buffer=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2]
CZkHandle::ZkWGetNodeInfo: [path=/zk_test2/register_test_20000000010] [czxid=17179873868] [mzxid=17179873868] [version=0] [cversion=0] [child_num=0]
DebugPrintAllNode =======================================================
DebugPrintAllNode down_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode node=/zk_test1/register_test_1
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1]
DebugPrintAllNode invalid_node_list:
DebugPrintAllNode down_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode node=/zk_test2/register_test_20000000010
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2]
DebugPrintAllNode invalid_node_list:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
DownPathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode down_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode node=/zk_test1/register_test_1
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1]
DebugPrintAllNode invalid_node_list:
DebugPrintAllNode down_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode node=/zk_test2/register_test_20000000010
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2]
DebugPrintAllNode invalid_node_list:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
OnPathChange path=/zk_test2 =======================================================
DownPathCheck =======================================================
CZkHandle::ZkWgetChildren get children for path=/zk_test2
CZkHandle::ZkWgetChildren get children succ. children_num=2
CZkHandle::ZkWgetChildren children_idx=0, children_name=register_test_20000000010
CZkHandle::ZkWgetChildren children_idx=1, children_name=register_test_20000000011
InvalidNodeCheck =======================================================
CZkHandle::ZkWGetNodeInfo get node info for path=/zk_test2/register_test_20000000010
CZkHandle::ZkWGetNodeInfo get node info for path=/zk_test2/register_test_20000000010 succ. buffer=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2]
CZkHandle::ZkWGetNodeInfo: [path=/zk_test2/register_test_20000000010] [czxid=17179873868] [mzxid=17179873868] [version=0] [cversion=0] [child_num=0]
CZkHandle::ZkWGetNodeInfo get node info for path=/zk_test2/register_test_20000000011
CZkHandle::ZkWGetNodeInfo get node info for path=/zk_test2/register_test_20000000011 succ. buffer=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2]
CZkHandle::ZkWGetNodeInfo: [path=/zk_test2/register_test_20000000011] [czxid=17179873873] [mzxid=17179873873] [version=0] [cversion=0] [child_num=0]
DebugPrintAllNode =======================================================
DebugPrintAllNode down_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode node=/zk_test1/register_test_1
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1]
DebugPrintAllNode invalid_node_list:
DebugPrintAllNode down_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode node=/zk_test2/register_test_20000000010
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2]
DebugPrintAllNode node=/zk_test2/register_test_20000000011
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2]
DebugPrintAllNode invalid_node_list:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]


依次停止register\_test:

DownPathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode down_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode node=/zk_test1/register_test_1
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1]
DebugPrintAllNode invalid_node_list:
DebugPrintAllNode down_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode node=/zk_test2/register_test_20000000014
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2]
DebugPrintAllNode node=/zk_test2/register_test_20000000015
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2]
DebugPrintAllNode invalid_node_list:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
OnNodeChange node=/zk_test1/register_test_1 =======================================================
OnPathChange path=/zk_test1 =======================================================
DownPathCheck =======================================================
CZkHandle::ZkWgetChildren get children for path=/zk_test1
CZkHandle::ZkWgetChildren get children succ. children_num=0
InvalidNodeCheck =======================================================
CZkHandle::ZkWGetNodeInfo get node info for path=/zk_test1/register_test_1
CZkHandle::ZkWGetNodeInfo get node info for path=/zk_test1/register_test_1 fail. ret=-101
DebugPrintAllNode =======================================================
DebugPrintAllNode down_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode invalid_node_list:
DebugPrintAllNode down_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode node=/zk_test2/register_test_20000000014
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2]
DebugPrintAllNode node=/zk_test2/register_test_20000000015
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2]
DebugPrintAllNode invalid_node_list:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
DownPathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode down_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode invalid_node_list:
DebugPrintAllNode down_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode node=/zk_test2/register_test_20000000014
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2]
DebugPrintAllNode node=/zk_test2/register_test_20000000015
DebugPrintAllNode info=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2]
DebugPrintAllNode invalid_node_list:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
OnNodeChange node=/zk_test2/register_test_20000000015 =======================================================
OnPathChange path=/zk_test2 =======================================================
OnNodeChange node=/zk_test2/register_test_20000000014 =======================================================
DownPathCheck =======================================================
CZkHandle::ZkWgetChildren get children for path=/zk_test2
CZkHandle::ZkWgetChildren get children succ. children_num=0
InvalidNodeCheck =======================================================
CZkHandle::ZkWGetNodeInfo get node info for path=/zk_test2/register_test_20000000014
CZkHandle::ZkWGetNodeInfo get node info for path=/zk_test2/register_test_20000000014 fail. ret=-101
CZkHandle::ZkWGetNodeInfo get node info for path=/zk_test2/register_test_20000000015
CZkHandle::ZkWGetNodeInfo get node info for path=/zk_test2/register_test_20000000015 fail. ret=-101
DebugPrintAllNode =======================================================
DebugPrintAllNode down_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode invalid_node_list:
DebugPrintAllNode down_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode invalid_node_list:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
DownPathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode down_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode invalid_node_list:
DebugPrintAllNode down_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_list:
DebugPrintAllNode invalid_node_list:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]

声明:该文章系转载,转载该文章的目的在于更广泛的传递信息,并不代表本网站赞同其观点,文章内容仅供参考。

本站是一个个人学习和交流平台,网站上部分文章为网站管理员和网友从相关媒体转载而来,并不用于任何商业目的,内容为作者个人观点, 并不代表本网站赞同其观点和对其真实性负责。

我们已经尽可能的对作者和来源进行了通告,但是可能由于能力有限或疏忽,导致作者和来源有误,亦可能您并不期望您的作品在我们的网站上发布。我们为这些问题向您致歉,如果您在我站上发现此类问题,请及时联系我们,我们将根据您的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。