Cleanup, status polishing, remain locked during quick reconnection attempts.
authorFrantišek Dvořák <valtri@civ.zcu.cz>
Fri, 20 Apr 2007 18:27:20 +0000 (18:27 +0000)
committerFrantišek Dvořák <valtri@civ.zcu.cz>
Fri, 20 Apr 2007 18:27:20 +0000 (18:27 +0000)
org.glite.jp.index/Makefile
org.glite.jp.index/src/bones_server.c
org.glite.jp.index/src/db_ops.c
org.glite.jp.index/src/db_ops.h
org.glite.jp.index/src/soap_ps_calls.c

index 82a9857..940ddf1 100644 (file)
@@ -31,7 +31,7 @@ GLOBUS_LIBS:=-L${globus_prefix}/lib \
 GLOBUS_CFLAGS:=-I${globus_prefix}/include/${nothrflavour}
 
 DEBUG:=-W -Wall -g -O0
-CPPFLAGS:=-DDEBUG -D_GNU_SOURCE -I. -I${top_srcdir}/interface -I${top_srcdir}/src -I${gsoap_prefix}/include -I${gsoap_prefix} -I${stagedir}/include ${GLOBUS_CFLAGS} -I${mysql_prefix}/include -I${mysql_prefix}/include/mysql -I${gsoap_prefix}/include
+CPPFLAGS:=-DDEBUG -D_GNU_SOURCE -I. -I${top_srcdir}/interface -I${top_srcdir}/src -I${gsoap_prefix}/include -I${gsoap_prefix} -I${stagedir}/include ${GLOBUS_CFLAGS} -I${gsoap_prefix}/include
 CFLAGS:=${DEBUG} ${CFLAGS}
 LDFLAGS:=-L${stagedir}/lib
 
