From b4c31ef61c728a9243e24b288abaedc254f918fd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ale=C5=A1=20K=C5=99enek?= Date: Fri, 7 Jan 2005 12:53:21 +0000 Subject: [PATCH] added abort_job --- org.glite.lb.client/Makefile | 2 +- org.glite.lb.client/examples/abort_job.c | 114 +++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 org.glite.lb.client/examples/abort_job.c diff --git a/org.glite.lb.client/Makefile b/org.glite.lb.client/Makefile index 3fde357..ce9241f 100644 --- a/org.glite.lb.client/Makefile +++ b/org.glite.lb.client/Makefile @@ -135,7 +135,7 @@ PLUSLIB:=libglite_lb_clientpp_${nothrflavour}.la THRPLUSLIB:=libglite_lb_clientpp_${thrflavour}.la TOOLS:=dump load purge -EXAMPLES:=log_usertag_proxy job_log job_reg feed_shark notify query_ext query_seq_code stats +EXAMPLES:=log_usertag_proxy job_log job_reg feed_shark notify query_ext query_seq_code stats abort_job FAKE_EXAMPLES:=job_log_fake version_info=-version-info `echo ${version} | cut -d. -f1,2 | tr . :` diff --git a/org.glite.lb.client/examples/abort_job.c b/org.glite.lb.client/examples/abort_job.c new file mode 100644 index 0000000..2a72d79 --- /dev/null +++ b/org.glite.lb.client/examples/abort_job.c @@ -0,0 +1,114 @@ +#ident "$Header$" + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#include +#include +#include +#include + +#include "glite/lb/events_parse.h" +#include "glite/lb/consumer.h" +#include "glite/wmsutils/jobid/cjobid.h" + +static void free_events(edg_wll_Event *); + +static void help(const char* n) +{ + fprintf(stderr,"usage: %s \n", n); + exit(1); +} + +int main(int argc,char **argv) +{ + edg_wll_Context ctx; + char *errt,*errd,*e; + edg_wll_Event *events; + int i; + edg_wll_QueryRec jq[2],eq[2]; + edg_wlc_JobId job; + edg_wll_Source src; + + if (argc != 3) help(argv[0]); + + edg_wll_InitContext(&ctx); + + if (edg_wlc_JobIdParse(argv[1],&job)) { + fprintf(stderr,"%s: can't parse job ID\n",argv[1]); + return 1; + } + + if (( src = edg_wll_StringToSource(argv[2])) == EDG_WLL_SOURCE_NONE) { + fprintf(stderr,"%s: unknown event source\n",argv[2]); + return 1; + } + + jq[0].attr = EDG_WLL_QUERY_ATTR_JOBID; + jq[0].op = EDG_WLL_QUERY_OP_EQUAL; + jq[0].value.j = job; + jq[1].attr = EDG_WLL_QUERY_ATTR_UNDEF; + + eq[0].attr = EDG_WLL_QUERY_ATTR_SOURCE; + eq[0].op = EDG_WLL_QUERY_OP_EQUAL; + eq[0].value.i = src; + eq[1].attr = EDG_WLL_QUERY_ATTR_UNDEF; + + if ( edg_wll_QueryEvents(ctx,jq,eq,&events) ) + { + if ( edg_wll_Error(ctx, &errt, &errd) != E2BIG ) + goto err; + + fprintf(stderr,"%s: %s (%s)\n",argv[0],errt,errd); + } + + for ( i = 0; events[i].type != EDG_WLL_EVENT_UNDEF; i++ ); + + e = edg_wll_UnparseEvent(ctx,events+i-1); + + fputs(e,stdout); + fputs("\n",stdout); + + if (edg_wll_SetParam(ctx,EDG_WLL_PARAM_SOURCE,src) || + edg_wll_SetLoggingJob(ctx,job,events[i-1].any.seqcode,EDG_WLL_SEQ_NORMAL) || + edg_wll_IncSequenceCode(ctx) || /* necessary to simulate this + * call in last event logging + * _after_ current seq. was used */ + edg_wll_LogAbort(ctx,"manual abort")) goto err; + + + free(e); + free_events(events); + + edg_wll_FreeContext(ctx); + + return 0; + +err: + switch (edg_wll_Error(ctx,&errt,&errd)) { + case 0: break; + case ENOENT: + puts("No events found"); + break; + default: + fprintf(stderr,"%s: %s (%s)\n",argv[0],errt,errd); + return 1; + } + + edg_wll_FreeContext(ctx); + + return 0; +} + +static void free_events(edg_wll_Event *events) +{ + int i; + + if (events) { + for (i=0; events[i].type != EDG_WLL_EVENT_UNDEF; i++) edg_wll_FreeEvent(&(events[i])); + edg_wll_FreeEvent(&(events[i])); /* free last line */ + free(events); + events = NULL; + } +} -- 1.8.2.3