int JobRouterHookMgr::hookJobCleanup(RoutedJob* r_job) { ClassAd temp_ad; char* hook_cleanup = getHookPath(HOOK_JOB_CLEANUP, r_job->src_ad); if (NULL == hook_cleanup) { // hook not defined dprintf(D_FULLDEBUG, "HOOK_JOB_CLEANUP not configured.\n"); return 0; } if (0 >= r_job->dest_ad.size()) { return 0; } // Verify the cleanup hook hasn't already been spawned and that // we're not waiting for it to return. std::string key = r_job->dest_key; if (true == JobRouterHookMgr::checkHookKnown(key.c_str(), HOOK_JOB_CLEANUP)) { dprintf(D_FULLDEBUG, "JobRouterHookMgr::hookJobCleanup " "retried while still waiting for cleanup hook to " "return for job with key %s - ignoring\n", key.c_str()); return 1; } temp_ad = r_job->dest_ad; MyString hook_stdin; sPrintAd(hook_stdin, temp_ad); CleanupClient* cleanup_client = new CleanupClient(hook_cleanup, r_job); if (NULL == cleanup_client) { dprintf(D_ALWAYS|D_FAILURE, "ERROR in JobRouterHookMgr::hookJobCleanup: " "failed to create status update client\n"); return -1; } set_user_priv_from_ad(r_job->src_ad); if (0 == spawn(cleanup_client, NULL, &hook_stdin, PRIV_USER_FINAL)) { dprintf(D_ALWAYS|D_FAILURE, "ERROR in JobRouterHookMgr::JobCleanup: " "failed to spawn HOOK_JOB_CLEANUP (%s)\n", hook_cleanup); delete cleanup_client; return -1; } uninit_user_ids(); // Add our info to the list of hooks currently running for this job. if (false == JobRouterHookMgr::addKnownHook(key.c_str(), HOOK_JOB_CLEANUP)) { dprintf(D_ALWAYS, "ERROR in JobRouterHookMgr::hookJobCleanup: " "failed to add HOOK_JOB_CLEANUP to list of " "hooks running for job key %s\n", key.c_str()); } dprintf(D_FULLDEBUG, "HOOK_JOB_CLEANUP (%s) invoked.\n", hook_cleanup); return 1; }
int JobRouterHookMgr::hookTranslateJob(RoutedJob* r_job, std::string &route_info) { ClassAd temp_ad; char* hook_translate = getHookPath(HOOK_TRANSLATE_JOB, r_job->src_ad); if (NULL == hook_translate) { // hook not defined, which is ok dprintf(D_FULLDEBUG, "HOOK_TRANSLATE_JOB not configured.\n"); return 0; } // Verify the translate hook hasn't already been spawned and that // we're not waiting for it to return. std::string key = r_job->src_key; if (true == JobRouterHookMgr::checkHookKnown(key.c_str(), HOOK_TRANSLATE_JOB)) { dprintf(D_FULLDEBUG, "JobRouterHookMgr::hookTranslateJob " "retried while still waiting for translate hook to " "return for job with key %s - ignoring\n", key.c_str()); return 1; } temp_ad = r_job->src_ad; MyString hook_stdin; hook_stdin = route_info.c_str(); hook_stdin += "\n------\n"; temp_ad.sPrint(hook_stdin); TranslateClient* translate_client = new TranslateClient(hook_translate, r_job); if (NULL == translate_client) { dprintf(D_ALWAYS|D_FAILURE, "ERROR in JobRouterHookMgr::hookTranslateJob: " "failed to create translation client\n"); return -1; } set_user_from_ad(r_job->src_ad); if (0 == spawn(translate_client, NULL, &hook_stdin, PRIV_USER_FINAL)) { dprintf(D_ALWAYS|D_FAILURE, "ERROR in JobRouterHookMgr::hookTranslateJob: " "failed to spawn HOOK_TRANSLATE_JOB (%s)\n", hook_translate); delete translate_client; return -1; } uninit_user_ids(); // Add our info to the list of hooks currently running for this job. if (false == JobRouterHookMgr::addKnownHook(key.c_str(), HOOK_TRANSLATE_JOB)) { dprintf(D_ALWAYS, "ERROR in JobRouterHookMgr::hookTranslateJob: " "failed to add HOOK_TRANSLATE_JOB to list of " "hooks running for job key %s\n", key.c_str()); } dprintf(D_FULLDEBUG, "HOOK_TRANSLATE_JOB (%s) invoked.\n", hook_translate); return 1; }
int JobRouterHookMgr::hookJobExit(RoutedJob* r_job) { ClassAd temp_ad; char* hook_job_exit = getHookPath(HOOK_JOB_EXIT, r_job->src_ad); if (NULL == hook_job_exit) { // hook not defined dprintf(D_FULLDEBUG, "HOOK_JOB_EXIT not configured.\n"); return 0; } // Verify the exit hook hasn't already been spawned and that // we're not waiting for it to return. std::string key = r_job->dest_key; if (true == JobRouterHookMgr::checkHookKnown(key.c_str(),HOOK_JOB_EXIT)) { dprintf(D_FULLDEBUG, "JobRouterHookMgr::hookJobExit " "retried while still waiting for exit hook to return " "for job with key %s - ignoring\n", key.c_str()); return 1; } temp_ad = r_job->src_ad; MyString hook_stdin; sPrintAd(hook_stdin, temp_ad); hook_stdin += "\n------\n"; temp_ad = r_job->dest_ad; sPrintAd(hook_stdin, temp_ad); ExitClient *exit_client = new ExitClient(hook_job_exit, r_job); if (NULL == exit_client) { dprintf(D_ALWAYS|D_FAILURE, "ERROR in JobRouterHookMgr::hookJobExit: " "failed to create exit client\n"); return -1; } set_user_priv_from_ad(r_job->src_ad); if (0 == spawn(exit_client, NULL, &hook_stdin, PRIV_USER_FINAL)) { dprintf(D_ALWAYS|D_FAILURE, "ERROR in JobRouterHookMgr::hookJobExit: " "failed to spawn HOOK_JOB_EXIT (%s)\n", hook_job_exit); delete exit_client; return -1; } uninit_user_ids(); // Add our info to the list of hooks currently running for this job. if (false == JobRouterHookMgr::addKnownHook(key.c_str(), HOOK_JOB_EXIT)) { dprintf(D_ALWAYS, "ERROR in JobRouterHookMgr::hookJobExit: " "failed to add HOOK_JOB_EXIT to list of " "hooks running for job key %s\n", key.c_str()); } dprintf(D_FULLDEBUG, "HOOK_JOB_EXIT (%s) invoked.\n", hook_job_exit); return 1; }