in agent/src/c/src/fsof_main.c [230:279]
static void fsof_service_node_watcher(zhandle_t* zh, int type, int state,
const char* path, void* watcherCtx) {
struct String_vector *str_list = NULL;
struct String_vector *provider_list = NULL;
struct timeval start = {0};
struct timeval end = {0};
int exec_time = 0;
char provider_key[512] = {0};
int i;
if (type == ZOO_CHILD_EVENT) {
fsof_log_info(INFO,"service node watcher entered %s\n",path);
gettimeofday(&start,NULL);
str_list = fsof_zk_get_children(path);
gettimeofday(&end,NULL);
exec_time = (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_usec - start.tv_usec); //calculate execute time
if (str_list != NULL) {
sprintf(provider_key,"%s%s",path,PROVIDER_NAME);
fsof_log_info(INFO,"%s|FSOF_AGENT|%d|get zookeeper data succeed!|get_zookeeper|%d",g_str_localip,0,exec_time);
for (i = 0; i < str_list->count; i++) {
if (strcmp(str_list->data[i],PROVIDER_NODE_NAME) == 0) {
fsof_zk_add_listener(provider_key,fsof_provider_node_watcher);
gettimeofday(&start,NULL);
provider_list = fsof_zk_get_children(provider_key);
gettimeofday(&end,NULL);
exec_time = (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_usec - start.tv_usec); //calculate execute time
if (provider_list != NULL) { //deal
//enum_provider_list(provider_list,provider_key);
parse_provider_key(provider_list,provider_key);
deallocate_String_vector(provider_list);
free(provider_list);
fsof_log_info(INFO,"%s|FSOF_AGENT|%d|get zookeeper data succeed!|get_zookeeper|%d",g_str_localip,0,exec_time);
} else {
fsof_log_info(INFO,"%s|FSOF_AGENT|%d|get zookeeper data failed!|get_zookeeper|%d",g_str_localip,-1,exec_time);
}
break;
}
}
deallocate_String_vector(str_list);
free(str_list);
} else {
fsof_log_info(INFO,"%s|FSOF_AGENT|%d|get zookeeper data failed!|get_zookeeper|%d",g_str_localip,-1,exec_time);
}
}
}