index 55b487a..5f81290 100644 (file)
@@ -192,25 +192,26 @@ int main(int argc, char *argv[])
 int feed_caller(glite_jpis_context_t isctx, glite_jp_is_conf *conf) {
        char *PS_URL;
        long int uniqueid;
-       int i;
+       int i, ok;
 
        // dirty hack - try quicker several times first
        glite_jp_clear_error(isctx->jpctx);
        switch (glite_jpis_lockUninitializedFeed(isctx,&uniqueid,&PS_URL)) {
                case 0: 
+                       ok = 0;
                        for (i = 0; i < 10; i++) {
                                // contact PS server, ask for data, save
                                // feedId and expiration to DB and unlock feed
                                if (MyFeedIndex(isctx, conf, uniqueid, PS_URL) != 0) {
                                        // error when connecting to PS
                                        printf("[%d] %s: %s (%s), reconnecting later\n", getpid(), __FUNCTION__, isctx->jpctx->error->desc, isctx->jpctx->error->source);
-                                       if (i + 1 < 10) glite_jpis_unlockFeed(isctx, uniqueid);
-                                       else glite_jpis_tryReconnectFeed(isctx, uniqueid, time(NULL) + RECONNECT_TIME);
                                } else {
                                        free(PS_URL);
+                                       ok = 1;
                                        break;
                                }
                        }
+                       if (!ok) glite_jpis_tryReconnectFeed(isctx, uniqueid, time(NULL) + RECONNECT_TIME);
                        sleep(RECONNECT_TIME_QUICK);
 
                        return 1;
index 48a6bfb..d8bd345 100644 (file)
@@ -433,11 +433,12 @@ int glite_jpis_init_db(glite_jpis_context_t isctx) {
        if ((ret = glite_jp_db_prepare(jpctx, "UPDATE feeds SET locked=1 WHERE (locked = 0) AND (uniqueid = ?)", &isctx->lock_feed_stmt, myparam, NULL)) != 0) goto fail;
 
        // sql command: assign the feed (via uniqueid)
-       glite_jp_db_create_params(&myparam, 3,
+       glite_jp_db_create_params(&myparam, 4,
                GLITE_JP_DB_TYPE_CHAR, isctx->param_feedid, &isctx->param_feedid_len,
                GLITE_JP_DB_TYPE_DATETIME, &isctx->param_expires,
+               GLITE_JP_DB_TYPE_INT, &isctx->param_state,
                GLITE_JP_DB_TYPE_INT, &isctx->param_uniqueid);
-       if ((ret = glite_jp_db_prepare(jpctx, "UPDATE feeds SET feedid=?, expires=? WHERE (uniqueid=?)", &isctx->init_feed_stmt, myparam, NULL)) != 0) goto fail;
+       if ((ret = glite_jp_db_prepare(jpctx, "UPDATE feeds SET feedid=?, expires=?, state=? WHERE (uniqueid=?)", &isctx->init_feed_stmt, myparam, NULL)) != 0) goto fail;
 
        // sql command: unlock the feed (via uniqueid)
        glite_jp_db_create_params(&myparam, 1, GLITE_JP_DB_TYPE_INT, &isctx->param_uniqueid);
@@ -578,13 +579,14 @@ int glite_jpis_lockUninitializedFeed(glite_jpis_context_t ctx, long int *uniquei
 
 /* Store feed ID and expiration time returned by PS for locked feed. */
 
-int glite_jpis_initFeed(glite_jpis_context_t ctx, long int uniqueid, char *feedId, time_t feedExpires)
+int glite_jpis_initFeed(glite_jpis_context_t ctx, long int uniqueid, char *feedId, time_t feedExpires, int status)
 {
        int ret;
 
        GLITE_JPIS_PARAM(ctx->param_feedid, ctx->param_feedid_len, feedId);
        glite_jp_db_set_time(ctx->param_expires, feedExpires);
        ctx->param_uniqueid = uniqueid;
+       ctx->param_state = status;
 
        ret = glite_jp_db_execute(ctx->init_feed_stmt);
        lprintf("initializing feed, uniqueid=%li, result=%d\n", uniqueid, ret);
index e7353fc..9105ba2 100644 (file)
@@ -33,7 +33,7 @@ int glite_jpis_init_db(glite_jpis_context_t isctx);
 void glite_jpis_free_db(glite_jpis_context_t ctx);
 
 int glite_jpis_lockUninitializedFeed(glite_jpis_context_t ctx, long int *uinqueid, char **PS_URL);
-int glite_jpis_initFeed(glite_jpis_context_t ctx, long int uniqueid, char *feedId, time_t feedExpires);
+int glite_jpis_initFeed(glite_jpis_context_t ctx, long int uniqueid, char *feedId, time_t feedExpires, int status);
 int glite_jpis_unlockFeed(glite_jpis_context_t ctx, long int uniqueid);
 int glite_jpis_tryReconnectFeed(glite_jpis_context_t ctx, long int uniqueid, time_t reconn_time);
 
index d3dcce8..2c77271 100644 (file)
@@ -53,7 +53,7 @@ int MyFeedIndex(glite_jpis_context_t ctx, glite_jp_is_conf *conf, long int uniqu
 //     struct jptype__primaryQuery             query;
 //     struct jptype__stringOrBlob             value;
 //     struct xsd__base64Binary                blob;
-       int                                     i, dest_index;
+       int                                     i, dest_index, status;
        struct soap                             *soap = soap_new();
        glite_gsplugin_Context                  plugin_ctx;
        glite_jp_error_t err;
@@ -110,9 +110,10 @@ int MyFeedIndex(glite_jpis_context_t ctx, glite_jp_is_conf *conf, long int uniqu
                goto err;
        }
        else {
+               status = (conf->feeds[dest_index]->history ? GLITE_JP_IS_STATE_HIST : 0) | (conf->feeds[dest_index]->continuous ? GLITE_JP_IS_STATE_CONT : 0);
                lprintf("(%ld) FeedId: %s\n", uniqueid, out.feedId);
                lprintf("(%ld) Expires: %s", uniqueid, ctime(&out.feedExpires));
-               glite_jpis_initFeed(ctx, uniqueid, out.feedId, out.feedExpires);
+               glite_jpis_initFeed(ctx, uniqueid, out.feedId, out.feedExpires, status);
                glite_jpis_unlockFeed(ctx, uniqueid);
        }