Author: bpetri
Date: Fri Oct 17 07:16:29 2014
New Revision: 1632480
URL: http://svn.apache.org/r1632480
Log:
CELIX-168: Added new property DISCOVERY_ETCD_ROOT_PATH, which allows
to
change the etcd root path
Modified:
celix/trunk/remote_services/discovery_etcd/private/src/discovery_impl.c
celix/trunk/remote_services/discovery_etcd/private/src/etcd_watcher.c
Modified:
celix/trunk/remote_services/discovery_etcd/private/src/discovery_impl.c
URL:
http://svn.apache.org/viewvc/celix/trunk/remote_services/discovery_etcd/private/src/discovery_impl.c?rev=1632480&r1=1632479&r2=1632480&view=diff
==============================================================================
---
celix/trunk/remote_services/discovery_etcd/private/src/discovery_impl.c
(original)
+++
celix/trunk/remote_services/discovery_etcd/private/src/discovery_impl.c
Fri
Oct 17 07:16:29 2014
@@ -124,12 +124,12 @@ celix_status_t discovery_start(discovery
return CELIX_BUNDLE_EXCEPTION;
}
- status = etcdWatcher_create(discovery->poller,
discovery->context,
&discovery->watcher);
+ status = endpointDiscoveryServer_create(discovery,
discovery->context, &discovery->server);
if (status != CELIX_SUCCESS) {
- return CELIX_BUNDLE_EXCEPTION;
+ return CELIX_BUNDLE_EXCEPTION;
}
- status = endpointDiscoveryServer_create(discovery,
discovery->context, &discovery->server);
+ status = etcdWatcher_create(discovery, discovery->context,
&discovery->watcher);
if (status != CELIX_SUCCESS) {
return CELIX_BUNDLE_EXCEPTION;
}
@@ -140,12 +140,12 @@ celix_status_t discovery_start(discovery
celix_status_t discovery_stop(discovery_pt discovery) {
celix_status_t status;
- status = endpointDiscoveryServer_destroy(discovery->server);
+ status = etcdWatcher_destroy(discovery->watcher);
if (status != CELIX_SUCCESS) {
return CELIX_BUNDLE_EXCEPTION;
}
- status = etcdWatcher_destroy(discovery->watcher);
+ status = endpointDiscoveryServer_destroy(discovery->server);
if (status != CELIX_SUCCESS) {
return CELIX_BUNDLE_EXCEPTION;
}
Modified:
celix/trunk/remote_services/discovery_etcd/private/src/etcd_watcher.c
URL:
http://svn.apache.org/viewvc/celix/trunk/remote_services/discovery_etcd/private/src/etcd_watcher.c?rev=1632480&r1=1632479&r2=1632480&view=diff
==============================================================================
---
celix/trunk/remote_services/discovery_etcd/private/src/etcd_watcher.c
(original)
+++
celix/trunk/remote_services/discovery_etcd/private/src/etcd_watcher.c
Fri Oct 17 07:16:29 2014
@@ -38,8 +38,7 @@
#include "endpoint_discovery_poller.h"
struct etcd_watcher {
- endpoint_discovery_poller_pt poller;
- bundle_context_pt context;
+ discovery_pt discovery;
celix_thread_mutex_t watcherLock;
celix_thread_t watcherThread;
@@ -47,6 +46,9 @@ struct etcd_watcher {
volatile bool running;
};
+#define CFG_ETCD_ROOT_PATH "DISCOVERY_ETCD_ROOT_PATH"
+#define DEFAULT_ETCD_ROOTPATH "discovery"
+
#define CFG_ETCD_SERVER_IP "DISCOVERY_ETCD_SERVER_IP"
#define DEFAULT_ETCD_SERVER_IP "127.0.0.1"
@@ -59,10 +61,16 @@ struct etcd_watcher {
// note that the rootNode shouldn't have a leading slash
-static celix_status_t etcdWatcher_getRootPath(char* rootNode) {
+static celix_status_t etcdWatcher_getRootPath(bundle_context_pt
context,
char* rootNode) {
celix_status_t status = CELIX_SUCCESS;
+ char* rootPath = NULL;
- strcpy(rootNode, "discovery");
+ if (((bundleContext_getProperty(context, CFG_ETCD_ROOT_PATH,
&rootPath)) != CELIX_SUCCESS) || (!rootPath)) {
+ strcpy(rootNode, DEFAULT_ETCD_ROOTPATH);
+ }
+ else {
+ strcpy(rootNode, rootPath);
+ }
return status;
}
@@ -73,7 +81,7 @@ static celix_status_t etcdWatcher_getLoc
char rootPath[MAX_ROOTNODE_LENGTH];
char* uuid = NULL;
- if (((etcdWatcher_getRootPath(&rootPath[0]) != CELIX_SUCCESS)) ||
(!rootPath)) {
+ if ((etcdWatcher_getRootPath(context, &rootPath[0]) !=
CELIX_SUCCESS)) {
status = CELIX_ILLEGAL_STATE;
}
else if (((bundleContext_getProperty(context,
OSGI_FRAMEWORK_FRAMEWORK_UUID, &uuid)) != CELIX_SUCCESS) || (!uuid)) {
@@ -95,7 +103,7 @@ static celix_status_t etcdWatcher_getLoc
* returns the modifiedIndex of the last modified
* discovery endpoint (see etcd documentation).
*/
-static celix_status_t
etcdWatcher_addAlreadyExistingWatchpoints(endpoint_discovery_poller_pt
poller, int* highestModified) {
+static celix_status_t
etcdWatcher_addAlreadyExistingWatchpoints(discovery_pt discovery, int*
highestModified) {
celix_status_t status = CELIX_SUCCESS;
char** nodeArr = calloc(MAX_NODES, sizeof(*nodeArr));
char rootPath[MAX_ROOTNODE_LENGTH];
@@ -108,7 +116,7 @@ static celix_status_t etcdWatcher_addAlr
}
// we need to go though all nodes and get the highest
modifiedIndex
- if (((status = etcdWatcher_getRootPath(&rootPath[0])) ==
CELIX_SUCCESS) &&
+ if (((status = etcdWatcher_getRootPath(discovery->context,
&rootPath[0])) == CELIX_SUCCESS) &&
(etcd_getNodes(rootPath, nodeArr, &size) == true)) {
for (i = 0; i < size; i++) {
char* key = nodeArr[i];
@@ -118,7 +126,7 @@ static celix_status_t etcdWatcher_addAlr
if (etcd_get(key, &value[0], &action[0],
&modIndex) == true) {
// check that this is not equals to
the
local endpoint
-
endpointDiscoveryPoller_addDiscoveryEndpoint(poller,
strdup(&value[0]));
+
endpointDiscoveryPoller_addDiscoveryEndpoint(discovery->poller,
strdup(&value[0]));
if (modIndex > *highestModified) {
*highestModified = modIndex;
@@ -193,8 +201,11 @@ static void* etcdWatcher_run(void* data)
static char rootPath[MAX_ROOTNODE_LENGTH];
int highestModified = 0;
- etcdWatcher_addAlreadyExistingWatchpoints(watcher->poller,
&highestModified);
- etcdWatcher_getRootPath(&rootPath[0]);
+ bundle_context_pt context = watcher->discovery->context;
+ endpoint_discovery_poller_pt poller =
watcher->discovery->poller;
+
+ etcdWatcher_addAlreadyExistingWatchpoints(watcher->discovery,
&highestModified);
+ etcdWatcher_getRootPath(context, &rootPath[0]);
while (watcher->running) {
char value[MAX_VALUE_LENGTH];
@@ -204,16 +215,16 @@ static void* etcdWatcher_run(void* data)
if (etcd_watch(rootPath, highestModified + 1,
&action[0],
&preValue[0], &value[0]) == true) {
if (strcmp(action, "set") == 0) {
-
endpointDiscoveryPoller_removeDiscoveryEndpoint(watcher->poller,
&preValue[0]);
-
endpointDiscoveryPoller_addDiscoveryEndpoint(watcher->poller,
&value[0]);
+
endpointDiscoveryPoller_removeDiscoveryEndpoint(poller,
&preValue[0]);
+
endpointDiscoveryPoller_addDiscoveryEndpoint(poller, &value[0]);
} else if (strcmp(action, "delete") == 0) {
-
endpointDiscoveryPoller_removeDiscoveryEndpoint(watcher->poller,
&preValue[0]);
+
endpointDiscoveryPoller_removeDiscoveryEndpoint(poller,
&preValue[0]);
} else {
fw_log(logger,
OSGI_FRAMEWORK_LOG_INFO,
"Unexpected action: %s", action);
}
}
// update own framework uuid in any case;
- etcdWatcher_addOwnFramework(watcher->context);
+ etcdWatcher_addOwnFramework(context);
}
return NULL;
@@ -223,7 +234,7 @@ static void* etcdWatcher_run(void* data)
* 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(endpoint_discovery_poller_pt
poller,
bundle_context_pt context,
+celix_status_t etcdWatcher_create(discovery_pt discovery,
bundle_context_pt context,
etcd_watcher_pt *watcher)
{
celix_status_t status = CELIX_SUCCESS;
@@ -232,7 +243,7 @@ celix_status_t etcdWatcher_create(endpoi
char* etcd_port_string = NULL;
int etcd_port = 0;
- if (poller == NULL) {
+ if (discovery == NULL) {
return CELIX_BUNDLE_EXCEPTION;
}
@@ -242,8 +253,7 @@ celix_status_t etcdWatcher_create(endpoi
}
else
{
- (*watcher)->poller = poller;
- (*watcher)->context = context;
+ (*watcher)->discovery = discovery;
}
if ((bundleContext_getProperty(context, CFG_ETCD_SERVER_IP,
&etcd_server) != CELIX_SUCCESS) || !etcd_server) {
@@ -263,8 +273,6 @@ celix_status_t etcdWatcher_create(endpoi
}
}
-
-
if (etcd_init(etcd_server, etcd_port) == false)
{
return CELIX_BUNDLE_EXCEPTION;
@@ -302,7 +310,8 @@ celix_status_t etcdWatcher_destroy(etcd_
celixThread_join(watcher->watcherThread, NULL);
// register own framework
- if ((status = etcdWatcher_getLocalNodePath(watcher->context,
&localNodePath[0])) != CELIX_SUCCESS) {
+ if ((status = etcdWatcher_getLocalNodePath(
+ watcher->discovery->context,
&localNodePath[0]))
!= CELIX_SUCCESS) {
return status;
}