From 28ef321e8f2517c41c20ea8cec0a772d315ad3b7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Franti=C5=A1ek=20Dvo=C5=99=C3=A1k?= Date: Tue, 8 Nov 2005 15:36:26 +0000 Subject: [PATCH] Daemonize & proper startup script, according doc udate. Some deps to Makefile. Fillup PS and ownerid in jobs. --- org.glite.jp.index/Makefile | 6 +++--- org.glite.jp.index/config/startup | 24 +++++++----------------- org.glite.jp.index/doc/README | 5 +++++ org.glite.jp.index/src/bones_server.c | 6 ++++-- org.glite.jp.index/src/conf.c | 18 +++++++++++++++++- org.glite.jp.index/src/conf.h | 7 +++++-- org.glite.jp.index/src/db_ops.c | 27 ++++++++++++++------------- org.glite.jp.index/src/db_ops.h | 2 +- org.glite.jp.index/src/soap_ops.c | 14 +++++++++----- 9 files changed, 65 insertions(+), 44 deletions(-) diff --git a/org.glite.jp.index/Makefile b/org.glite.jp.index/Makefile index 23fc84a..85f2db6 100644 --- a/org.glite.jp.index/Makefile +++ b/org.glite.jp.index/Makefile @@ -52,7 +52,7 @@ is_prefix:=jpis_ ps_prefix:=jpps_ SRCS:= conf.c bones_server.c soap_ops.c soap_ps_calls.c \ - ws_ps_typeref.c ws_is_typeref.c db_ops.c context.c \ + ws_ps_typeref.c ws_is_typeref.c db_ops.c context.c common_server.c \ ${is_prefix}ServerLib.c \ ${ps_prefix}ClientLib.c ${ps_prefix}C.c \ @@ -103,11 +103,11 @@ JobProvenancePS.xh: %.xh: %.wsdl JobProvenanceTypes.wsdl typemap.dat ${is_prefix}ClientLib.c ${is_prefix}Client.c \ ${is_prefix}Server.c ${is_prefix}ServerLib.c \ -${is_prefix}C.c ${is_prefix}H.h: JobProvenanceIS.xh +${is_prefix}C.c ${is_prefix}H.h ${is_prefix}_Stub.h: JobProvenanceIS.xh ${gsoap_bin_prefix}/soapcpp2 -n -w -c -p ${is_prefix} JobProvenanceIS.xh ${ps_prefix}Client.c ${ps_prefix}ClientLib.c \ -${ps_prefix}C.c ${ps_prefix}H.h: JobProvenancePS.xh +${ps_prefix}C.c ${ps_prefix}H.h ${ps_prefix}_Stub.h: JobProvenancePS.xh ${gsoap_bin_prefix}/soapcpp2 -n -w -c -p ${ps_prefix} JobProvenancePS.xh diff --git a/org.glite.jp.index/config/startup b/org.glite.jp.index/config/startup index b3f71f2..97fbc9d 100755 --- a/org.glite.jp.index/config/startup +++ b/org.glite.jp.index/config/startup @@ -3,12 +3,6 @@ # # startup script for JP index server # -# environment: -# GLITE_JPIS_PS - required JP PrimaryStorage server -# (for example http://umbar.ics.muni.cz:8901) -# GLITE_JPIS_PORT - used port (default 8902) -# GLITE_JPIS_DB - connection string (default jpis/@localhost:jpis1) -# GLITE_LOCATION=${GLITE_LOCATION:-/opt/glite} GLITE_LOCATION_VAR=${GLITE_LOCATION_VAR:-${GLITE_LOCATION}/var} @@ -20,15 +14,17 @@ GLITE_LOCATION_VAR=${GLITE_LOCATION_VAR:-${GLITE_LOCATION}/var} [ -f $GLITE_LOCATION/etc/jpis.conf ] && . $GLITE_LOCATION/etc/jpis.conf [ -f $GLITE_LOCATION_VAR/etc/jpis.conf ] && . $GLITE_LOCATION_VAR/etc/jpis.conf -[ -n "$GLITE_JPIS_SERVER_PIDFILE" ] && pidfile=$GLITE_JPIS_SERVER_PIDFILE || - pidfile=$GLITE_LOCATION_VAR/glite-jp-indexd.pid +[ -n "$GLITE_JPIS_PIDFILE" ] || export GLITE_JPIS_PIDFILE=$GLITE_LOCATION_VAR/glite-jp-indexd.pid +[ -n "$GLITE_JPIS_LOGFILE" ] || export GLITE_JPIS_LOGFILE=$GLITE_LOCATION_VAR/log/glite-jp-indexd.log +pidfile="$GLITE_JPIS_PIDFILE" +logfile="$GLITE_JPIS_LOGFILE" unset creds port start() { echo -n Starting glite-jp-indexd ... - $GLITE_LOCATION/bin/glite-jp-indexd > $GLITE_LOCATION_VAR/log/glite-jp-index.log 2>&1 & + $GLITE_LOCATION/bin/glite-jp-indexd echo " done" } @@ -51,8 +47,8 @@ stop() echo " done" rm -f $pidfile else - killall glite-jp-indexd -# echo $pidfile does not exist - glite-jp-indexd not running? >&2 + echo $pidfile does not exist - glite-jp-indexd not running? >&2 + return 1 fi echo done } @@ -65,12 +61,6 @@ status() echo glite-jp-indexd running as $pid return 0 fi - else - ps xa | grep "glite-jp-indexd" > /dev/null - if [ "$?" = 0 ]; then - echo glite-jp-indexd running - return 0 - fi fi echo glite-jp-indexd not running diff --git a/org.glite.jp.index/doc/README b/org.glite.jp.index/doc/README index f32c180..6dd784c 100644 --- a/org.glite.jp.index/doc/README +++ b/org.glite.jp.index/doc/README @@ -73,6 +73,11 @@ GLITE_JPIS_PORT - used port (default 8902) GLITE_JPIS_DB - database connection string (default jpis/@localhost:jpis1) +GLITE_JPIS_LOGFILE - log file + +GLITE_JPIS_PIDFILE - pid file + +GLITE_JPIS_DEBUG - don't daemonize Other parameters will be configurable in close future. Its current hard-coded values are in org.glite.jp.index/src/conf.[ch] diff --git a/org.glite.jp.index/src/bones_server.c b/org.glite.jp.index/src/bones_server.c index d23118d..078546d 100644 --- a/org.glite.jp.index/src/bones_server.c +++ b/org.glite.jp.index/src/bones_server.c @@ -19,6 +19,7 @@ #include "db_ops.h" #include "soap_ps_calls.h" #include "context.h" +#include "common_server.h" #include "soap_version.h" #include "jpis_H.h" @@ -97,6 +98,9 @@ int main(int argc, char *argv[]) return 1; } + /* daemonize */ + if (!conf->debug) glite_jpis_daemonize("glite-jp-indexd", conf->pidfile, conf->logfile); + /* XXX preliminary support for plugins for (i=0; conf->plugins[i]; i++) glite_jp_typeplugin_load(ctx,conf->plugins[i]); @@ -167,8 +171,6 @@ int main(int argc, char *argv[]) fprintf(stderr,"Server idenity: %s\n",mysubj); else fputs("WARNING: Running unauthenticated\n",stderr); - /* daemonise */ - /* XXX: uncomment after testing phase for (i=0; conf->PS_list[i]; i++); // count PS we need to contact i += USER_QUERY_SLAVES_NUM; // add some slaves for user queries diff --git a/org.glite.jp.index/src/conf.c b/org.glite.jp.index/src/conf.c index dc67a7d..4b9641c 100644 --- a/org.glite.jp.index/src/conf.c +++ b/org.glite.jp.index/src/conf.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -12,7 +13,8 @@ int glite_jp_get_conf(int argc, char **argv, char *config_file, glite_jp_is_conf **configuration) -{ +{ + char *debug; char *ps = NULL; // read comman line options and configuration file @@ -26,6 +28,10 @@ int glite_jp_get_conf(int argc, char **argv, char *config_file, glite_jp_is_conf // configuration from environment conf->cs = getenv("GLITE_JPIS_DB"); conf->port = getenv("GLITE_JPIS_PORT"); + debug = getenv("GLITE_JPIS_DEBUG"); + conf->debug = (debug != NULL) && (strcmp(debug, "0") != 0); + conf->pidfile = getenv("GLITE_JPIS_PIDFILE"); + conf->logfile = getenv("GLITE_JPIS_LOGFILE"); // prefixes & attributes defined in: // lb.server/build/jp_job_attrs.h (created when build plugin) @@ -121,3 +127,13 @@ void glite_jp_free_conf(glite_jp_is_conf *conf) free(conf->feeds); free(conf); } + + +void glite_jp_lprintf(const char *source, const char *fmt, ...) { + va_list ap; + + printf("%s: ", source); + va_start(ap, fmt); + vprintf(fmt, ap); + va_end(ap); +} diff --git a/org.glite.jp.index/src/conf.h b/org.glite.jp.index/src/conf.h index 22003d9..e32c30b 100644 --- a/org.glite.jp.index/src/conf.h +++ b/org.glite.jp.index/src/conf.h @@ -9,7 +9,7 @@ #define GLITE_JPIS_DEFAULT_PORT_STR "8902" //#define lprintf -#define lprintf printf +#define lprintf(args...) glite_jp_lprintf(__FUNCTION__, ##args) typedef struct _glite_jp_is_feed { char *PS_URL; //URLs of Primary Storage servers @@ -29,7 +29,8 @@ typedef struct _glite_jp_is_conf { glite_jp_is_feed **feeds; // null terminated list of feeds - char *cs, *port; + int debug; + char *cs, *port, *pidfile, *logfile; } glite_jp_is_conf; @@ -38,4 +39,6 @@ typedef struct _glite_jp_is_conf { int glite_jp_get_conf(int argc, char **argv, char *config_file, glite_jp_is_conf **configuration); void glite_jp_free_conf(glite_jp_is_conf *conf); +void glite_jp_lprintf(const char *source, const char *fmt, ...); + #endif diff --git a/org.glite.jp.index/src/db_ops.c b/org.glite.jp.index/src/db_ops.c index 7b570bb..a938d55 100644 --- a/org.glite.jp.index/src/db_ops.c +++ b/org.glite.jp.index/src/db_ops.c @@ -422,10 +422,11 @@ int glite_jpis_init_db(glite_jpis_context_t isctx) { // sql command: get info about the feed (via feedid) glite_jp_db_create_params(&myparam, 1, GLITE_JP_DB_TYPE_CHAR, isctx->param_feedid, &isctx->param_feedid_len); - glite_jp_db_create_results(&myres, 2, + glite_jp_db_create_results(&myres, 3, GLITE_JP_DB_TYPE_INT, NULL, &isctx->param_uniqueid, - GLITE_JP_DB_TYPE_INT, NULL, &isctx->param_state); - if ((ret = glite_jp_db_prepare(jpctx, "SELECT uniqueid, state FROM feeds WHERE (feedid=?)", &isctx->select_info_feed_stmt, myparam, myres)) != 0) goto fail; + GLITE_JP_DB_TYPE_INT, NULL, &isctx->param_state, + GLITE_JP_DB_TYPE_VARCHAR, NULL, isctx->param_ps, sizeof(isctx->param_ps), &isctx->param_ps_len); + if ((ret = glite_jp_db_prepare(jpctx, "SELECT uniqueid, state, source FROM feeds WHERE (feedid=?)", &isctx->select_info_feed_stmt, myparam, myres)) != 0) goto fail; // sql command: update state of the feed (via uniqueid) glite_jp_db_create_params(&myparam, 2, @@ -582,7 +583,7 @@ int glite_jpis_insertAttrVal(glite_jpis_context_t ctx, const char *jobid, glite_ free(table); free(value); free(full_value); - lprintf("%s(%s): sql=%s\n", __FUNCTION__, av->name, sql); + lprintf("(%s) sql=%s\n", av->name, sql); if (glite_jp_db_execstmt(ctx->jpctx, sql, NULL) != 1) { free(sql); return ctx->jpctx->error->code; @@ -593,34 +594,34 @@ int glite_jpis_insertAttrVal(glite_jpis_context_t ctx, const char *jobid, glite_ } -int glite_jpis_lazyInsertJob(glite_jpis_context_t ctx, const char *feedid, const char *jobid, const char *owner) { +int glite_jpis_lazyInsertJob(glite_jpis_context_t ctx, const char *ps, const char *jobid, const char *owner) { int ret; char *md5_jobid = NULL, *md5_cert = NULL; - lprintf("%s\n", __FUNCTION__); + lprintf("\n"); md5_jobid = str2md5(jobid); + md5_cert = str2md5(owner); GLITE_JPIS_PARAM(ctx->param_jobid, ctx->param_jobid_len, md5_jobid); - switch (ret = glite_jp_db_execute(ctx->select_jobid_stmt)) { case 1: lprintf("jobid '%s' found\n", jobid); goto ok0; case 0: - lprintf("%s:inserting jobid %s (%s)\n", __FUNCTION__, jobid, md5_jobid); + lprintf("inserting jobid %s (%s)\n", jobid, md5_jobid); + GLITE_JPIS_PARAM(ctx->param_dg_jobid, ctx->param_dg_jobid_len, jobid); - GLITE_JPIS_PARAM(ctx->param_feedid, ctx->param_feedid_len, feedid); + GLITE_JPIS_PARAM(ctx->param_ownerid, ctx->param_ownerid_len, md5_cert); + GLITE_JPIS_PARAM(ctx->param_ps, ctx->param_ps_len, ps); if (glite_jp_db_execute(ctx->insert_job_stmt) != 1) goto fail; break; default: assert(ret != 1); break; } ok0: - md5_cert = str2md5(owner); GLITE_JPIS_PARAM(ctx->param_ownerid, ctx->param_ownerid_len, md5_cert); - switch (ret = glite_jp_db_execute(ctx->select_user_stmt)) { - case 1: lprintf("%s:jobid '%s' found\n", __FUNCTION__, jobid); goto ok; + case 1: lprintf("jobid '%s' found\n", jobid); goto ok; case 0: - lprintf("%s:inserting user %s (%s)\n", __FUNCTION__, owner, md5_cert); + lprintf("inserting user %s (%s)\n", owner, md5_cert); GLITE_JPIS_PARAM(ctx->param_cert, ctx->param_cert_len, owner); if (glite_jp_db_execute(ctx->insert_user_stmt) != 1) goto fail; break; diff --git a/org.glite.jp.index/src/db_ops.h b/org.glite.jp.index/src/db_ops.h index 5aabae9..0569c72 100644 --- a/org.glite.jp.index/src/db_ops.h +++ b/org.glite.jp.index/src/db_ops.h @@ -39,6 +39,6 @@ int glite_jpis_tryReconnectFeed(glite_jpis_context_t ctx, long int uniqueid, tim int glite_jpis_insertAttrVal(glite_jpis_context_t ctx, const char *jobid, glite_jp_attrval_t *av); -int glite_jpis_lazyInsertJob(glite_jpis_context_t ctx, const char *feedid, const char *jobid, const char *owner); +int glite_jpis_lazyInsertJob(glite_jpis_context_t ctx, const char *ps, const char *jobid, const char *owner); #endif diff --git a/org.glite.jp.index/src/soap_ops.c b/org.glite.jp.index/src/soap_ops.c index 08d1c91..7e5601c 100644 --- a/org.glite.jp.index/src/soap_ops.c +++ b/org.glite.jp.index/src/soap_ops.c @@ -76,16 +76,16 @@ static void err2fault(const glite_jp_context_t ctx,struct soap *soap) #define CONTEXT_FROM_SOAP(soap,ctx) glite_jpis_context_t ctx = (glite_jpis_context_t) ((slave_data_t *) (soap->user))->ctx -static int updateJob(glite_jpis_context_t ctx, const char *feedid, struct jptype__jobRecord *jobAttrs) { +static int updateJob(glite_jpis_context_t ctx, const char *ps, struct jptype__jobRecord *jobAttrs) { glite_jp_attrval_t av; struct jptype__attrValue *attr; int ret, iattrs; - lprintf("%s: jobid='%s', attrs=%d\n", __FUNCTION__, jobAttrs->jobid, jobAttrs->__sizeattributes); + lprintf("jobid='%s', attrs=%d\n", jobAttrs->jobid, jobAttrs->__sizeattributes); if (jobAttrs->remove) assert(*(jobAttrs->remove) == 0); - if ((ret = glite_jpis_lazyInsertJob(ctx, feedid, jobAttrs->jobid, jobAttrs->owner)) != 0) return ret; + if ((ret = glite_jpis_lazyInsertJob(ctx, ps, jobAttrs->jobid, jobAttrs->owner)) != 0) return ret; for (iattrs = 0; iattrs < jobAttrs->__sizeattributes; iattrs++) { attr = jobAttrs->attributes[iattrs]; glite_jpis_SoapToAttrVal(&av, attr); @@ -102,7 +102,7 @@ SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__UpdateJobs( struct _jpelem__UpdateJobsResponse *jpelem__UpdateJobsResponse) { int ret, ijobs; - const char *feedid; + const char *feedid, *ps; int status, done; CONTEXT_FROM_SOAP(soap, ctx); glite_jp_context_t jpctx = ctx->jpctx; @@ -111,6 +111,7 @@ SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__UpdateJobs( // XXX: test client in examples/jpis-test // sends to this function some data for testing puts(__FUNCTION__); + ps = NULL; // get info about the feed feedid = jpelem__UpdateJobs->feedId; @@ -119,6 +120,7 @@ SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__UpdateJobs( fprintf(stderr, "can't get info about '%s', returned %d records: %s (%s)\n", feedid, ret, jpctx->error->desc, jpctx->error->source); goto fail; } + ps = strdup(ctx->param_ps); // update status, if needed (only oring) status = ctx->param_state; done = jpelem__UpdateJobs->feedDone ? GLITE_JP_IS_STATE_DONE : 0; @@ -132,12 +134,14 @@ SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__UpdateJobs( // insert all attributes for (ijobs = 0; ijobs < jpelem__UpdateJobs->__sizejobAttributes; ijobs++) { - if (updateJob(ctx, feedid, jpelem__UpdateJobs->jobAttributes[ijobs]) != 0) goto fail; + if (updateJob(ctx, ps, jpelem__UpdateJobs->jobAttributes[ijobs]) != 0) goto fail; } + free(ps); return SOAP_OK; fail: + free(ps); // TODO: bubble up err = glite_jp_error_chain(ctx->jpctx); fprintf(stderr, "%s:%s\n", __FUNCTION__, err); -- 1.8.2.3