From: Jiří Škrábal Date: Tue, 9 Nov 2004 10:39:57 +0000 (+0000) Subject: - imported from infn CVS X-Git-Tag: glite-lb_R_0_1_0~91 X-Git-Url: http://scientific.zcu.cz/git/?a=commitdiff_plain;h=aae3d04f768bdd0a9ace7783e8fd2bd022935e15;p=jra1mw.git - imported from infn CVS --- diff --git a/org.glite.lb.client/examples/job_reg.c b/org.glite.lb.client/examples/job_reg.c new file mode 100644 index 0000000..97b5065 --- /dev/null +++ b/org.glite.lb.client/examples/job_reg.c @@ -0,0 +1,109 @@ +#include +#include +#include +#include +#include + +#include "glite/wmsutils/jobid/cjobid.h" +#include "glite/lb/producer.h" +#include "glite/lb/events.h" + +extern char *optarg; +extern int opterr,optind; + +static void usage(char *me) +{ + fprintf(stderr,"usage: %s [-m bkserver] [-j dg_jobid] [-s source_id] [-n num_subjobs [-S]]\n", me); +} + +int main(int argc, char *argv[]) +{ + char *src = NULL,*job = NULL,*server = NULL,*seq; + int done = 0,num_subjobs = 0,i; + int reg_subjobs = 0; + edg_wll_Context ctx; + edg_wlc_JobId jobid,*subjobs; + + + edg_wll_InitContext(&ctx); + opterr = 0; + + do { + switch (getopt(argc,argv,"Sj:s:n:m:")) { + case 's': src = (char *) strdup(optarg); break; + case 'j': job = (char *) strdup(optarg); break; + case 'm': server = strdup(optarg); break; + case 'n': num_subjobs = atoi(optarg); break; + case 'S': if (num_subjobs>0) { reg_subjobs = 1; break; } + case '?': usage(argv[0]); exit(EINVAL); + case -1: done = 1; break; + } + } while (!done); + + if (!job && !server) { + fprintf(stderr,"%s: either -m server or -j jobid has to be specified\n",argv[0]); + exit(1); + } + + if (!src) { + fprintf(stderr,"%s: -s required\n",argv[0]); + exit(1); + } + + if (!job) { + char *p = strchr(server,':'); + if (p) *p=0; + edg_wlc_JobIdCreate(server,p?atoi(p+1):0,&jobid); + job = edg_wlc_JobIdUnparse(jobid); + printf("new jobid: %s\n",job); + } + else if ((errno = edg_wlc_JobIdParse(job,&jobid))) { + perror(job); + exit(1); + } + + edg_wll_SetParam(ctx,EDG_WLL_PARAM_SOURCE,edg_wll_StringToSource(src)); + if (edg_wll_RegisterJobSync(ctx,jobid, + num_subjobs?EDG_WLL_REGJOB_DAG:EDG_WLL_REGJOB_SIMPLE, + "blabla", "NNNSSSS", + num_subjobs,NULL,&subjobs)) + { + char *et,*ed; + edg_wll_Error(ctx,&et,&ed); + fprintf(stderr,"edg_wll_RegisterJobSync(%s): %s (%s)\n",job,et,ed); + exit(1); + } + + seq = edg_wll_GetSequenceCode(ctx); + printf("\n%s=\"%s\"\n",num_subjobs?"EDG_WL_DAG_JOBID":"EDG_JOBID",job); + printf("EDG_WL_SEQUENCE=\"%s\"\n",seq); + free(seq); + free(job); + + if (num_subjobs) for (i=0; subjobs[i]; i++) { + char *job_s = edg_wlc_JobIdUnparse(subjobs[i]); + printf("EDG_WL_SUB_JOBID[%lu]=\"%s\"\n",i,job_s); + free(job_s); + } + + if (reg_subjobs) { + char ** jdls = (char**) malloc(num_subjobs*sizeof(char*)); + + for (i=0; subjobs[i]; i++) { + asprintf(jdls+i, "JDL of subjob #%d\n", i+1); + } + + if (edg_wll_RegisterSubjobs(ctx, jobid, jdls, NULL, subjobs)) { + char *et,*ed; + edg_wll_Error(ctx,&et,&ed); + fprintf(stderr,"edg_wll_RegisterSubjobs: %s (%s)\n", et, ed); + exit(1); + } + + for (i=0; subjobs[i]; i++) free(jdls[i]); + } + + edg_wll_FreeContext(ctx); + + return 0; +}