From: František Dvořák Date: Fri, 20 Apr 2007 18:27:20 +0000 (+0000) Subject: Cleanup, status polishing, remain locked during quick reconnection attempts. X-Git-Tag: gridsite-core_R_1_5_0~21 X-Git-Url: http://scientific.zcu.cz/git/?a=commitdiff_plain;h=843b3f70d0eabfe49487cb41ed73c685cce8fc19;p=jra1mw.git Cleanup, status polishing, remain locked during quick reconnection attempts. --- diff --git a/org.glite.jp.index/Makefile b/org.glite.jp.index/Makefile index 82a9857..940ddf1 100644 --- a/org.glite.jp.index/Makefile +++ b/org.glite.jp.index/Makefile @@ -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 diff --git a/org.glite.jp.index/src/bones_server.c b/org.glite.jp.index/src/bones_server.c index 55b487a..5f81290 100644 --- a/org.glite.jp.index/src/bones_server.c +++ b/org.glite.jp.index/src/bones_server.c @@ -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; diff --git a/org.glite.jp.index/src/db_ops.c b/org.glite.jp.index/src/db_ops.c index 48a6bfb..d8bd345 100644 --- a/org.glite.jp.index/src/db_ops.c +++ b/org.glite.jp.index/src/db_ops.c @@ -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); diff --git a/org.glite.jp.index/src/db_ops.h b/org.glite.jp.index/src/db_ops.h index e7353fc..9105ba2 100644 --- a/org.glite.jp.index/src/db_ops.h +++ b/org.glite.jp.index/src/db_ops.h @@ -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); diff --git a/org.glite.jp.index/src/soap_ps_calls.c b/org.glite.jp.index/src/soap_ps_calls.c index d3dcce8..2c77271 100644 --- a/org.glite.jp.index/src/soap_ps_calls.c +++ b/org.glite.jp.index/src/soap_ps_calls.c @@ -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); }