/**
* Formats a logging message and sends it synchronously to L&B Proxy
* \brief generic synchronous logging function
- * \param context INOUT context to work with,
- * \param event IN type of the event,
- * \param fmt IN printf()-like format string,
- * \param ... IN event specific values/data according to fmt,
+ * \param[in,out] context context to work with,
+ * \param[in] event type of the event,
+ * \param[in] fmt printf()-like format string,
+ * \param[in] ... event specific values/data according to fmt,
* \retval 0 successful completition,
* \retval EINVAL bad jobId, unknown event code, or the format string together with the remaining arguments does not form a valid event,
* \retval ENOSPC L&B infrastructure failed to accept the event due to lack of disk space etc.,
* Instructs interlogger to to deliver all pending events related to current job
* \brief flush events from interlogger
* \note sort of status query more than a command
- * \param context INOUT context to work with,
- * \param timeout INOUT wait at most this much time for completition, remaining time on return,
+ * \param[in,out] context context to work with,
+ * \param[in,out] timeout wait at most this much time for completition, remaining time on return,
* \retval 0 successful completition,
* \retval EDG_WLL_ERROR_INTERLOG_TIMEOUT the inter-logger did not respond within the timeout,
* \retval EDG_WLL_ERROR_INTERLOG_CONLOST inter-logger lost connection to one or more servers,
/**
* Set a current job for given context.
* \note Should be called before any logging call.
- * \param context INOUT context to work with
- * \param job IN further logging calls are related to this job
- * \param code IN sequence code as obtained from previous component
- * \param user IN user credentials
- * \param flags IN flags on code handling (\see API documentation)
- */
-extern int edg_wll_SetLoggingJobProxy(
- edg_wll_Context context,
- const edg_wlc_JobId job,
- const char * code,
- const char * user,
- int flags
-);
-
-
-/**
- * Set a current job for given context.
- * \note Should be called before any logging call.
- * \param context INOUT context to work with
- * \param job IN further logging calls are related to this job
- * \param code IN sequence code as obtained from previous component
- * \param user IN user credentials
- * \param flags IN flags on code handling (\see API documentation)
+ * \param[in,out] context context to work with
+ * \param[in] job further logging calls are related to this job
+ * \param[in] code sequence code as obtained from previous component
+ * \param[in] user user credentials
+ * \param[in] flags flags on code handling (\see API documentation)
*/
extern int edg_wll_SetLoggingJobProxy(
edg_wll_Context context,
int flags
);
-
/**
* Register job with L&B service.
* Done via logging REGJOB event, may generate subjob id's and create
* Partitionable jobs should set num_subjobs=0 initially,
* and re-register when number of subjobs becomes known.
*
- * \param type IN EDG_WLL_JOB_SIMPLE, EDG_WLL_JOB_DAG, or EDG_WLL_JOB_PARTITIONABLE
- * \param user IN user credentials
- * \param jdl IN user-specified JDL
- * \param ns IN network server contact
- * \param num_subjobs IN number of subjobs to create
- * \param seed IN seed used for subjob id's generator.
+ * \param[in] type EDG_WLL_JOB_SIMPLE, EDG_WLL_JOB_DAG, or EDG_WLL_JOB_PARTITIONABLE
+ * \param[in] user user credentials
+ * \param[in] jdl user-specified JDL
+ * \param[in] ns network server contact
+ * \param[in] num_subjobs number of subjobs to create
+ * \param[in] seed seed used for subjob id's generator.
* Use non-NULL value to be able to regenerate the set of jobid's
- * \param subjobs OUT returned subjob id's
+ * \param[out] subjobs returned subjob id's
*/
extern int edg_wll_RegisterJobProxy(
* Register subjobs in a batch.
* Mainly used to provide JDL's of individual subjobs in a more efficient
* way than logging them one by one.
- * \param jdls array of JDL's
- * \param subjobs array of jobid's in the same order
+ * \param[in] jdls array of JDL's
+ * \param[in] subjobs array of jobid's in the same order
*/
extern int edg_wll_RegisterSubjobs(
/**
+ * Register subjobs to LB Proxyin a batch.
+ * Mainly used to provide JDL's of individual subjobs in a more efficient
+ * way than logging them one by one.
+ * \param[in] jdls array of JDL's
+ * \param[in] subjobs array of jobid's in the same order
+ */
+
+extern int edg_wll_RegisterSubjobsProxy(
+ edg_wll_Context context,
+ const edg_wlc_JobId parent,
+ char const * const * jdls,
+ const char * ns,
+ edg_wlc_JobId const * subjobs
+);
+
+/**
* Generate or regenerate set of subjob ID's.
* Calls the same algorithm used to generate subjob ID's in edg_wll_RegisterJob().
* Local semantics only, server is not contacted.
(char *)jdl,ns,parent_s,type_s,num_subjobs,intseed);
}
} else if (flags & LOGFLAG_NORMAL) {
- edg_wll_SetError(context,EINVAL,
- "edg_wll_RegisterJobMaster(): register via interlogger is no more supported");
+ /* SetLoggingJob and log normally the message through the locallogger */
+ if (edg_wll_SetLoggingJob(context,job,NULL,EDG_WLL_SEQ_NORMAL) == 0) {
+ edg_wll_LogEventMaster(context, LOGFLAG_NORMAL,
+ EDG_WLL_EVENT_REGJOB,EDG_WLL_FORMAT_REGJOB,
+ (char *)jdl,ns,parent_s,type_s,num_subjobs,intseed);
+ }
} else {
edg_wll_SetError(context,EINVAL,"edg_wll_RegisterJobMaster(): wrong flag specified");
}
return edg_wll_RegisterJobMaster(context,LOGFLAG_DIRECT,job,type,jdl,ns,NULL,num_subjobs,seed,subjobs);
}
+int edg_wll_RegisterJobProxy(
+ edg_wll_Context context,
+ const edg_wlc_JobId job,
+ enum edg_wll_RegJobJobtype type,
+ const char * jdl,
+ const char * ns,
+ int num_subjobs,
+ const char * seed,
+ edg_wlc_JobId ** subjobs)
+{
+ /* first register with bkserver */
+ int ret = edg_wll_RegisterJob(context,job,type,jdl,ns,num_subjobs,seed,subjobs);
+ if (ret) {
+ edg_wll_UpdateError(context,0,"edg_wll_RegisterJobProxy(): unable to register with bkserver");
+ return edg_wll_Error(context,NULL,NULL);
+ }
+ /* and then with L&B Proxy */
+ return edg_wll_RegisterJobMaster(context,LOGFLAG_PROXY,job,type,jdl,ns,NULL,num_subjobs,seed,subjobs);
+}
+
int edg_wll_RegisterSubjob(
edg_wll_Context context,
const edg_wlc_JobId job,
const char * seed,
edg_wlc_JobId ** subjobs)
{
- return edg_wll_RegisterJobMaster(context,LOGFLAG_DIRECT,job,type,jdl,ns,parent,num_subjobs,seed,subjobs);
+ return edg_wll_RegisterJobMaster(context,LOGFLAG_NORMAL,job,type,jdl,ns,parent,num_subjobs,seed,subjobs);
}
-int edg_wll_RegisterSubjobs(edg_wll_Context ctx,const edg_wlc_JobId parent,
- char const * const * jdls, const char * ns, edg_wlc_JobId const * subjobs)
+int edg_wll_RegisterSubjobProxy(
+ edg_wll_Context context,
+ const edg_wlc_JobId job,
+ enum edg_wll_RegJobJobtype type,
+ const char * jdl,
+ const char * ns,
+ edg_wlc_JobId parent,
+ int num_subjobs,
+ const char * seed,
+ edg_wlc_JobId ** subjobs)
+{
+ return edg_wll_RegisterJobMaster(context,LOGFLAG_PROXY,job,type,jdl,ns,parent,num_subjobs,seed,subjobs);
+}
+
+int edg_wll_RegisterSubjobs(
+ edg_wll_Context ctx,
+ const edg_wlc_JobId parent,
+ char const * const * jdls,
+ const char * ns,
+ edg_wlc_JobId const * subjobs)
{
char const * const *pjdl;
edg_wlc_JobId const *psubjob;
return edg_wll_Error(ctx, NULL, NULL);
}
-int edg_wll_RegisterJobProxy(
- edg_wll_Context context,
- const edg_wlc_JobId job,
- enum edg_wll_RegJobJobtype type,
- const char * jdl,
- const char * ns,
- int num_subjobs,
- const char * seed,
- edg_wlc_JobId ** subjobs)
+int edg_wll_RegisterSubjobsProxy(
+ edg_wll_Context ctx,
+ const edg_wlc_JobId parent,
+ char const * const * jdls,
+ const char * ns,
+ edg_wlc_JobId const * subjobs)
{
- /* first register with bkserver */
- int ret = edg_wll_RegisterJob(context,job,type,jdl,ns,num_subjobs,seed,subjobs);
- if (ret) {
- edg_wll_UpdateError(context,0,"edg_wll_RegisterJobProxy(): unable to register with bkserver");
- return edg_wll_Error(context,NULL,NULL);
+ char const * const *pjdl;
+ edg_wlc_JobId const *psubjob;
+ edg_wlc_JobId oldctxjob;
+ char * oldctxseq;
+
+ if (edg_wll_GetLoggingJob(ctx, &oldctxjob)) return edg_wll_Error(ctx, NULL, NULL);
+ oldctxseq = edg_wll_GetSequenceCode(ctx);
+
+ pjdl = jdls;
+ psubjob = subjobs;
+
+ while (*pjdl != NULL) {
+ if (edg_wll_RegisterSubjobProxy(ctx, *psubjob, EDG_WLL_REGJOB_SIMPLE, *pjdl,
+ ns, parent, 0, NULL, NULL) != 0) break;
+ pjdl++; psubjob++;
}
- /* and then with L&B Proxy */
- return edg_wll_RegisterJobMaster(context,LOGFLAG_PROXY,job,type,jdl,ns,NULL,num_subjobs,seed,subjobs);
+
+ edg_wll_SetLoggingJobProxy(ctx, oldctxjob, oldctxseq, NULL, EDG_WLL_SEQ_NORMAL);
+
+ return edg_wll_Error(ctx, NULL, NULL);
}
int edg_wll_ChangeACL(