Daemonize & proper startup script, according doc udate.
authorFrantišek Dvořák <valtri@civ.zcu.cz>
Tue, 8 Nov 2005 15:36:26 +0000 (15:36 +0000)
committerFrantišek Dvořák <valtri@civ.zcu.cz>
Tue, 8 Nov 2005 15:36:26 +0000 (15:36 +0000)
Some deps to Makefile.
Fillup PS and ownerid in jobs.

org.glite.jp.index/Makefile
org.glite.jp.index/config/startup
org.glite.jp.index/doc/README
org.glite.jp.index/src/bones_server.c
org.glite.jp.index/src/conf.c
org.glite.jp.index/src/conf.h
org.glite.jp.index/src/db_ops.c
org.glite.jp.index/src/db_ops.h
org.glite.jp.index/src/soap_ops.c

index 23fc84a..85f2db6 100644 (file)
@@ -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
 
 
index b3f71f2..97fbc9d 100755 (executable)
@@ -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
index f32c180..6dd784c 100644 (file)
@@ -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]
index d23118d..078546d 100644 (file)
@@ -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
index dc67a7d..4b9641c 100644 (file)
@@ -5,6 +5,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
+#include <stdarg.h>
 
 #include <glite/jp/types.h>
 #include <glite/jp/context.h>
@@ -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);
+}
index 22003d9..e32c30b 100644 (file)
@@ -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
index 7b570bb..a938d55 100644 (file)
@@ -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;
index 5aabae9..0569c72 100644 (file)
@@ -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
index 08d1c91..7e5601c 100644 (file)
@@ -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);