int sge_read_sched_configuration(sge_gdi_ctx_class_t *ctx, lListElem *aSpoolContext, lList **anAnswer) { lList *sched_conf = NULL; bool job_spooling = ctx->get_job_spooling(ctx); DENTER(TOP_LAYER, "sge_read_sched_configuration"); spool_read_list(anAnswer, aSpoolContext, &sched_conf, SGE_TYPE_SCHEDD_CONF); if (lGetNumberOfElem(sched_conf) == 0) { lListElem *ep = sconf_create_default(); if (sched_conf == NULL) { sched_conf = lCreateList("schedd_config_list", SC_Type); } lAppendElem(sched_conf, ep); spool_write_object(anAnswer, spool_get_default_context(), ep, "schedd_conf", SGE_TYPE_SCHEDD_CONF, job_spooling); } if (!sconf_set_config(&sched_conf, anAnswer)) { lFreeList(&sched_conf); DEXIT; return -1; } check_reprioritize_interval(ctx, anAnswer, "local" , "local"); DEXIT; return 0; }
static bool add_job(int job_id) { bool write_ok; lListElem *job; lList *answer_list = NULL; lList *master_job_list = *object_type_get_master_list(SGE_TYPE_JOB); const char *key; dstring key_dstring; char key_buffer[100]; sge_dstring_init(&key_dstring, key_buffer, sizeof(key_buffer)); job = lAddElemUlong(&master_job_list, JB_job_number, job_id, JB_Type); key = job_get_key(job_id, 0, NULL, &key_dstring); #if LOCAL_TRANSACTION spool_transaction(&answer_list, spool_get_default_context(), STC_begin); answer_list_output(&answer_list); #endif write_ok = spool_write_object(&answer_list, spool_get_default_context(), job, key, SGE_TYPE_JOB, false); answer_list_output(&answer_list); if (delay > 0) { sge_usleep(delay * 1000); } #if LOCAL_TRANSACTION spool_transaction(&answer_list, spool_get_default_context(), write_ok ? STC_commit : STC_rollback); answer_list_output(&answer_list); #endif return write_ok; }
/****** qmaster/ckpt/ckpt_spool() ********************************************* * * NAME * ckpt_spool -- spool a ckpt object * * SYNOPSIS * int ckpt_spool(lList **alpp, lListElem *ep, gdi_object_t *object); * * FUNCTION * This function will be called from the framework which will * add/modify/delete generic gdi objects. * After an object was modified/added successfully it * is necessary to spool the current state to the filesystem. * * * INPUTS * alpp - reference to an answer list. * ep - ckpt object which should be spooled * object - structure of the gdi framework which contains * additional information to perform the request * (function pointers, names, CULL-types) * * RESULT * [alpp] - error messages will be added to this list * 0 - success * STATUS_EEXIST - an error occured ******************************************************************************/ int ckpt_spool(sge_gdi_ctx_class_t *ctx, lList **alpp, lListElem *ep, gdi_object_t *object) { lList *answer_list = NULL; bool dbret; bool job_spooling = ctx->get_job_spooling(ctx); DENTER(TOP_LAYER, "ckpt_spool"); dbret = spool_write_object(&answer_list, spool_get_default_context(), ep, lGetString(ep, CK_name), SGE_TYPE_CKPT, job_spooling); answer_list_output(&answer_list); if (!dbret) { answer_list_add_sprintf(alpp, STATUS_EUNKNOWN, ANSWER_QUALITY_ERROR, MSG_PERSISTENCE_WRITE_FAILED_S, lGetString(ep, CK_name)); } DEXIT; return dbret ? 0 : 1; }