From e3a19a0bd2fa53e15c37a1446c5d768e94f844f8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Franti=C5=A1ek=20Dvo=C5=99=C3=A1k?= Date: Tue, 6 Sep 2005 16:35:44 +0000 Subject: [PATCH] Updated LB plugin. All existing features remains. --- org.glite.lb.server/src/lb_plugin.c | 153 ++++++++++++++++-------------------- 1 file changed, 67 insertions(+), 86 deletions(-) diff --git a/org.glite.lb.server/src/lb_plugin.c b/org.glite.lb.server/src/lb_plugin.c index ead5f7d..1b850a7 100644 --- a/org.glite.lb.server/src/lb_plugin.c +++ b/org.glite.lb.server/src/lb_plugin.c @@ -20,6 +20,7 @@ #include "glite/jp/file_plugin.h" #include "glite/jp/builtin_plugins.h" #include "glite/jp/backend.h" +#include "glite/jp/known_attr.h" #define INITIAL_NUMBER_EVENTS 100 #define LB_PLUGIN_NAMESPACE "urn:org.glite.lb" @@ -37,7 +38,7 @@ typedef struct _lb_handle { -static int lb_query(void *fpctx,void *handle,glite_jp_attr_t attr,glite_jp_attrval_t **attrval); +static int lb_query(void *fpctx,void *handle,const char * attr,glite_jp_attrval_t **attrval); static int lb_open(void *,void *, const char *uri, void **); static int lb_close(void *,void *); /*static int lb_status(edg_wll_Event *event, edg_wll_JobStat *status);*/ @@ -187,115 +188,95 @@ static int lb_close(void *fpctx,void *handle) -static int lb_query(void *fpctx,void *handle,glite_jp_attr_t attr,glite_jp_attrval_t **attrval) +static int lb_query(void *fpctx,void *handle,const char *attr,glite_jp_attrval_t **attrval) { lb_handle *h = (lb_handle *) handle; glite_jp_context_t ctx = (glite_jp_context_t) fpctx; glite_jp_error_t err; glite_jp_attrval_t *av = NULL; int i, n_tags; + const char *tag; glite_jp_clear_error(ctx); memset(&err,0,sizeof err); err.source = __FUNCTION__; - switch (attr.type) { - case GLITE_JP_ATTR_OWNER: - if (h->events) + if (strcmp(attr, GLITE_JP_ATTR_OWNER) == 0) { + if (h->events) + { + i = 0; + while (h->events[i]) { - i = 0; - while (h->events[i]) + if (h->events[i]->type == EDG_WLL_EVENT_REGJOB) { - if (h->events[i]->type == EDG_WLL_EVENT_REGJOB) - { - av = calloc(2, sizeof(glite_jp_attrval_t)); - av[0].attr.type = GLITE_JP_ATTR_OWNER; - av[0].value.s = strdup(h->events[i]->any.user); - - break; - } - i++; + av = calloc(2, sizeof(glite_jp_attrval_t)); + av[0].name = strdup(GLITE_JP_ATTR_OWNER); + av[0].value = strdup(h->events[i]->any.user); + av[0].size = -1; + + break; } + i++; } - //av = calloc(2, sizeof(glite_jp_attrval_t)); - //av[0].value.s = strdup(h->status.owner); - break; - case GLITE_JP_ATTR_TIME: - if (edg_wll_StringToStat(attr.name) == EDG_WLL_JOB_SUBMITTED) + } + } else if (strcmp(attr, GLITE_JP_LB_SUBMITTED) == 0) { + if (h->events) + { + i = 0; + while (h->events[i]) { - if (h->events) + if (h->events[i]->type == EDG_WLL_EVENT_REGJOB) { - i = 0; - while (h->events[i]) - { - if (h->events[i]->type == EDG_WLL_EVENT_REGJOB) - { - av = calloc(2, sizeof(glite_jp_attrval_t)); - av[0].attr.type = GLITE_JP_ATTR_TIME; - av[0].value.time.tv_sec = - h->events[i]->any.timestamp.tv_sec; - av[0].value.time.tv_usec = - h->events[i]->any.timestamp.tv_usec; - - break; - } - i++; - } + av = calloc(2, sizeof(glite_jp_attrval_t)); + av[0].name = strdup(GLITE_JP_LB_SUBMITTED); + av[0].timestamp = + h->events[i]->any.timestamp.tv_sec; + + break; } - } - else // state need to be counted (not impl. yet) - { - *attrval = NULL; - err.code = ENOSYS; - err.desc = "Not implemented yet."; - return glite_jp_stack_error(ctx,&err); + i++; } - // XXX - not clear yet how to care about this - //av = calloc(2, sizeof(glite_jp_attrval_t)); - //av[0].value.time.tv_sec = h->status.stateEnterTime.tv_sec; - //av[0].value.time.tv_usec = h->status.stateEnterTime.tv_usec; - - break; - case GLITE_JP_ATTR_TAG: - if (h->events) - { - i = 0; - n_tags = 0; + } + } else if (strcmp(attr, GLITE_JP_LB_TERMINATED) == 0 || strcmp(attr, GLITE_JP_LB_FINALSTATE) == 0) { + { + *attrval = NULL; + err.code = ENOSYS; + err.desc = "Not implemented yet."; + return glite_jp_stack_error(ctx,&err); + } + } else if (strncmp(attr, GLITE_JP_LBTAG_NS, strlen(GLITE_JP_LBTAG_NS)) == 0) { + tag = strrchr(attr, ':'); + if (h->events && tag) + { + tag++; + i = 0; + n_tags = 0; - while (h->events[i]) + while (h->events[i]) + { + if ((h->events[i]->type == EDG_WLL_EVENT_USERTAG) && + (strcmp(h->events[i]->userTag.name, tag) == 0) ) { - if ((h->events[i]->type == EDG_WLL_EVENT_USERTAG) && - !(strcmp(h->events[i]->userTag.name, attr.name)) ) - { - av = realloc(av, (n_tags+2) * sizeof(glite_jp_attrval_t)); - memset(&av[n_tags], 0, 2 * sizeof(glite_jp_attrval_t)); - - av[n_tags].attr.name = strdup(h->events[i]->userTag.name); - av[n_tags].attr.namespace = strdup(LB_PLUGIN_NAMESPACE); - av[n_tags].value.tag.name = strdup(h->events[i]->userTag.name); - av[n_tags].value.tag.sequence = -1; - av[n_tags].value.tag.timestamp = - h->events[i]->any.timestamp.tv_sec; - av[n_tags].value.tag.binary = 0; - av[n_tags].value.tag.size = -1; - av[n_tags].value.tag.value = strdup(h->events[i]->userTag.value); - av[n_tags].attr.type = GLITE_JP_ATTR_TAG; - - av[n_tags+1].attr.type = GLITE_JP_ATTR_UNDEF; - - n_tags++; - } - i++; + av = realloc(av, (n_tags+2) * sizeof(glite_jp_attrval_t)); + memset(&av[n_tags], 0, 2 * sizeof(glite_jp_attrval_t)); + + av[n_tags].name = strdup(attr); + av[n_tags].value = strdup(h->events[i]->userTag.value); + av[n_tags].timestamp = + h->events[i]->any.timestamp.tv_sec; + av[n_tags].size = -1; + + n_tags++; } + i++; } - break; - default: - *attrval = NULL; - err.code = ENOENT; - err.desc = "No such attriburte."; - return glite_jp_stack_error(ctx,&err); - break; + } + } else { + *attrval = NULL; + err.code = ENOENT; + err.desc = "No such attribute."; + return glite_jp_stack_error(ctx,&err); } *attrval = av; -- 1.8.2.3