Ah - sorry, I just see that you refer to the commit from this morning. A minute before I saw your mail, I committed some more changes which also seems to fix this issue (at least I cannot reproduce it). I was already wondering how fast you are checking commits :).

Regards,
  Bjoern



On 2014-10-17 15:05, Alexander Broekhuis wrote:
Hi Bjoern,

I think you forgot to add a file to the commit. It is not building for me:

remote_services/discovery_etcd/private/src/etcd_watcher.c:237:16: error:
conflicting types for ‘etcdWatcher_create’
celix_status_t etcdWatcher_create(discovery_pt discovery, bundle_context_pt
context,

remote_services/discovery_etcd/private/include/etcd_watcher.h:36:16: note:
previous declaration of ‘etcdWatcher_create’ was here
celix_status_t etcdWatcher_create(endpoint_discovery_poller_pt poller,
bundle_context_pt context, etcd_watcher_pt *watcher);


2014-10-17 3:16 GMT-04:00 <[email protected]>:

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;
        }




Reply via email to