リポジトリ:git@github.com:ccx19930930/services_register_and_discovery.git
参考リンク:https://www.cnblogs.com/haippy/archive/2013/02/21/2920280.html
down_service_mgr.h
1 #ifndef _DOWN_SERVICE_MANAGER_H_
2 #define _DOWN_SERVICE_MANAGER_H_
3
4 #include "base_class.h"
5
6 class CDownServiceManager : CUnCopyable
7 {
8 public:
9 CDownServiceManager(int module_id) : m_module_id(module_id) {}
10 ~CDownServiceManager() {}
11 private:
12 CDownServiceManager() {}
13
14 public:
15 int Register(const string& zk_path, CNodeInfo* node_info);
16 int UnRegister(const string& zk_path);
17
18 private:
19 int m_module_id;
20 map<string, CNodeInfo *> m_node_map;
21 pthread_mutex_t m_mutex;
22 };
23
24 #endif
down_service_mgr.cpp
1 #include "down_service_mgr.h"
2 #include "auto_lock.h"
3
4 int CDownServiceManager::Register(const string& zk_path, CNodeInfo* node_info)
5 {
6 CAutoMutexLock auto_lock(m_mutex);
7 if (m_node_map.count(zk_path))
8 {
9 return -1;
10 }
11 m_node_map[zk_path] = node_info;
12 //TODO 長接続の処理など
13
14 return 0;
15 }
16
17 int CDownServiceManager::UnRegister(const string& zk_path)
18 {
19 CAutoMutexLock auto_lock(m_mutex);
20 if (m_node_map.count(zk_path) == 0)
21 {
22 return -1;
23 }
24 //TODO 長接続の処理など
25
26 m_node_map.erase(zk_path);
27 return 0;
28 }
discovery.h
1 #ifndef _SERVICE_DISCOVERY_H_
2 #define _SERVICE_DISCOVERY_H_
3
4 #include "base_class.h"
5 #include "zk_handle.h"
6 #include "down_service_mgr.h"
7
8 #include <zookeeper.jute.h>
9
10 class CDownNode
11 {
12 public:
13 CDownNode() { Reset(); }
14 ~CDownNode() {}
15
16 void Reset()
17 {
18 m_is_full_node = false;
19 m_node_info.Reset();
20 m_node_map.clear();
21 m_invalid_node_path_set.clear();
22 }
23
24 public:
25 bool m_is_full_node;
26 CNodeInfo m_node_info;
27
28 map<string, CNodeInfo> m_node_map;
29 set<string> m_invalid_node_path_set;
30
31 };
32
33 class CServiceDiscovery : public CUnCopyable
34 {
35 private:
36 static pthread_mutex_t m_mutex;
37 static CServiceDiscovery* m_instance;
38 CServiceDiscovery();
39 public:
40 static CServiceDiscovery* GetInstance();
41 int Init(const set<string> & service_path_list, const set<int> & service_id_list);
42
43
44 public:
45 int StartMonitoring();
46 int Stop();
47 static void OnZkHandleResetFunc();
48
49 private:
50 static void* DiscoveryMonitorThread(void * param);
51 int DiscoveryMonitor();
52 int ServicePathCheck();
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_monitor_thread_id;
68 bool m_is_running;
69 map<string, CDownNode*> m_service_path_list; // <zk_path, down_node_info>
70 map<string, string> m_path_to_directory; // <zk_node, zk_node>
71 map<int, CDownServiceManager* > m_service_manager_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 CServiceDiscovery* CServiceDiscovery::m_instance = nullptr;
10 pthread_mutex_t CServiceDiscovery::m_mutex;
11
12 CServiceDiscovery::CServiceDiscovery()
13 : m_is_running(false)
14 , m_monitor_thread_id(0)
15 {
16 }
17
18 CServiceDiscovery* CServiceDiscovery::GetInstance()
19 {
20 if (m_instance == nullptr)
21 {
22 CAutoMutexLock auto_lock(m_mutex);
23 if (m_instance == nullptr)
24 {
25 m_instance = new CServiceDiscovery;
26 }
27 }
28 return m_instance;
29 }
30
31 int CServiceDiscovery::Init(const set<string>& service_path_list, const set<int>& service_id_list)
32 {
33 CAutoMutexLock auto_lock(m_mutex);
34 for (const auto & zk_path : service_path_list)
35 {
36 m_service_path_list[zk_path] = new CDownNode;
37 }
38
39 for (const auto& module_id : service_id_list)
40 {
41 m_service_manager_list[module_id] = new CDownServiceManager(module_id);
42 }
43
44 return 0;
45 }
46
47 int CServiceDiscovery::StartMonitoring()
48 {
49 if (0 == m_monitor_thread_id)
50 {
51 m_is_running = true;
52 if (0 != pthread_create(&m_monitor_thread_id, nullptr, CServiceDiscovery::DiscoveryMonitorThread, nullptr))
53 {
54 printf("サービス監視スレッドの作成に失敗しました。");
55 return -1;
56 }
57 printf("サービス監視スレッドの作成に成功しました。");
58 }
59 return 0;
60 }
61
62 int CServiceDiscovery::Stop()
63 {
64 m_is_running = false;
65 }
66
67 void CServiceDiscovery::OnZkHandleResetFunc()
68 {
69 CServiceDiscovery::GetInstance()->OnZkHandleReset();
70 }
71
72 void* CServiceDiscovery::DiscoveryMonitorThread(void* param)
73 {
74 prctl(PR_SET_NAME, "zk_discovery_monitor");
75
76 CZkHandle::GetInstance()->AddResetHandleFn("discovery", CServiceDiscovery::OnZkHandleResetFunc);
77
78 while (true == CServiceDiscovery::GetInstance()->IsRunning())
79 {
80 CServiceDiscovery::GetInstance()->DiscoveryMonitor();
81 usleep(kZkDiscoveryIntervalTime);
82 }
83 return nullptr;
84 }
85
86 int CServiceDiscovery::DiscoveryMonitor()
87 {
88 ServicePathCheck();
89 InvalidNodeCheck();
90
91 #ifdef _DEBUG_
92 DebugPrintAllNode();
93 #endif
94 }
95
96 int CServiceDiscovery::ServicePathCheck()
97 {
98 printf("%s =======================================================\n", __func__);
99 CAutoMutexLock auto_lock(m_mutex);
100 for (const auto& service_path : m_service_path_list)
101 {
102 CDownNode* down_node = service_path.second;
103 if (down_node->m_is_full_node)
104 {
105 continue;
106 }
107 set<string> node_list;
108 if (ZOK == CZkHandle::GetInstance()->ZkWgetChildren(service_path.first, CServiceDiscovery::ZkPathWatcher, node_list))
109 {
110 for (auto node_path : node_list)
111 {
112 down_node->m_invalid_node_path_set.insert(service_path.first + '/' + node_path);
113 }
114 for (const auto& node : down_node->m_node_map)
115 {
116 down_node->m_invalid_node_path_set.insert(node.first);
117 }
118
119 down_node->m_is_full_node = true;
120 }
121 }
122 return 0;
123 }
124
125 int CServiceDiscovery::InvalidNodeCheck()
126 {
127 printf("%s =======================================================\n", __func__);
128 CAutoMutexLock auto_lock(m_mutex);
129 for (const auto& service_path : m_service_path_list)
130 {
131 CDownNode* down_node = service_path.second;
132 for (auto it_node_path = down_node->m_invalid_node_path_set.begin(); it_node_path != down_node->m_invalid_node_path_set.end();)
133 {
134 struct Stat stat;
135 string zk_node_info;
136 int ret_code = CZkHandle::GetInstance()->ZkWGetNodeInfo(*it_node_path, CServiceDiscovery::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_map[*it_node_path] = node_info;
142 it_node_path = down_node->m_invalid_node_path_set.erase(it_node_path);
143 m_service_manager_list[atoi(node_info.m_module_id.c_str())]->Register(*it_node_path, &node_info);
144 m_path_to_directory[*it_node_path] = service_path.first;
145 }
146 else if(ZNONODE == ret_code)
147 {
148 if (down_node->m_node_map.count(*it_node_path))
149 {
150 CNodeInfo& node_info = down_node->m_node_map[*it_node_path];
151 m_service_manager_list[atoi(node_info.m_module_id.c_str())]->UnRegister(*it_node_path);
152 down_node->m_node_map.erase(*it_node_path);
153 }
154 if (m_path_to_directory.count(*it_node_path))
155 {
156 m_path_to_directory.erase(*it_node_path);
157 }
158 it_node_path = down_node->m_invalid_node_path_set.erase(it_node_path);
159 }
160 else
161 {
162 ++it_node_path;
163 }
164 }
165 }
166 return 0;
167 }
168
169 int CServiceDiscovery::DebugPrintAllNode()
170 {
171 printf("%s =======================================================\n", __func__);
172 CAutoMutexLock auto_lock(m_mutex);
173 for (const auto& service_path : m_service_path_list)
174 {
175 printf("%s service_path=%s is_full_node=%d --------------------------------------------\n", __func__, service_path.first.c_str(), service_path.second->m_is_full_node);
176 printf("%s node_map: \n", __func__);
177 for (auto& down_node : service_path.second->m_node_map)
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_set: \n", __func__);
184 for (const auto& invalid_node : service_path.second->m_invalid_node_path_set)
185 {
186 printf("%s invalid_node:%s \n", __func__, invalid_node.c_str());
187 }
188 }
189 return 0;
190 }
191
192 bool CServiceDiscovery::IsRunning()
193 {
194 return m_is_running;
195 }
196
197 void CServiceDiscovery::ZkPathWatcher(zhandle_t* zh, int type, int state, const char* path, void* watcherCtx)
198 {
199 if (ZOO_CHILD_EVENT == type)
200 {
201 CServiceDiscovery::GetInstance()->OnPathChange(path);
202 }
203 }
204
205 void CServiceDiscovery::ZkNodeWatcher(zhandle_t* zh, int type, int state, const char* path, void* watcherCtx)
206 {
207 if (ZOO_CHANGED_EVENT == type)
208 {
209 CServiceDiscovery::GetInstance()->OnNodeChange(path);
210 }
211 else if (ZOO_DELETED_EVENT == type)
212 {
213 CServiceDiscovery::GetInstance()->OnNodeChange(path);
214 }
215 }
216
217 int CServiceDiscovery::OnPathChange(string path)
218 {
219 printf("%s path=%s =======================================================\n", __func__, path.c_str());
220 CAutoMutexLock auto_lock(m_mutex);
221 if (m_service_path_list.count(path))
222 {
223 m_service_path_list[path]->m_is_full_node = false;
224 }
225 return 0;
226 }
227
228 int CServiceDiscovery::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_path_to_directory.count(node))
234 {
235 path = m_path_to_directory[node];
236 }
237 if (m_service_path_list.count(path))
238 {
239 m_service_path_list[path]->m_invalid_node_path_set.insert(node);
240 }
241 return 0;
242 }
243
244 void CServiceDiscovery::OnZkHandleReset()
245 {
246 printf("%s =======================================================\n", __func__);
247 CAutoMutexLock auto_lock(m_mutex);
248 for (const auto& service_path : m_service_path_list)
249 {
250 service_path.second->m_is_full_node = false;
251 }
252 }
View Codediscovery_test main.cpp
1 #include "../zk_util/zk_handle.h"
2 #include "../zk_util/discovery.h"
3
4 #include <unistd.h>
5
6 //疑似分散環境のホストリストは、通常は設定ファイル形式で記述するが、ここではテストプログラムのため固定値を使用
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> service_path_list;
14 service_path_list.insert("/zk_test1");
15 service_path_list.insert("/zk_test2");
16
17 set<int> service_id_list;
18 service_id_list.insert(1);
19 service_id_list.insert(2);
20
21 CServiceDiscovery::GetInstance()->Init(service_path_list, service_id_list);
22 CServiceDiscovery::GetInstance()->StartMonitoring();
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 登録確認スレッドの作成に成功しました。
CServiceDiscovery::StartMonitoring サービス監視スレッドの作成に成功しました。CZkHandle::ResetZkHandle: ZooKeeperへの接続に成功しました。
ServicePathCheck =======================================================
CZkHandle::ZkWgetChildren path=/zk_test1の子ノードを取得
CZkHandle::ZkInitWatchar: [type=-1] [state=3] [path=] [watcher_ctx=(nil)]
CZkHandle::ZkWgetChildren 子ノードの取得に成功しました。children_num=0
CZkHandle::ZkWgetChildren path=/zk_test2の子ノードを取得
CZkHandle::ZkWgetChildren 子ノードの取得に成功しました。children_num=0
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode service_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
DebugPrintAllNode invalid_node_set:
DebugPrintAllNode service_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
DebugPrintAllNode invalid_node_set:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
ServicePathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode service_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
DebugPrintAllNode invalid_node_set:
DebugPrintAllNode service_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
DebugPrintAllNode invalid_node_set:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
ServicePathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
register_test_1.confを使用して複数のテストプログラムを起動後
ServicePathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode service_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
DebugPrintAllNode invalid_node_set:
DebugPrintAllNode service_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
DebugPrintAllNode invalid_node_set:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
OnPathChange path=/zk_test1 =======================================================
ServicePathCheck =======================================================
CZkHandle::ZkWgetChildren path=/zk_test1の子ノードを取得
CZkHandle::ZkWgetChildren 子ノードの取得に成功しました。children_num=1
CZkHandle::ZkWgetChildren children_idx=0, children_name=register_test_1
InvalidNodeCheck =======================================================
CZkHandle::ZkWGetNodeInfo path=/zk_test1/register_test_1のノード情報を取得
CZkHandle::ZkWGetNodeInfo path=/zk_test1/register_test_1のノード情報取得成功。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 service_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
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_set:
DebugPrintAllNode service_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
DebugPrintAllNode invalid_node_set:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
ServicePathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode service_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
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_set:
DebugPrintAllNode service_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
DebugPrintAllNode invalid_node_set:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
register_test_2.confを使用して複数のテストプログラムを起動後
ServicePathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode service_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
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_set:
DebugPrintAllNode service_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
DebugPrintAllNode invalid_node_set:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
OnPathChange path=/zk_test2 =======================================================
ServicePathCheck =======================================================
CZkHandle::ZkWgetChildren path=/zk_test2の子ノードを取得
CZkHandle::ZkWgetChildren 子ノードの取得に成功しました。children_num=1
CZkHandle::ZkWgetChildren children_idx=0, children_name=register_test_20000000010
InvalidNodeCheck =======================================================
CZkHandle::ZkWGetNodeInfo path=/zk_test2/register_test_20000000010のノード情報を取得
CZkHandle::ZkWGetNodeInfo path=/zk_test2/register_test_20000000010のノード情報取得成功。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 service_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
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_set:
DebugPrintAllNode service_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
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_set:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
ServicePathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode service_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
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_set:
DebugPrintAllNode service_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
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_set:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
OnPathChange path=/zk_test2 =======================================================
ServicePathCheck =======================================================
CZkHandle::ZkWgetChildren path=/zk_test2の子ノードを取得
CZkHandle::ZkWgetChildren 子ノードの取得に成功しました。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 path=/zk_test2/register_test_20000000010のノード情報を取得
CZkHandle::ZkWGetNodeInfo path=/zk_test2/register_test_20000000010のノード情報取得成功。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 path=/zk_test2/register_test_20000000011のノード情報を取得
CZkHandle::ZkWGetNodeInfo path=/zk_test2/register_test_20000000011のノード情報取得成功。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 service_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
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_set:
DebugPrintAllNode service_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
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_set:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
順にregister_testを停止
ServicePathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode service_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
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_set:
DebugPrintAllNode service_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
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_set:
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 =======================================================
ServicePathCheck =======================================================
CZkHandle::ZkWgetChildren path=/zk_test1の子ノードを取得
CZkHandle::ZkWgetChildren 子ノードの取得に成功しました。children_num=0
InvalidNodeCheck =======================================================
CZkHandle::ZkWGetNodeInfo path=/zk_test1/register_test_1のノード情報を取得
CZkHandle::ZkWGetNodeInfo path=/zk_test1/register_test_1のノード情報取得に失敗。ret=-101
DebugPrintAllNode =======================================================
DebugPrintAllNode service_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
DebugPrintAllNode invalid_node_set:
DebugPrintAllNode service_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
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_set:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
ServicePathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode service_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
DebugPrintAllNode invalid_node_set:
DebugPrintAllNode service_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
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_set:
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 =======================================================
ServicePathCheck =======================================================
CZkHandle::ZkWgetChildren path=/zk_test2の子ノードを取得
CZkHandle::ZkWgetChildren 子ノードの取得に成功しました。children_num=0
InvalidNodeCheck =======================================================
CZkHandle::ZkWGetNodeInfo path=/zk_test2/register_test_20000000014のノード情報を取得
CZkHandle::ZkWGetNodeInfo path=/zk_test2/register_test_20000000014のノード情報取得に失敗。ret=-101
CZkHandle::ZkWGetNodeInfo path=/zk_test2/register_test_20000000015のノード情報を取得
CZkHandle::ZkWGetNodeInfo path=/zk_test2/register_test_20000000015のノード情報取得に失敗。ret=-101
DebugPrintAllNode =======================================================
DebugPrintAllNode service_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
DebugPrintAllNode invalid_node_set:
DebugPrintAllNode service_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
DebugPrintAllNode invalid_node_set:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
ServicePathCheck =======================================================
InvalidNodeCheck =======================================================
DebugPrintAllNode =======================================================
DebugPrintAllNode service_path=/zk_test1 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
DebugPrintAllNode invalid_node_set:
DebugPrintAllNode service_path=/zk_test2 is_full_node=1 --------------------------------------------
DebugPrintAllNode node_map:
DebugPrintAllNode invalid_node_set:
CZkHandle::ZkExists: [ret=0]
CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]