From da5cb74df0106e90c94cb3e04bc2659e7e32a70b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Milo=C5=A1=20Mula=C4=8D?= Date: Mon, 16 Jan 2006 17:20:27 +0000 Subject: [PATCH] merge from RC15 branch - compiles --- org.glite.jp.client/Makefile | 16 ++-- org.glite.jp.client/doc/README.jpimporter | 2 +- org.glite.jp.client/examples/glite-jp-importer.sh | 55 ++++++++++++ org.glite.jp.client/project/build.number | 1 + .../project/configure.properties.xml | 1 - org.glite.jp.client/src/jpimporter.c | 20 +++-- org.glite.jp.common/Makefile | 1 - org.glite.jp.common/project/build.number | 2 +- .../project/configure.properties.xml | 12 ++- org.glite.jp.index/Makefile | 29 ++----- .../config/glite-jp-index-dbsetup.sql | 3 +- org.glite.jp.index/config/startup | 24 ++---- org.glite.jp.index/doc/README | 5 ++ org.glite.jp.index/doc/client_conf.xsd | 85 +++++++++++++++++++ org.glite.jp.index/doc/server_conf.xsd | 97 ++++++++++++++++++++++ org.glite.jp.index/examples/jpis-test.c | 58 +++++++++++-- .../project/configure.properties.xml | 13 ++- org.glite.jp.index/src/bones_server.c | 8 +- org.glite.jp.index/src/common_server.c | 72 ++++++++++++++++ org.glite.jp.index/src/common_server.h | 6 ++ org.glite.jp.index/src/conf.c | 23 ++++- org.glite.jp.index/src/conf.h | 11 ++- org.glite.jp.index/src/db_ops.c | 37 +++++---- org.glite.jp.index/src/db_ops.h | 2 +- org.glite.jp.index/src/soap_ops.c | 45 ++++++---- org.glite.jp.index/test/run-test.sh | 80 ++++++++++++++++++ org.glite.jp.primary/Makefile | 10 ++- .../config/glite-jp-primary-dbsetup.sh | 14 ++++ org.glite.jp.primary/config/startup | 1 + org.glite.jp.primary/doc/README.install | 59 +++++++++++++ org.glite.jp.primary/examples/README.test | 4 +- org.glite.jp.primary/examples/sample_job | 8 ++ .../project/configure.properties.xml | 13 ++- org.glite.jp.primary/src/feed.c | 40 +++++---- org.glite.jp.primary/src/is_client.c | 8 +- org.glite.jp.primary/src/new_ftp_backend.c | 5 +- org.glite.jp.server-common/Makefile | 7 +- .../project/configure.properties.xml | 12 ++- org.glite.jp/build.xml | 10 ++- org.glite.jp/project/dependencies.properties | 2 + org.glite.jp/project/glite.jp.csf.xml | 17 +++- 41 files changed, 785 insertions(+), 133 deletions(-) create mode 100644 org.glite.jp.client/examples/glite-jp-importer.sh create mode 100644 org.glite.jp.index/doc/client_conf.xsd create mode 100644 org.glite.jp.index/doc/server_conf.xsd create mode 100644 org.glite.jp.index/src/common_server.c create mode 100644 org.glite.jp.index/src/common_server.h create mode 100644 org.glite.jp.index/test/run-test.sh create mode 100644 org.glite.jp.primary/config/glite-jp-primary-dbsetup.sh create mode 100644 org.glite.jp.primary/doc/README.install create mode 100644 org.glite.jp.primary/examples/sample_job diff --git a/org.glite.jp.client/Makefile b/org.glite.jp.client/Makefile index 8c4870d..7377a36 100644 --- a/org.glite.jp.client/Makefile +++ b/org.glite.jp.client/Makefile @@ -15,7 +15,6 @@ globus_prefix=/opt/globus nothrflavour=gcc32 thrflavour=gcc32pthr expat_prefix=/opt/expat -ares_prefix=/opt/ares gsoap_prefix=/software/gsoap-2.6 CC=gcc @@ -29,8 +28,8 @@ VPATH=${top_srcdir}/src:${top_srcdir}/examples:${top_srcdir}/project$:${top_srcd GLOBUS_LIBS:=-L${globus_prefix}/lib \ -lglobus_common_${nothrflavour} \ -lglobus_gssapi_gsi_${nothrflavour} \ - -lglobus_ftp_client_gcc32dbg \ - -lglobus_ftp_control_gcc32dbg + -lglobus_ftp_client_${nothrflavour} \ + -lglobus_ftp_control_${nothrflavour} GLOBUS_CFLAGS:=-I${globus_prefix}/include/${nothrflavour} @@ -80,15 +79,18 @@ compile: ${daemon} ${LIB} ${EXAMPLES} examples: ${EXAMPLES} +# XXX: should depend on -ltar but we have no dynamic version so far :-( ${LIB}: ${LIBOBJS} - ${LINK} ${version_info} -o $@ ${LIBLOBJS} -rpath ${glite_location}/lib ${LBMAILDIRLIB} -ltar + ${LINK} ${version_info} -o $@ ${LIBLOBJS} -rpath ${glite_location}/lib ${LBMAILDIRLIB} ${daemon}: ${OBJS} ${LINK} -o $@ ${OBJS} ${LBMAILDIRLIB} ${GSOAPLIB} ${GLOBUS_LIBS} ${EXAMPLES}: ${LIB} + +# XXX: -ltar should be in the library ${EXAMPLES}: %: %.o - ${LINK} -o $@ $< ${LIB} ${LBMAILDIRLIB} + ${LINK} -o $@ $< ${LIB} ${LBMAILDIRLIB} -ltar @@ -141,11 +143,13 @@ distbin: install: -mkdir -p ${PREFIX}/${STAGETO} - -mkdir -p ${PREFIX}/bin + -mkdir -p ${PREFIX}/bin + -mkdir -p ${PREFIX}/lib -mkdir -p ${PREFIX}/examples ${INSTALL} -m 755 ${daemon} ${PREFIX}/bin ${INSTALL} -m 644 ${LIB} ${PREFIX}/lib ${INSTALL} -m 644 jpps_upload_files ${PREFIX}/examples/glite-jp-primary-upload_files + cd ${top_srcdir}/examples && ${INSTALL} -m 755 glite-jp-importer.sh ${PREFIX}/examples/ cd ${top_srcdir}/interface && ${INSTALL} -m 644 ${HDRS} ${PREFIX}/${STAGETO} if [ x${DOSTAGE} = xyes ]; then \ cd ${top_srcdir}/interface && ${INSTALL} -m 644 ${STAGE_HDRS} ${PREFIX}/${STAGETO} ; \ diff --git a/org.glite.jp.client/doc/README.jpimporter b/org.glite.jp.client/doc/README.jpimporter index a5629db..5041ca6 100644 --- a/org.glite.jp.client/doc/README.jpimporter +++ b/org.glite.jp.client/doc/README.jpimporter @@ -64,7 +64,7 @@ LB server like this: is stored in the /tmp/lb_server_jpreg directory.) Then you should run the jpimporter daemon on the same host: -./glite-jp-importer -k -k -p jpps.server.address:8900 -r /tmp/lb_server_jpreg -d /tmp/lb_server_jpdump +./glite-jp-importer -c -k -p jpps.server.address:8900 -r /tmp/lb_server_jpreg -d /tmp/lb_server_jpdump (Every job registration anounced in /tmp/lb_server_jpreg directory will be sent to the JP PS at the address jpps.server.address:8900.) diff --git a/org.glite.jp.client/examples/glite-jp-importer.sh b/org.glite.jp.client/examples/glite-jp-importer.sh new file mode 100644 index 0000000..02c79ee --- /dev/null +++ b/org.glite.jp.client/examples/glite-jp-importer.sh @@ -0,0 +1,55 @@ +#! /bin/bash + +# +# example script for purging LB and importing the dumps to JP +# + +# job provenance server +JBSERVER=umbar.ics.muni.cz:8901 +# bookkeeping server +BKSERVER=scientific.civ.zcu.cz:9000 +# dump directory of bkserver (-D argument) +BKSERVER_DUMPDIR=/tmp/dump +# LB maildir for job registration (-J argument) +BKSERVER_JOBREG_MAILDIR=/tmp/lb_server_jpreg + +if [ -z "$X509_USER_CERT" -o -z "$X509_USER_KEY" ]; then + echo "Please set X509_USER_CERT and X509_USER_KEY." + exit 1 +fi + +CERT_ARGS="-c $X509_USER_CERT -k $X509_USER_KEY" +LB_DUMPDIR=/tmp/lb_server_dump +BKSERVER_DUMPDIR_OLD=/tmp/dump.old +LB_EXPORTDIR=/tmp/lb_export +PREFIX=`dirname $0`/.. +LOGDIR=/tmp/log + + +[ -d $LB_DUMPDIR ] || mkdir -p $LB_DUMPDIR +[ -d $BKSERVER_DUMPDIR ] || mkdir -p $BKSERVER_DUMPDIR +[ -d $BKSERVER_DUMPDIR_OLD ] || mkdir -p $BKSERVER_DUMPDIR_OLD +[ -d $LB_EXPORTDIR ] || mkdir -p $LB_EXPORTDIR +[ -d $LOGDIR ] || mkdir -p $LOGDIR + +echo "Using cert args $CERT_ARGS" + +$PREFIX/bin/glite-jp-importer -r $BKSERVER_JOBREG_MAILDIR -d $LB_DUMPDIR $CERT_ARGS -g -p $JBSERVER > $LOGDIR/jp-importer.log 2>&1 & +JP_PID=$! +trap "kill $JP_PID; exit 0" SIGINT + +while [ 1 ]; do + $PREFIX/sbin/glite-lb-purge -o 1 -l -m $BKSERVER + + for file in $BKSERVER_DUMPDIR/*; do + rm -f $LB_EXPORTDIR/* + if [ -s $file ]; then + $PREFIX/sbin/glite-lb-lb_dump_exporter -d $file -s $LB_EXPORTDIR -m $LB_DUMPDIR + mv $file $BKSERVER_DUMPDIR_OLD + else + rm $file + fi + done + + sleep 30 +done diff --git a/org.glite.jp.client/project/build.number b/org.glite.jp.client/project/build.number index d794048..39605c5 100644 --- a/org.glite.jp.client/project/build.number +++ b/org.glite.jp.client/project/build.number @@ -1 +1,2 @@ +#Thu Dec 15 09:23:26 CET 2005 module.build=0 diff --git a/org.glite.jp.client/project/configure.properties.xml b/org.glite.jp.client/project/configure.properties.xml index 09330b5..b475ce3 100644 --- a/org.glite.jp.client/project/configure.properties.xml +++ b/org.glite.jp.client/project/configure.properties.xml @@ -29,7 +29,6 @@ version=${module.version} glite_location=${with.glite.location} globus_prefix=${with.globus.prefix} expat_prefix=${with.expat.prefix} -ares_prefix=${with.ares.prefix} gsoap_prefix=${with.gsoap.prefix} gsoap_version=${ext.gsoap.version} mysql_prefix=${with.mysql.prefix} diff --git a/org.glite.jp.client/src/jpimporter.c b/org.glite.jp.client/src/jpimporter.c index 712f5eb..7a30ef8 100644 --- a/org.glite.jp.client/src/jpimporter.c +++ b/org.glite.jp.client/src/jpimporter.c @@ -139,6 +139,8 @@ int main(int argc, char *argv[]) char *name, pidfile[PATH_MAX] = GLITE_JPIMPORTER_PIDFILE; + glite_gsplugin_Context plugin_ctx; + name = strrchr(argv[0],'/'); if (name) name++; else name = argv[0]; @@ -239,7 +241,12 @@ int main(int argc, char *argv[]) soap = soap_new(); soap_init(soap); soap_set_namespaces(soap, jpps__namespaces); - soap_register_plugin(soap, glite_gsplugin); + + glite_gsplugin_init_context(&plugin_ctx); + if (server_key) plugin_ctx->key_filename = strdup(server_key); + if (server_cert) plugin_ctx->cert_filename = strdup(server_cert); + + soap_register_plugin_arg(soap, glite_gsplugin,plugin_ctx); if ( (reg_pid = slave(reg_importer, "reg-imp")) < 0 ) { perror("starting reg importer slave"); @@ -438,17 +445,16 @@ static int dump_importer(void) } else do { su_in.job = tab[_job].val; su_in.class_ = "urn:org.glite.jp.primary:lb"; - su_in.name = tab[_file].val; + su_in.name = NULL; su_in.commitBefore = 1000 + time(NULL); su_in.contentType = "text/lb"; dprintf(("[%s] Importing LB dump file '%s'\n", name, tab[_file].val)); if ( !debug ) syslog(LOG_INFO, "Importing LB dump file '%s'\n", msg); ret = soap_call___jpsrv__StartUpload(soap, tab[_jpps].val?:jpps, "", &su_in, &su_out); ret = check_soap_fault(soap, ret); - /* XXX: grrrrrrr! test it!!! - if ( (ret = check_soap_fault(soap, ret)) ) break; - dprintf(("[%s] Destination: %s\n\tCommit before: %s\n", su_out.destination, ctime(&su_out.commitBefore))); - */ + /* XXX: grrrrrrr! test it!!!*/ +// if ( (ret = check_soap_fault(soap, ret)) ) break; + dprintf(("[%s] Destination: %s\n\tCommit before: %s\n", name, su_out.destination, ctime(&su_out.commitBefore))); if ( (fhnd = open(tab[_file].val, O_RDONLY)) < 0 ) { dprintf(("[%s] Can't open dump file: %s\n", name, tab[_file].val)); @@ -456,8 +462,6 @@ static int dump_importer(void) ret = 1; break; } - /* XXX: grrrrrrr! remove next line!!! */ - su_out.destination = "gsiftp://nain.ics.muni.cz:5678/tmp/gsiftp-dump-tst-file"; if ( (ret = gftp_put_file(su_out.destination, fhnd)) ) break; close(fhnd); dprintf(("[%s] File sent, commiting the upload\n", name)); diff --git a/org.glite.jp.common/Makefile b/org.glite.jp.common/Makefile index 91685bd..177a143 100644 --- a/org.glite.jp.common/Makefile +++ b/org.glite.jp.common/Makefile @@ -15,7 +15,6 @@ globus_prefix=/opt/globus nothrflavour=gcc32 thrflavour=gcc32pthr expat_prefix=/opt/expat -ares_prefix=/opt/ares gsoap_prefix=/software/gsoap-2.6 CC=gcc diff --git a/org.glite.jp.common/project/build.number b/org.glite.jp.common/project/build.number index 9d9b1ea..8717663 100644 --- a/org.glite.jp.common/project/build.number +++ b/org.glite.jp.common/project/build.number @@ -1,2 +1,2 @@ -#Sat Oct 15 06:48:33 CEST 2005 +#Mon Jan 16 06:46:39 CET 2006 module.build=39 diff --git a/org.glite.jp.common/project/configure.properties.xml b/org.glite.jp.common/project/configure.properties.xml index 5f0ea37..d4e6f4f 100644 --- a/org.glite.jp.common/project/configure.properties.xml +++ b/org.glite.jp.common/project/configure.properties.xml @@ -12,6 +12,17 @@ Revision history: $Log$ + Revision 1.3.4.1 2005/11/03 17:46:52 mmulac + ares to c-ares migration + - use dynamic library of c-ares, instead of ares static lib + - ares clean up (now should be mentioned only in modules that really need it) + - patch for security.gsoap-plugin not yet in CVS (sent to interation list) + I do not know what will happen when one try to mix ares with c-ares libs + => weird things may arise! + + Revision 1.3 2004/12/01 18:45:38 zsalvet + *** empty log message *** + Revision 1.2 2004/11/22 13:36:42 dimeglio First version of this file @@ -41,7 +52,6 @@ glite_location=${with.glite.location} globus_prefix=${with.globus.prefix} expat_prefix=${with.expat.prefix} gsoap_prefix=${with.gsoap.prefix} -ares_prefix=${with.ares.prefix} thrflavour=${with.globus.thr.flavor} nothrflavour=${with.globus.nothr.flavor} cppunit=${with.cppunit.prefix} diff --git a/org.glite.jp.index/Makefile b/org.glite.jp.index/Makefile index 5278954..ab2ac6b 100644 --- a/org.glite.jp.index/Makefile +++ b/org.glite.jp.index/Makefile @@ -15,7 +15,6 @@ globus_prefix=/opt/globus nothrflavour=gcc32 thrflavour=gcc32pthr expat_prefix=/opt/expat -ares_prefix=/opt/ares gsoap_prefix=/software/gsoap-2.6 CC=gcc @@ -35,7 +34,7 @@ CPPFLAGS:=-DDEBUG -D_GNU_SOURCE DEBUG:=-W -Wall -Wno-unused-parameter -Wno-unused-function -g -O0 dotless_soap_ver:=${shell echo ${gsoap_version} | tr -d . } -GSOAPLIB:=-L${stagedir}/lib -lglite_security_gsoap_plugin_${dotless_soap_ver}_${nothrflavour} -L${ares_prefix}/lib -lares +GSOAPLIB:=-L${stagedir}/lib -lglite_security_gsoap_plugin_${dotless_soap_ver}_${nothrflavour} gsoap_bin_prefix:=${shell if [ -x ${gsoap_prefix}/bin/soapcpp2 ]; then echo ${gsoap_prefix}/bin; else echo ${gsoap_prefix}; fi } @@ -53,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 \ @@ -68,26 +67,15 @@ SRVCOMMONLIB:=-lglite_jp_server_common BONESLIB:=-lglite_lb_server_bones TRIOLIB:=-lglite_jp_trio -ifneq (${mysql_prefix},/usr) - ifeq ($(shell echo ${mysql_version} | cut -d. -f1,2),4.1) - MYSQLIB := -L${mysql_prefix}/lib/mysql -lmysqlclient - else - MYSQLIB := -L${mysql_prefix}/lib -lmysqlclient - endif -else - MYSQLIB := -lmysqlclient -endif - - default all: compile compile: ${daemon} ${example} ${daemon}: ${OBJS} - ${LINK} -o $@ -export-dynamic ${OBJS} ${BONESLIB} ${TRIOLIB} ${COMMONLIB} ${GSOAPLIB} ${GLOBUS_LIBS} ${MYSQLIB} ${SRVCOMMONLIB} + ${LINK} -o $@ -export-dynamic ${OBJS} ${BONESLIB} ${TRIOLIB} ${COMMONLIB} ${GSOAPLIB} ${GLOBUS_LIBS} ${SRVCOMMONLIB} ${example}: ${EXA_OBJS} - ${LINK} -o $@ ${EXA_OBJS} ${GSOAPLIB} ${GLOBUS_LIBS} ${COMMONLIB} ${TRIOLIB} ${MYSQLIB} ${SRVCOMMONLIB} + ${LINK} -o $@ ${EXA_OBJS} ${GSOAPLIB} ${GLOBUS_LIBS} ${COMMONLIB} ${TRIOLIB} ${SRVCOMMONLIB} jpis-db-internal: jpis-db-internal.o db_ops.o conf.o context.o ${LINK} -o $@ $+ ${COMMONLIB} ${SRVCOMMONLIB} ${GLOBUS_LIBS} @@ -104,11 +92,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 @@ -119,8 +107,8 @@ ${ps_prefix}C.c ${ps_prefix}H.h: JobProvenancePS.xh # rm -f JobProvenanceTypes.wsdl # ${gsoap_prefix}/bin/soapcpp2 -w -c -p env_ env.xh -check: - -echo nothing yet +check: + # ../test/run-test.sh doc: @@ -169,5 +157,6 @@ soap_ps_calls.o: soap_ps_calls.c jpps_H.h jpps_.nsmap soap_version.h conf.h db_o soap_ops.o: soap_ops.c jpis_H.h jpis_.nsmap soap_version.h db_ops.h ws_ps_typeref.h ws_is_typeref.h context.h ws_ps_typeref.o: ws_ps_typeref.c jpis_H.h ws_typemap.h ws_ps_typeref.h ws_is_typeref.o: ws_is_typeref.c jpis_H.h ws_typemap.h ws_is_typeref.h +comon_server.o: common_server.c common_server.h .PHONY: default all compile check doc stage dist distsrc distbin install clean diff --git a/org.glite.jp.index/config/glite-jp-index-dbsetup.sql b/org.glite.jp.index/config/glite-jp-index-dbsetup.sql index 231627a..485c04f 100644 --- a/org.glite.jp.index/config/glite-jp-index-dbsetup.sql +++ b/org.glite.jp.index/config/glite-jp-index-dbsetup.sql @@ -60,7 +60,8 @@ create table users ( #create table attr_ ( # jobid char(32) binary not null, # value varchar(255) binary not null, -# full_value mediumblob not null, +# full_value mediumblob not null, +# origin int not null, # # index (jobid), # index (value) 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/doc/client_conf.xsd b/org.glite.jp.index/doc/client_conf.xsd new file mode 100644 index 0000000..ac78900 --- /dev/null +++ b/org.glite.jp.index/doc/client_conf.xsd @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/org.glite.jp.index/doc/server_conf.xsd b/org.glite.jp.index/doc/server_conf.xsd new file mode 100644 index 0000000..16f464d --- /dev/null +++ b/org.glite.jp.index/doc/server_conf.xsd @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/org.glite.jp.index/examples/jpis-test.c b/org.glite.jp.index/examples/jpis-test.c index da04d47..b15b8ad 100644 --- a/org.glite.jp.index/examples/jpis-test.c +++ b/org.glite.jp.index/examples/jpis-test.c @@ -21,6 +21,7 @@ /* insert simulating FeedIndex call */ #define INSERT "insert into feeds value ('93', '12345', '8', '0' , 'http://localhost:8901', '2005-10-14 10:48:27', 'COND2');" +#define DELETE "delete from feeds where feedid = '12345';" static int check_fault(struct soap *soap,int err); @@ -28,7 +29,9 @@ static int check_fault(struct soap *soap,int err); int main(int argc,char *argv[]) { - char *server = "http://localhost:8902"; + char *default_server = NULL; +// char *default_server = "http://localhost:8902"; + char server[512]; struct soap *soap = soap_new(); soap_init(soap); @@ -46,6 +49,10 @@ int main(int argc,char *argv[]) glite_jp_init_context(&ctx); glite_jp_get_conf(0, NULL, NULL, &conf); + if (default_server) strcpy(server, default_server); + else snprintf(server, sizeof(server), "http://localhost:%s", conf->port ? conf->port : GLITE_JPIS_DEFAULT_PORT_STR); + printf("JP index server: %s\n", server); + glite_jpis_init_context(&isctx, ctx, conf); if (glite_jpis_init_db(isctx) != 0) { fprintf(stderr, "Connect DB failed: %s (%s)\n", @@ -53,8 +60,8 @@ int main(int argc,char *argv[]) goto end; } - if (glite_jp_db_execstmt(ctx, - INSERT, &stmt) < 0) goto end; + if (glite_jp_db_execstmt(ctx, DELETE, &stmt) < 0) goto end; + if (glite_jp_db_execstmt(ctx, INSERT, &stmt) < 0) goto end; end: glite_jpis_free_context(isctx); glite_jp_free_context(ctx); @@ -78,13 +85,26 @@ int main(int argc,char *argv[]) //in.feedId = soap_strdup(soap, str2md5("http://localhost:8901")); in.feedId = soap_strdup(soap, "12345"); in.feedDone = false_; - in.__sizejobAttributes = 1; + in.__sizejobAttributes = 2; in.jobAttributes = soap_malloc(soap, in.__sizejobAttributes * sizeof(*(in.jobAttributes))); { rec = soap_malloc(soap, sizeof(*rec)); + memset(rec, 0, sizeof(*rec)); + rec->jobid = soap_strdup(soap, "https://localhost:7846/pokus1"); rec->jobid = soap_strdup(soap, "https://localhost:7846/pokus"); - rec->owner = soap_strdup(soap, "OwnerName"); + { + gss_cred_id_t cred = GSS_C_NO_CREDENTIAL; + edg_wll_GssStatus gss_code; + char *subject = NULL; + + if ( edg_wll_gss_acquire_cred_gsi(NULL, NULL, &cred, &subject, &gss_code) ) { + printf("Cannot obtain credentials - exiting.\n"); + return EINVAL; + } + rec->owner = soap_strdup(soap, subject); + free(subject); + } rec->__sizeprimaryStorage = 0; rec->primaryStorage = NULL; rec->__sizeattributes = 2; @@ -110,6 +130,34 @@ int main(int argc,char *argv[]) } in.jobAttributes[0] = rec; + { + rec = soap_malloc(soap, sizeof(*rec)); + memset(rec, 0, sizeof(*rec)); + rec->jobid = soap_strdup(soap, "https://localhost:7846/pokus2"); + rec->owner = soap_strdup(soap, "OwnerName"); + rec->__sizeprimaryStorage = 0; + rec->primaryStorage = NULL; + rec->__sizeattributes = 2; + rec->attributes = soap_malloc(soap, + rec->__sizeattributes * sizeof(*(rec->attributes))); + rec->attributes[0] = soap_malloc(soap, sizeof(*(rec->attributes[0]))); + rec->attributes[0]->name = soap_strdup(soap, "http://egee.cesnet.cz/en/Schema/LB/Attributes:user"); + rec->attributes[0]->value = soap_malloc(soap, sizeof(*(rec->attributes[0]->value))); + rec->attributes[0]->value->string = soap_strdup(soap, "CertSubj"); + rec->attributes[0]->value->blob = NULL; + rec->attributes[0]->timestamp = 333; + rec->attributes[0]->origin = jptype__attrOrig__USER; + rec->attributes[0]->originDetail = NULL; + rec->attributes[1] = soap_malloc(soap, sizeof(*(rec->attributes[1]))); + rec->attributes[1]->name = soap_strdup(soap, "http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus"); + rec->attributes[1]->value = soap_malloc(soap, sizeof(*(rec->attributes[0]->value))); + rec->attributes[1]->value->string = soap_strdup(soap, "Ready"); + rec->attributes[1]->value->blob = NULL; + rec->attributes[1]->timestamp = 333; + rec->attributes[1]->origin = jptype__attrOrig__SYSTEM; + rec->attributes[1]->originDetail = NULL; + } + in.jobAttributes[1] = rec; check_fault(soap, diff --git a/org.glite.jp.index/project/configure.properties.xml b/org.glite.jp.index/project/configure.properties.xml index 5cc9371..5406d55 100644 --- a/org.glite.jp.index/project/configure.properties.xml +++ b/org.glite.jp.index/project/configure.properties.xml @@ -12,6 +12,18 @@ Revision history: $Log$ + Revision 1.5.2.1 2005/11/03 17:46:53 mmulac + ares to c-ares migration + - use dynamic library of c-ares, instead of ares static lib + - ares clean up (now should be mentioned only in modules that really need it) + - patch for security.gsoap-plugin not yet in CVS (sent to interation list) + I do not know what will happen when one try to mix ares with c-ares libs + => weird things may arise! + + Revision 1.5 2005/10/11 20:45:45 akrenek + - detect gsoap stuff + - install what should be installed + Revision 1.4 2005/08/12 10:56:25 mmulac void IS server - seems compiling @@ -50,7 +62,6 @@ globus_prefix=${with.globus.prefix} expat_prefix=${with.expat.prefix} gsoap_prefix=${with.gsoap.prefix} gsoap_version=${ext.gsoap.version} -ares_prefix=${with.ares.prefix} mysql_prefix=${with.mysql.prefix} mysql_version=${ext.mysql.version} thrflavour=${with.globus.thr.flavor} diff --git a/org.glite.jp.index/src/bones_server.c b/org.glite.jp.index/src/bones_server.c index d23118d..b71b4cd 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 @@ -252,6 +254,8 @@ int newconn(int conn,struct timeval *to,void *data) soap_init2(soap,SOAP_IO_KEEPALIVE,SOAP_IO_KEEPALIVE); + soap_set_omode(soap, SOAP_IO_BUFFER); // set buffered response + // buffer set to SOAP_BUFLEN (default = 8k) soap_set_namespaces(soap,jpis__namespaces); soap->user = (void *) private; diff --git a/org.glite.jp.index/src/common_server.c b/org.glite.jp.index/src/common_server.c new file mode 100644 index 0000000..63052b4 --- /dev/null +++ b/org.glite.jp.index/src/common_server.c @@ -0,0 +1,72 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* TODO: belongs to server-bones */ + +int glite_jpis_daemonize(const char *servername, const char *custom_pidfile, const char *custom_logfile) { + int lfd, opid; + FILE *fpid; + pid_t master; + char *pidfile, *logfile; + + if (!custom_logfile) { + asprintf(&logfile, "%s/%s.log", geteuid() == 0 ? "/var/log" : getenv("HOME"), servername); + } else { + logfile = NULL; + } + lfd = open(logfile ? logfile : custom_logfile,O_CREAT|O_TRUNC|O_WRONLY,0600); + if (lfd < 0) { + fprintf(stderr,"%s: %s: %s\n",servername,logfile,strerror(errno)); + free(logfile); + return 0; + } +// printf("logfile: %s\n", logfile ? logfile : custom_logfile); + free(logfile); + + if (daemon(0,1) == -1) { + perror("can't daemonize"); + return 0; + } + dup2(lfd,1); + dup2(lfd,2); + + if (!custom_pidfile) { + asprintf(&pidfile, "%s/%s.pid", geteuid() == 0 ? "/var/run" : getenv("HOME"), servername); + } else { + pidfile = NULL; + } +// printf("pidfile: %s\n", pidfile ? pidfile : custom_pidfile); + setpgrp(); /* needs for signalling */ + master = getpid(); + fpid = fopen(pidfile ? pidfile : custom_pidfile,"r"); + if ( fpid ) + { + opid = -1; + + if ( fscanf(fpid,"%d",&opid) == 1 ) + { + if ( !kill(opid,0) ) + { + fprintf(stderr,"%s: another instance running, pid = %d\n",servername,opid); + return 0; + } + else if (errno != ESRCH) { perror("kill()"); return 0; } + } + fclose(fpid); + } else if (errno != ENOENT) { perror(pidfile ? pidfile : custom_pidfile); free(pidfile); return 0; } + + fpid = fopen(pidfile ? pidfile : custom_pidfile, "w"); + if (!fpid) { perror(pidfile ? pidfile : custom_pidfile); free(pidfile); return 0; } + free(pidfile); + fprintf(fpid, "%d", getpid()); + fclose(fpid); + + return 1; +} diff --git a/org.glite.jp.index/src/common_server.h b/org.glite.jp.index/src/common_server.h new file mode 100644 index 0000000..45db839 --- /dev/null +++ b/org.glite.jp.index/src/common_server.h @@ -0,0 +1,6 @@ +#ifndef GLITE_JPIS_COMMON_SERVER_H +#define GLITE_JPIS_COMMON_SERVER_H + +int glite_jpis_daemonize(const char *servername, const char *custom_pidfile, const char *custom_logfile); + +#endif diff --git a/org.glite.jp.index/src/conf.c b/org.glite.jp.index/src/conf.c index dc67a7d..45b1803 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,11 @@ 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->no_auth = 0; // check authorization + 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) @@ -34,7 +41,7 @@ int glite_jp_get_conf(int argc, char **argv, char *config_file, glite_jp_is_conf conf->attrs = calloc(19, sizeof(*conf->attrs)); conf->attrs[0] = strdup("http://egee.cesnet.cz/en/Schema/JP/System:owner"); conf->attrs[1] = strdup("http://egee.cesnet.cz/en/Schema/JP/System:jobId"); - conf->attrs[2] = strdup("http://egee.cesnet.cz/en/Schema/JP/System::regtime"); + conf->attrs[2] = strdup("http://egee.cesnet.cz/en/Schema/JP/System:regtime"); conf->attrs[3] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:user"); conf->attrs[4] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:aTag"); conf->attrs[5] = strdup("http://egee.cesnet.cz/en/Schema/LB/Attributes:eNodes"); @@ -65,7 +72,7 @@ int glite_jp_get_conf(int argc, char **argv, char *config_file, glite_jp_is_conf // ps = "http://umbar.ics.muni.cz:8901"; if (!ps && ((ps = getenv("GLITE_JPIS_PS")) == NULL)) { - printf("No JP PrimaryStrorage server specified in $GLITE_JPIS_PS, default feeds skipped.\n"); + printf("No JP PrimaryStrorage server specified in $GLITE_JPIS_PS, default feeds skipped. (not fatal)\n"); conf->feeds = calloc(1, sizeof(*(conf->feeds))); *configuration = conf; return 0; @@ -121,3 +128,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..5a4afe0 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,12 @@ typedef struct _glite_jp_is_conf { glite_jp_is_feed **feeds; // null terminated list of feeds - char *cs, *port; + int debug; + int no_auth; // set if you do not want authorization + char *cs, // database contact string + *port, // server port + *pidfile, + *logfile; } glite_jp_is_conf; @@ -38,4 +43,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..a965906 100644 --- a/org.glite.jp.index/src/db_ops.c +++ b/org.glite.jp.index/src/db_ops.c @@ -25,14 +25,16 @@ jobid CHAR(32) BINARY NOT NULL,\n\ value %s BINARY NOT NULL,\n\ full_value %s NOT NULL,\n\ + origin INT NOT NULL,\n\ \n\ INDEX (jobid),\n\ INDEX (value)\n\ );" -#define SQLCMD_INSERT_ATTRVAL "INSERT INTO " TABLE_PREFIX_DATA "%s (jobid, value, full_value) VALUES (\n\ +#define SQLCMD_INSERT_ATTRVAL "INSERT INTO " TABLE_PREFIX_DATA "%s (jobid, value, full_value, origin) VALUES (\n\ '%s',\n\ '%s',\n\ - '%s'\n\ + '%s',\n\ + '%d'\n\ )" #define INDEX_LENGTH 255 @@ -422,10 +424,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, @@ -572,17 +575,19 @@ 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) { char *sql, *table, *value, *full_value, *md5_jobid; + long int origin; table = glite_jpis_attr_name2id(av->name); value = glite_jp_attrval_to_db_index(ctx->jpctx, av, INDEX_LENGTH); full_value = glite_jp_attrval_to_db_full(ctx->jpctx, av); md5_jobid = str2md5(jobid); - asprintf(&sql, SQLCMD_INSERT_ATTRVAL, table, md5_jobid, value, full_value); + origin = av->origin; + asprintf(&sql, SQLCMD_INSERT_ATTRVAL, table, md5_jobid, value, full_value, origin); free(md5_jobid); 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 +598,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("owner '%s' found\n", owner); 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..baa60b2 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 (jobAttrs->remove) assert(*(jobAttrs->remove) == false_); - 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,15 +111,19 @@ 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; GLITE_JPIS_PARAM(ctx->param_feedid, ctx->param_feedid_len, feedid); if ((ret = glite_jp_db_execute(ctx->select_info_feed_stmt)) != 1) { - fprintf(stderr, "can't get info about '%s', returned %d records: %s (%s)\n", feedid, ret, jpctx->error->desc, jpctx->error->source); + fprintf(stderr, "can't get info about feed '%s', returned %d records", feedid, ret); + if (jpctx->error) fprintf(stderr, ": %s (%s)\n", jpctx->error->desc, jpctx->error->source); + else fprintf(stderr, "\n"); goto fail; } - // update status, if needed (only oring) + ps = strdup(ctx->param_ps); + // update status, if needed (only orig) status = ctx->param_state; done = jpelem__UpdateJobs->feedDone ? GLITE_JP_IS_STATE_DONE : 0; if ((done != (status & GLITE_JP_IS_STATE_DONE)) && done) { @@ -132,16 +136,20 @@ 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); + if (ctx->jpctx->error) { // TODO: bubble up - err = glite_jp_error_chain(ctx->jpctx); - fprintf(stderr, "%s:%s\n", __FUNCTION__, err); - free(err); + err = glite_jp_error_chain(ctx->jpctx); + fprintf(stderr, "%s:%s\n", __FUNCTION__, err); + free(err); + } return SOAP_FAULT; } @@ -224,6 +232,7 @@ static int get_op(const enum jptype__queryOp in, char **out) return(0); } +/* get all jobids matching the query conditions */ static int get_jobids(struct soap *soap, glite_jpis_context_t ctx, struct _jpelem__QueryJobs *in, char ***jobids, char *** ps_list) { char *qa = NULL, *qb = NULL, *qop = NULL, *attr_md5, @@ -282,7 +291,12 @@ static int get_jobids(struct soap *soap, glite_jpis_context_t ctx, struct _jpele free(qa); qa = qb; qb = NULL; } - trio_asprintf(&query, "SELECT dg_jobid,ps FROM jobs%s WHERE %s;", qa, qwhere); + if (ctx->conf->no_auth) { + trio_asprintf(&query, "SELECT DISTINCT dg_jobid,ps FROM jobs%s WHERE %s;", qa, qwhere); + } + else { + trio_asprintf(&query, "SELECT DISTINCT dg_jobid,ps FROM jobs,users%s WHERE (jobs.ownerid = users.userid AND users.cert_subj='%s') AND %s;", qa, ctx->jpctx->peer, qwhere); + } printf("Incomming QUERY:\n %s\n", query); free(qwhere); free(qa); @@ -462,16 +476,19 @@ SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__QueryJobs( puts(__FUNCTION__); memset(out, 0, sizeof(*out)); - + + /* test whether there is any indexed aatribudet in the condition */ if ( checkIndexedConditions(ctx, in) ) { fprintf(stderr, "No indexed attribute in query\n"); return SOAP_ERR; } + /* get all jobids matching the conditions */ if ( get_jobids(soap, ctx, in, &jobids, &ps_list) ) { return SOAP_ERR; } + /* get all requested attributes for matching jobids */ for (i=0; (jobids && jobids[i]); i++); size = i; jr = soap_malloc(soap, size * sizeof(*jr)); @@ -480,7 +497,7 @@ SOAP_FMAC5 int SOAP_FMAC6 __jpsrv__QueryJobs( return SOAP_ERR; } // XXX: in prototype we return only first value of PS URL - // in future database shoul contain one more table with URLs + // in future database should contain one more table with URLs jr[i]->__sizeprimaryStorage = 1; jr[i]->primaryStorage = soap_malloc(soap, sizeof(*(jr[i]->primaryStorage))); jr[i]->primaryStorage[0] = soap_strdup(soap, ps_list[i]); diff --git a/org.glite.jp.index/test/run-test.sh b/org.glite.jp.index/test/run-test.sh new file mode 100644 index 0000000..67bd2c4 --- /dev/null +++ b/org.glite.jp.index/test/run-test.sh @@ -0,0 +1,80 @@ +#! /bin/bash + +# +# test script for the index server +# +# requires running mysql +# +# configuration: +# GLITE_JPIS_TEST_PIDFILE.........pidfile (default `pwd`/glite-jp-indexd.pid) +# GLITE_JPIS_TEST_LOGFILE.........logfile (default `pwd`/glite-jp-indexd.log) +# GLITE_JPIS_TEST_PORT............index server port +# GLITE_JPIS_TEST_DB..............connection string +# (default jpis/@localhost:jpis1test, +# autocreating the database when empty) +# GLITE_JPIS_TEST_ROOT_USER.......root user (default empty) +# GLITE_JPIS_TEST_ROOT_PASSWORD...root password (default empty) +# + +# get the configuration +GLITE_LOCATION=${GLITE_LOCATION:-"/opt/glite"} +[ -f /etc/glite.conf ] && . /etc/glite.conf +[ -f $HOME/.glite.conf ] && . $HOME/.glite.conf +[ -f $GLITE_LOCATION/etc/jpis.conf ] && . $GLITE_LOCATION/etc/jpis.conf + +# handle the configuration +ARGS="-u ${GLITE_JPIS_ROOT_USER:-root}" +[ -z "$GLITE_JPIS_ROOT_PASSWORD" ] || ARGS="-p ${GLITE_JPIS_ROOT_PASSWORD} $ARGS" +GLITE_JPIS_TEST_PORT=${GLITE_JPIS_TEST_PORT:-"10000"} +GLITE_JPIS_TEST_PIDFILE=${GLITE_JPIS_TEST_PIDFILE:-"`pwd`/glite-jp-indexd.pid"} +GLITE_JPIS_TEST_LOGFILE=${GLITE_JPIS_TEST_LOGFILE:-"`pwd`/glite-jp-indexd.log"} + +# create database when needed +if [ -z "$GLITE_JPIS_TEST_DB" ]; then + GLITE_JPIS_TEST_DB="jpis/@localhost:jpis1test" + mysqladmin -f $ARGS drop jpis1test > /dev/null 2>&1 + mysqladmin -f $ARGS create jpis1test && \ + mysql $ARGS -e 'GRANT ALL on jpis1test.* to jpis@localhost' && \ + mysql -u jpis jpis1test < ../config/glite-jp-index-dbsetup.sql || exit 1 + db_created="1" +fi + +# run index server +GLITE_JPIS_PIDFILE=${GLITE_JPIS_TEST_PIDFILE} \ +GLITE_JPIS_LOGFILE=${GLITE_JPIS_TEST_LOGFILE} \ +GLITE_JPIS_DEBUG="0" \ +GLITE_JPIS_DB=$GLITE_JPIS_TEST_DB \ +GLITE_JPIS_PORT=$GLITE_JPIS_TEST_PORT \ + ./glite-jp-indexd +if [ x"$?" != x"0" ]; then + echo FAILED + [ -z "$db_created" ] || mysqladmin -f $ARGS drop jpis1test + exit 1 +fi +if [ ! -s "./glite-jp-indexd.pid" ]; then + echo "Can't startup index server." + [ -z "$db_created" ] || mysqladmin -f $ARGS drop jpis1test + exit 1 +fi + +# wait for index server +ret=1 +while [ x"$ret" != x"0" ]; do + LC_ALL=C netstat -tap 2>/dev/null | grep "\<$GLITE_JPIS_TEST_PORT\>" > /dev/null + ret=$? + LC_ALL=C sleep 0.1 +done +# run the example +numok=`GLITE_JPIS_DB=$GLITE_JPIS_TEST_DB \ +GLITE_JPIS_PORT=$GLITE_JPIS_TEST_PORT \ + ./glite-jpis-test | grep "OK" | wc -l` + +# kill the index server +kill `cat ${GLITE_JPIS_TEST_PIDFILE}` + +# drop databaze when created +[ -z "$db_created" ] || mysqladmin -f $ARGS drop jpis1test >/dev/null + +if [ "$numok" -eq "2" ]; then + echo OK +fi diff --git a/org.glite.jp.primary/Makefile b/org.glite.jp.primary/Makefile index dd6cdde..10a5328 100644 --- a/org.glite.jp.primary/Makefile +++ b/org.glite.jp.primary/Makefile @@ -15,7 +15,6 @@ globus_prefix=/opt/globus nothrflavour=gcc32 thrflavour=gcc32pthr expat_prefix=/opt/expat -ares_prefix=/opt/ares gsoap_prefix=/software/gsoap-2.6 CC=gcc @@ -75,10 +74,10 @@ GSOAPLIB:=-L${stagedir}/lib -lglite_security_gsoap_plugin_${dotless_soap_ver}_${ TRIOLIB:=-lglite_jp_trio ifneq (${mysql_prefix},/usr) - ifeq ($(shell echo ${mysql_version} | cut -d. -f1,2),4.1) - MYSQLIB := -L${mysql_prefix}/lib/mysql -lmysqlclient + ifeq ($(shell test -f ${mysql_prefix}/lib/libmysqlclient.a -o -f ${mysql_prefix}/lib/libmysqlclient.so && echo ok),ok) + MYSQLIB := -L${mysql_prefix}/lib -lmysqlclient -lz else - MYSQLIB := -L${mysql_prefix}/lib -lmysqlclient + MYSQLIB := -L${mysql_prefix}/lib/mysql -L${mysql_prefix}/lib -lmysqlclient -lz endif else MYSQLIB := -lmysqlclient @@ -166,6 +165,9 @@ install: ${INSTALL} -m 755 $$plugin ${PREFIX}/lib; \ done ${INSTALL} -m 755 ${top_srcdir}/config/startup ${PREFIX}/etc/init.d/glite-jp-primary + ${INSTALL} -m 755 ${top_srcdir}/config/glite-jp-primary-dbsetup.sql ${PREFIX}/etc + ${INSTALL} -m 755 ${top_srcdir}/config/glite-jp-primary-dbsetup.sh ${PREFIX}/etc + ${INSTALL} -m 644 ${top_srcdir}/examples/sample_job ${PREFIX}/examples/glite-jp-primary-sample_job.lb clean: diff --git a/org.glite.jp.primary/config/glite-jp-primary-dbsetup.sh b/org.glite.jp.primary/config/glite-jp-primary-dbsetup.sh new file mode 100644 index 0000000..aed8e1a --- /dev/null +++ b/org.glite.jp.primary/config/glite-jp-primary-dbsetup.sh @@ -0,0 +1,14 @@ +#! /bin/sh + +# +# Shell example of preparing the database for JP Index Server +# + +# database +mysqladmin -u root -p create jpps + +# user +mysql -u root -p -e 'GRANT ALL on jpps.* to jpps@localhost' + +# tables +mysql -u jpps jpps < `dirname $0`/glite-jp-primary-dbsetup.sql diff --git a/org.glite.jp.primary/config/startup b/org.glite.jp.primary/config/startup index b3154ef..39967a7 100644 --- a/org.glite.jp.primary/config/startup +++ b/org.glite.jp.primary/config/startup @@ -68,6 +68,7 @@ start() echo -n Starting glite-jp-primarystoraged ... su - $GLITE_USER -c " $GLITE_LOCATION/bin/glite-jp-primarystoraged \ + $GLITE_JP_DEBUG \ -P $GLITE_LOCATION/lib/glite-jp-tags.so -P $GLITE_LOCATION/lib/glite_lb_plugin.so \ $creds -a '$GLITE_JP_PRIMARY_PEERS' \ -i '$pidfile' -p $GLITE_JP_PRIMARY_PORT $GLITE_JP_PRIMARY_SPECIAL \ diff --git a/org.glite.jp.primary/doc/README.install b/org.glite.jp.primary/doc/README.install new file mode 100644 index 0000000..17d0d27 --- /dev/null +++ b/org.glite.jp.primary/doc/README.install @@ -0,0 +1,59 @@ +0. install glite-jp-primary package + +1. create MySQL database of the service, preferably using + ${GLITE_LOCATION}/etc/glite-jp-primary-dbsetup.sh + (the script prompts two times for MySQL root password) + +2. create a directory where JPPS files will be stored and configure + gridftp server so that this directory is accessible via gridftp + +3. create the configuration file $GLITE_LOCATION/etc/jp.conf, it should + contain /bin/sh syntax assignment to the following variables (or they + have to be set in the environment of the startup script by other means: + + GLITE_USER the unix user running the service + + GLOBUS_LOCATION where is Globus installed + + GLITE_JP_PRIMARY_FTP_PORT + port for the ftp JPPS interface (bulk file transfers) + + GLITE_JP_PRIMARY_INTERNAL + directory where the JPPS files are stored (local path) + + GLITE_JP_PRIMARY_EXTERNAL + URL prefix which is mapped by gridftp to the directory, + eg. gsiftp://this.host.name:$GLITE_JP_PRIMARY_FTP_PORT/some/directory + + + GLITE_JP_PRIMARY_PEERS + file with list (one per line) of X509 certificate subjects of "trusted peers", i.e. L&B servers which may upload data to this JPPS + + +4. start the service with + $GLITE_LOCATION/etc/init.d/glite-jp-primary start + + +5. This step taints the database with testing data. Don't do it if it is an issue. +It is not necessary for the service operation, it's just checking its basic functionality. + +$ JOB=https://scientific.civ.zcu.cz:9200/1Yjk3Wlaspl07y45iX8Tng +$ TEST=$GLITE_LOCATION/examples/glite-jp-primary-test +$ export X5O9_USER_PROXY=/some/proxy.pem # must be among $GLITE_JP_PRIMARY_PEERS + +$ $TEST registerjob $JOB '/the/job/owner/x509/cert' + +$ $TEST startupload "urn:org.glite.jp.primary:lb" 1 text/plain + responds with destination gsiftp url + +$ globus-url-copy file:///$GLITE_LOCATION/examples/glite-jp-primary-sample_job.lb $DESTINATION_URL + +$ $TEST commitupload $DESTINATION_URL + +$ $TEST getjobattr $JOB http://egee.cesnet.cz/en/Schema/LB/Attributes:finalStatus + +The command should output: + + Waiting FILE Mon Oct 10 23:48:47 2005 + +-- diff --git a/org.glite.jp.primary/examples/README.test b/org.glite.jp.primary/examples/README.test index 8997ff7..9150f3c 100644 --- a/org.glite.jp.primary/examples/README.test +++ b/org.glite.jp.primary/examples/README.test @@ -41,8 +41,8 @@ Returns: Check system attributes known from job registration: -$ ./jpps-test GetJobAttr JOBID http://egee.cesnet.cz/en/WSDL/jp-system:owner -$ ./jpps-test GetJobAttr JOBID http://egee.cesnet.cz/en/WSDL/jp-system:regtime +$ ./jpps-test GetJobAttr JOBID http://egee.cesnet.cz/en/Schema/JP/System:owner +$ ./jpps-test GetJobAttr JOBID http://egee.cesnet.cz/en/Schema/JP/System:regtime Record JP tag: diff --git a/org.glite.jp.primary/examples/sample_job b/org.glite.jp.primary/examples/sample_job new file mode 100644 index 0000000..f9b515f --- /dev/null +++ b/org.glite.jp.primary/examples/sample_job @@ -0,0 +1,8 @@ +DG.ARRIVED=20051010204845.000000 DATE=20051010204845.409455 HOST="scientific.civ.zcu.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="UserInterface" DG.SRC_INSTANCE="" DG.EVNT="RegJob" DG.JOBID="https://scientific.civ.zcu.cz:9200/1Yjk3Wlaspl07y45iX8Tng" DG.SEQCODE="UI=000001:NS=0000000000:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/O=CESNET/O=Masaryk University/CN=Ales Krenek" DG.REGJOB.JDL="blabla" DG.REGJOB.NS="NNNSSSS" DG.REGJOB.PARENT="" DG.REGJOB.JOBTYPE="SIMPLE" DG.REGJOB.NSUBJOBS="0" DG.REGJOB.SEED="uLU0BArrdV98O41PLThJ5Q" +DG.ARRIVED=20051010204847.000000 DATE=20051010204847.451986 HOST="scientific.civ.zcu.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="" DG.EVNT="DeQueued" DG.JOBID="https://scientific.civ.zcu.cz:9200/1Yjk3Wlaspl07y45iX8Tng" DG.SEQCODE="UI=000002:NS=0000000004:WM=000001:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/O=CESNET/O=Masaryk University/CN=Ales Krenek" DG.DEQUEUED.QUEUE="queue name" DG.DEQUEUED.LOCAL_JOBID="new jobId assigned by the receiving component" +DG.ARRIVED=20051010204847.000000 DATE=20051010204847.485702 HOST="scientific.civ.zcu.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="" DG.EVNT="HelperCall" DG.JOBID="https://scientific.civ.zcu.cz:9200/1Yjk3Wlaspl07y45iX8Tng" DG.SEQCODE="UI=000002:NS=0000000004:WM=000003:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/O=CESNET/O=Masaryk University/CN=Ales Krenek" DG.HELPERCALL.HELPER_NAME="name of the called component" DG.HELPERCALL.HELPER_PARAMS="parameters of the call" DG.HELPERCALL.SRC_ROLE="CALLING" +DG.ARRIVED=20051010204847.000000 DATE=20051010204847.520663 HOST="scientific.civ.zcu.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="" DG.EVNT="Match" DG.JOBID="https://scientific.civ.zcu.cz:9200/1Yjk3Wlaspl07y45iX8Tng" DG.SEQCODE="UI=000002:NS=0000000004:WM=000005:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/O=CESNET/O=Masaryk University/CN=Ales Krenek" DG.MATCH.DEST_ID="destination CE/queue" +DG.ARRIVED=20051010204847.000000 DATE=20051010204847.552015 HOST="scientific.civ.zcu.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="" DG.EVNT="HelperReturn" DG.JOBID="https://scientific.civ.zcu.cz:9200/1Yjk3Wlaspl07y45iX8Tng" DG.SEQCODE="UI=000002:NS=0000000004:WM=000007:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/O=CESNET/O=Masaryk University/CN=Ales Krenek" DG.HELPERRETURN.HELPER_NAME="name of the called component" DG.HELPERRETURN.RETVAL="returned data" DG.HELPERRETURN.SRC_ROLE="CALLING" +DG.ARRIVED=20051010204847.000000 DATE=20051010204847.584267 HOST="scientific.civ.zcu.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="WorkloadManager" DG.SRC_INSTANCE="" DG.EVNT="EnQueued" DG.JOBID="https://scientific.civ.zcu.cz:9200/1Yjk3Wlaspl07y45iX8Tng" DG.SEQCODE="UI=000002:NS=0000000004:WM=000009:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/O=CESNET/O=Masaryk University/CN=Ales Krenek" DG.ENQUEUED.QUEUE="destination queue" DG.ENQUEUED.JOB="job description in receiver language" DG.ENQUEUED.RESULT="OK" DG.ENQUEUED.REASON="detailed description of transfer" +DG.ARRIVED=20051010204847.000000 DATE=20051010204847.381506 HOST="scientific.civ.zcu.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="" DG.EVNT="Accepted" DG.JOBID="https://scientific.civ.zcu.cz:9200/1Yjk3Wlaspl07y45iX8Tng" DG.SEQCODE="UI=000002:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/O=CESNET/O=Masaryk University/CN=Ales Krenek" DG.ACCEPTED.FROM="UserInterface" DG.ACCEPTED.FROM_HOST="sending component hostname" DG.ACCEPTED.FROM_INSTANCE="sending component instance" DG.ACCEPTED.LOCAL_JOBID="new jobId (Condor Globus ...)" +DG.ARRIVED=20051010204847.000000 DATE=20051010204847.409422 HOST="scientific.civ.zcu.cz" PROG=edg-wms LVL=SYSTEM DG.PRIORITY=0 DG.SOURCE="NetworkServer" DG.SRC_INSTANCE="" DG.EVNT="EnQueued" DG.JOBID="https://scientific.civ.zcu.cz:9200/1Yjk3Wlaspl07y45iX8Tng" DG.SEQCODE="UI=000002:NS=0000000003:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000" DG.USER="/O=CESNET/O=Masaryk University/CN=Ales Krenek" DG.ENQUEUED.QUEUE="destination queue" DG.ENQUEUED.JOB="job description in receiver language" DG.ENQUEUED.RESULT="OK" DG.ENQUEUED.REASON="detailed description of transfer" diff --git a/org.glite.jp.primary/project/configure.properties.xml b/org.glite.jp.primary/project/configure.properties.xml index 399665e..be55b62 100644 --- a/org.glite.jp.primary/project/configure.properties.xml +++ b/org.glite.jp.primary/project/configure.properties.xml @@ -12,6 +12,18 @@ Revision history: $Log$ + Revision 1.5.2.1 2005/11/03 17:46:53 mmulac + ares to c-ares migration + - use dynamic library of c-ares, instead of ares static lib + - ares clean up (now should be mentioned only in modules that really need it) + - patch for security.gsoap-plugin not yet in CVS (sent to interation list) + I do not know what will happen when one try to mix ares with c-ares libs + => weird things may arise! + + Revision 1.5 2005/10/11 20:49:27 akrenek + - detect gsoap + - use flavoured gsoap plugin + Revision 1.4 2005/06/03 11:56:49 akrenek make it build with the new ftp backend @@ -47,7 +59,6 @@ version=${module.version} glite_location=${with.glite.location} globus_prefix=${with.globus.prefix} expat_prefix=${with.expat.prefix} -ares_prefix=${with.ares.prefix} gsoap_prefix=${with.gsoap.prefix} gsoap_version=${ext.gsoap.version} mysql_prefix=${with.mysql.prefix} diff --git a/org.glite.jp.primary/src/feed.c b/org.glite.jp.primary/src/feed.c index 845453c..7220d4b 100644 --- a/org.glite.jp.primary/src/feed.c +++ b/org.glite.jp.primary/src/feed.c @@ -74,14 +74,20 @@ int full_feed( const char *job, glite_jp_attrval_t **attrs) { - int i,ret; - char **ma; - - for (i=0; feed->attrs[i]; i++); - ma = malloc((i+2) * sizeof *ma); - ma[0] = GLITE_JP_ATTR_OWNER; - memcpy(ma+1,feed->attrs,(i+1) * sizeof *ma); - ret = glite_jpps_get_attrs(ctx,job,ma,i+1,attrs); + int i,ret,no_owner = 1; + char **ma = NULL; + + for (i=0; feed->attrs[i]; i++) + if (!strcmp(feed->attrs[i],GLITE_JP_ATTR_OWNER)) no_owner = 0; + + if (no_owner) { + ma = malloc((i+2) * sizeof *ma); + ma[0] = GLITE_JP_ATTR_OWNER; + memcpy(ma+1,feed->attrs,(i+1) * sizeof *ma); + } + ret = glite_jpps_get_attrs(ctx,job, + no_owner ? ma : feed->attrs, + i+no_owner,attrs); free(ma); return ret; } @@ -99,7 +105,7 @@ static int match_feed( const glite_jp_attrval_t attrs[] ) { - int i,fed; + int i,fed,ret = 0; int qi[QUERY_MAX]; char *owner = NULL; glite_jp_attrval_t meta[QUERY_MAX+1]; @@ -140,23 +146,27 @@ static int match_feed( j=0; for (i=0; feed->qry[i].attr; i++) if (!qi[i]) { assert(jqry[i].attr; + meta[j].name = strdup(feed->qry[i].attr); qi2[j] = i; j++; } if (glite_jppsbe_get_job_metadata(ctx,job,meta)) { glite_jp_error_t err; + memset(&err,0,sizeof err); err.code = EIO; err.source = __FUNCTION__; err.desc = "complete query"; - return glite_jp_stack_error(ctx,&err); + ret = glite_jp_stack_error(ctx,&err); + goto cleanup; } for (i=0; meta[i].name; i++) { - if (!check_qry_item(ctx,feed->qry+qi2[i],meta+i)) - return 0; + if (!check_qry_item(ctx,feed->qry+qi2[i],meta+i)) { + ret = 0; + goto cleanup; + } if (!strcmp(meta[i].name,GLITE_JP_ATTR_OWNER)) owner = meta[i].value; } } @@ -181,8 +191,10 @@ static int match_feed( } glite_jpps_single_feed(ctx,feed->id,0,feed->destination,job,owner,attrs); } + +cleanup: for (i=0; meta[i].name; i++) glite_jp_attrval_free(meta+i,0); - return 0; + return ret; } /* TODO: overit, ze do dalsich atributu se leze az kdyz matchuji metadata diff --git a/org.glite.jp.primary/src/is_client.c b/org.glite.jp.primary/src/is_client.c index d2d3f0d..5a0159b 100644 --- a/org.glite.jp.primary/src/is_client.c +++ b/org.glite.jp.primary/src/is_client.c @@ -108,9 +108,15 @@ int glite_jpps_single_feed( err.code = EIO; err.source = __FUNCTION__; err.desc = buf; - snprintf(buf,sizeof buf,"%s %s\n", + memset(buf, 0, sizeof(buf)); + if (ctx->other_soap->fault) { + snprintf(buf,sizeof buf,"%s %s\n", ctx->other_soap->fault->faultcode, ctx->other_soap->fault->faultstring); + } + else { + sprintf(buf,"No detailed error description (JP IS not running?)\n"); + } buf[999] = 0; glite_jp_stack_error(ctx,&err); } diff --git a/org.glite.jp.primary/src/new_ftp_backend.c b/org.glite.jp.primary/src/new_ftp_backend.c index ab082b3..75210ca 100644 --- a/org.glite.jp.primary/src/new_ftp_backend.c +++ b/org.glite.jp.primary/src/new_ftp_backend.c @@ -457,6 +457,7 @@ int glite_jppsbe_start_upload( /* XXX authorization done in soap_ops.c */ /* XXX name length */ + printf("data_basename: %s\n", data_basename); if (asprintf(&data_basename, "%s%s%s", class, (name != NULL) ? "." : "", (name != NULL) ? name : "") == -1) { @@ -1773,14 +1774,14 @@ int glite_jppsbe_query( char *qres[3] = { NULL, NULL, NULL }; int cmask = 0, owner_idx = -1, reg_idx = -1; glite_jp_db_stmt_t q; - glite_jp_attrval_t metadata[2]; + glite_jp_attrval_t metadata[3]; memset(&err,0,sizeof err); glite_jp_clear_error(ctx); err.source = __FUNCTION__; /* XXX: assuming not more than 2 */ - memset(metadata,0,sizeof metadata); + memset(metadata,0, sizeof metadata); /* XXX: const discarding is OK */ for (i=0;attrs[i]; i++) metadata[i].name = (char *) attrs[i]; diff --git a/org.glite.jp.server-common/Makefile b/org.glite.jp.server-common/Makefile index d896ec2..4e9f04e 100644 --- a/org.glite.jp.server-common/Makefile +++ b/org.glite.jp.server-common/Makefile @@ -15,7 +15,6 @@ globus_prefix=/opt/globus nothrflavour=gcc32 thrflavour=gcc32pthr expat_prefix=/opt/expat -ares_prefix=/opt/ares gsoap_prefix=/software/gsoap-2.6 CC=gcc @@ -56,10 +55,10 @@ OBJS:=${SRCS:.c=.o} LOBJS:=${OBJS:.o=.lo} ifneq (${mysql_prefix},/usr) - ifeq ($(shell echo ${mysql_version} | cut -d. -f1,2),4.1) - MYSQLIB := -L${mysql_prefix}/lib/mysql -lmysqlclient - else + ifeq ($(shell test -f ${mysql_prefix}/lib/libmysqlclient.a -o -f ${mysql_prefix}/lib/libmysqlclient.so && echo ok),ok) MYSQLIB := -L${mysql_prefix}/lib -lmysqlclient + else + MYSQLIB := -L${mysql_prefix}/lib/mysql -lmysqlclient endif else MYSQLIB := -lmysqlclient diff --git a/org.glite.jp.server-common/project/configure.properties.xml b/org.glite.jp.server-common/project/configure.properties.xml index b8d50bd..2fb0a4d 100644 --- a/org.glite.jp.server-common/project/configure.properties.xml +++ b/org.glite.jp.server-common/project/configure.properties.xml @@ -12,6 +12,17 @@ Revision history: $Log$ + Revision 1.1.1.1.2.1 2005/11/03 17:46:53 mmulac + ares to c-ares migration + - use dynamic library of c-ares, instead of ares static lib + - ares clean up (now should be mentioned only in modules that really need it) + - patch for security.gsoap-plugin not yet in CVS (sent to interation list) + I do not know what will happen when one try to mix ares with c-ares libs + => weird things may arise! + + Revision 1.1.1.1 2005/09/15 16:53:25 valtri + Initial import of common module for server side. It depends on mysql. + Revision 1.4 2005/08/12 10:56:25 mmulac void IS server - seems compiling @@ -49,7 +60,6 @@ glite_location=${with.glite.location} globus_prefix=${with.globus.prefix} expat_prefix=${with.expat.prefix} gsoap_prefix=${with.gsoap.prefix} -ares_prefix=${with.ares.prefix} mysql_prefix=${with.mysql.prefix} mysql_version=${ext.mysql.version} thrflavour=${with.globus.thr.flavor} diff --git a/org.glite.jp/build.xml b/org.glite.jp/build.xml index 512a8fd..925b449 100644 --- a/org.glite.jp/build.xml +++ b/org.glite.jp/build.xml @@ -12,6 +12,12 @@ Revision history: $Log$ + Revision 1.10.2.1 2005/10/20 06:55:15 zsalvet + Add libtar and mysql external dependencies. + + Revision 1.10 2005/10/14 17:23:07 akrenek + added jp.client + Revision 1.9 2005/10/11 20:37:50 akrenek added dependencies on lb.server-bones and security.gsoap-plugin @@ -306,7 +312,7 @@ - + @@ -322,7 +328,7 @@ - + diff --git a/org.glite.jp/project/dependencies.properties b/org.glite.jp/project/dependencies.properties index cb6320f..0332729 100644 --- a/org.glite.jp/project/dependencies.properties +++ b/org.glite.jp/project/dependencies.properties @@ -12,3 +12,5 @@ org.glite.jp.server-common.version = HEAD org.glite.jp.index.version = HEAD org.glite.jp.primary.version = HEAD org.glite.jp.client.version = HEAD + +ext.gsoap.version = 2.7.0 diff --git a/org.glite.jp/project/glite.jp.csf.xml b/org.glite.jp/project/glite.jp.csf.xml index 5fe964f..ba274b4 100644 --- a/org.glite.jp/project/glite.jp.csf.xml +++ b/org.glite.jp/project/glite.jp.csf.xml @@ -12,6 +12,15 @@ Revision history: $Log$ + Revision 1.5 2005/11/23 08:24:23 zsalvet + Add jp.client component. + + Revision 1.4.2.2 2005/10/20 06:55:15 zsalvet + Add libtar and mysql external dependencies. + + Revision 1.4.2.1 2005/10/17 09:49:02 akrenek + added jp.client module targets + Revision 1.4 2005/10/03 17:00:50 valtri Automatically checkout the new module yet. @@ -145,6 +154,10 @@ + + + + @@ -204,7 +217,7 @@ + description="Install external packages" depends="oscheck, libtar, mysql"/>