celix_status_t etcdWatcher_create(node_discovery_pt node_discovery, bundle_context_pt context, etcd_watcher_pt *watcher) { celix_status_t status = CELIX_SUCCESS; char* etcd_server = NULL; char* etcd_port_string = NULL; int etcd_port = 0; if (node_discovery == NULL) { return CELIX_BUNDLE_EXCEPTION; } (*watcher) = calloc(1, sizeof(struct etcd_watcher)); if (*watcher) { (*watcher)->node_discovery = node_discovery; if ((bundleContext_getProperty(context, CFG_ETCD_SERVER_IP, &etcd_server) != CELIX_SUCCESS) || !etcd_server) { etcd_server = DEFAULT_ETCD_SERVER_IP; } if ((bundleContext_getProperty(context, CFG_ETCD_SERVER_PORT, &etcd_port_string) != CELIX_SUCCESS) || !etcd_port_string) { etcd_port = DEFAULT_ETCD_SERVER_PORT; } else { char* endptr = etcd_port_string; errno = 0; etcd_port = strtol(etcd_port_string, &endptr, 10); if (*endptr || errno != 0) { etcd_port = DEFAULT_ETCD_SERVER_PORT; } } if (etcd_init(etcd_server, etcd_port) == false) { status = CELIX_BUNDLE_EXCEPTION; } else { etcdWatcher_addOwnNode(*watcher); if ((status = celixThreadMutex_create(&(*watcher)->watcherLock, NULL)) != CELIX_SUCCESS) { return status; } if ((status = celixThreadMutex_lock(&(*watcher)->watcherLock)) != CELIX_SUCCESS) { return status; } if ((status = celixThread_create(&(*watcher)->watcherThread, NULL, etcdWatcher_run, *watcher)) != CELIX_SUCCESS) { return status; } (*watcher)->running = true; if ((status = celixThreadMutex_unlock(&(*watcher)->watcherLock)) != CELIX_SUCCESS) { return status; } } } else { status = CELIX_ENOMEM; } return status; }
/* * the ectdWatcher needs to have access to the endpoint_discovery_poller and therefore is only * allowed to be created after the endpoint_discovery_poller */ celix_status_t etcdWatcher_create(discovery_pt discovery, bundle_context_pt context, etcd_watcher_pt *watcher) { celix_status_t status = CELIX_SUCCESS; char* etcd_server = NULL; char* etcd_port_string = NULL; int etcd_port = 0; if (discovery == NULL) { return CELIX_BUNDLE_EXCEPTION; } (*watcher) = calloc(1, sizeof(struct etcd_watcher)); if (!*watcher) { return CELIX_ENOMEM; } else { (*watcher)->discovery = discovery; (*watcher)->loghelper = &discovery->loghelper; (*watcher)->entries = hashMap_create(utils_stringHash, NULL, utils_stringEquals, NULL); } if ((bundleContext_getProperty(context, CFG_ETCD_SERVER_IP, &etcd_server) != CELIX_SUCCESS) || !etcd_server) { etcd_server = DEFAULT_ETCD_SERVER_IP; } if ((bundleContext_getProperty(context, CFG_ETCD_SERVER_PORT, &etcd_port_string) != CELIX_SUCCESS) || !etcd_port_string) { etcd_port = DEFAULT_ETCD_SERVER_PORT; } else { char* endptr = etcd_port_string; errno = 0; etcd_port = strtol(etcd_port_string, &endptr, 10); if (*endptr || errno != 0) { etcd_port = DEFAULT_ETCD_SERVER_PORT; } } status = etcd_init(etcd_server, etcd_port); printf(" ININT\n"); if (status == CELIX_SUCCESS) { etcdWatcher_addOwnFramework(*watcher); status = celixThreadMutex_create(&(*watcher)->watcherLock, NULL); printf(" 111\n"); } if (status == CELIX_SUCCESS) { if (celixThreadMutex_lock(&(*watcher)->watcherLock) == CELIX_SUCCESS) { status = celixThread_create(&(*watcher)->watcherThread, NULL, etcdWatcher_run, *watcher); if (status == CELIX_SUCCESS) { printf(" STARTEDTSTARTED\n"); (*watcher)->running = true; } celixThreadMutex_unlock(&(*watcher)->watcherLock); } } printf(" DONEDONE\n"); return status; }