Beispiel #1
0
def submit_jobs():
    """
    Submits jobs to the queue for processing.
    
    ***NOTE: Priority is given to jobs with status 'retrying'.
    """
    jobs = []

    special_query1 = "SELECT distinct j.* FROM jobs AS j JOIN job_files AS jf " \
                    "ON j.id=jf.job_id JOIN files AS f ON f.id=jf.file_id WHERE " \
                    "j.status in ('new','retrying') AND f.filename LIKE " \
                    "'%p2030.2019____.G__.%.fits' ORDER BY j.updated_at ASC"

    special_query2 = "SELECT distinct j.* FROM jobs AS j JOIN job_files AS jf " \
                    "ON j.id=jf.job_id JOIN files AS f ON f.id=jf.file_id WHERE " \
                    "j.status in ('new','retrying') AND f.filename LIKE " \
                    "'%p2030.2018____.G__.%.fits' ORDER BY j.updated_at ASC"

    special_query3 = "SELECT distinct j.* FROM jobs AS j JOIN job_files AS jf " \
                    "ON j.id=jf.job_id JOIN files AS f ON f.id=jf.file_id WHERE " \
                    "j.status in ('new','retrying') AND f.filename LIKE " \
                    "'%p2030.2019____.G___.%.fits' ORDER BY j.updated_at ASC"

    special_query4 = "SELECT distinct j.* FROM jobs AS j JOIN job_files AS jf " \
                    "ON j.id=jf.job_id JOIN files AS f ON f.id=jf.file_id WHERE " \
                    "j.status in ('new','retrying') AND f.filename LIKE " \
                    "'%p2030.2018____.G___.%.fits' ORDER BY j.updated_at ASC"


    if not len(jobs):
        jobs.extend(jobtracker.query(special_query1))
        print len(jobs),"in inner galaxy (2019 data)."
        jobs.extend(jobtracker.query(special_query2))
        print len(jobs),"in inner galaxy (2018 data)."
    if len(jobs)<50:
        jobs.extend(jobtracker.query(special_query3))
        print len(jobs),"in outer galaxy (2019 data)."
        jobs.extend(jobtracker.query(special_query4))
        print len(jobs),"in outer galaxy (2018 data)."
    if len(jobs)<50:
        jobs.extend(jobtracker.query("SELECT * FROM jobs " \
                                     "WHERE status='retrying' " \
                                     "ORDER BY updated_at ASC"))
        jobs.extend(jobtracker.query("SELECT * FROM jobs " \
                                     "WHERE status='new'" \
                                     "ORDER BY updated_at ASC"))

    for job in jobs[:500]:
        if config.jobpooler.queue_manager.can_submit():
            try:
                submit(job)
                if config.jobpooler.submit_sleep:
                   time.sleep(config.jobpooler.submit_sleep)
                   #time.sleep(5)
            except: 
		fn = pipeline_utils.get_fns_for_jobid(job['id'])[0]
		fn = fn.split('results/')[-1]
		print "Skipping job-id: %d (%s)"%(job['id'],fn)
        else:
            break
Beispiel #2
0
def submit(job_row):
    """
    Submits a job to QueueManager, if successful will store returned queue id.

    Input:
        job_row: A row from the jobs table. The datafiles associated
            with this job will be submitted to be processed.
    Outputs:
        None
    """
    fns = pipeline_utils.get_fns_for_jobid(job_row['id']) 
    
    try:
        outdir = get_output_dir(fns)
        # Submit job
        queue_id = config.jobpooler.queue_manager.submit(fns, outdir)
        msg  = "Submitted job to process:\n" 
        msg += "\tJob ID: %d, Queue ID: %s\n" % (job_row['id'], queue_id) 
        msg += "\tData file(s):\n" 
        for fn in fns:
            msg += "\t%s\n" % fn
        jobpool_cout.outs(msg)
        queries = []
        queries.append("INSERT INTO job_submits (" \
                            "job_id, " \
                            "queue_id, " \
                            "output_dir, " \
                            "status, " \
                            "created_at, " \
                            "updated_at, " \
                            "details) " \
                      "VALUES (%d,'%s','%s','%s','%s','%s','%s')" % \
                      (job_row['id'], queue_id, outdir, 'running', \
                        jobtracker.nowstr(), jobtracker.nowstr(), \
                        'Job submitted to queue'))
        queries.append("UPDATE jobs " \
                       "SET status='submitted', " \
                            "details='Job submitted to queue', " \
                            "updated_at='%s' " \
                       "WHERE id=%d" % \
                    (jobtracker.nowstr(), job_row['id']))
        jobtracker.query(queries)
    except pipeline_utils.PipelineError:
        # Error caught during job submission.
        exceptionmsgs = traceback.format_exception(*sys.exc_info())
        errormsg  = "Error while submitting job!\n"
        errormsg += "\tJob ID: %d\n\n" % job_row['id']
        errormsg += "".join(exceptionmsgs)

        jobpool_cout.outs("Error while submitting job!\n" \
                          "\tJob ID: %d\n\t%s\n" % \
                          (job_row['id'], exceptionmsgs[-1])) 
        
        queries = []
        queries.append("INSERT INTO job_submits (" \
                            "job_id, " \
                            "status, " \
                            "created_at, " \
                            "updated_at, " \
                            "details) " \
                      "VALUES (%d,'%s','%s','%s','%s')" % \
                      (job_row['id'], 'submission_failed', \
                        jobtracker.nowstr(), jobtracker.nowstr(), \
                        errormsg))
        queries.append("UPDATE jobs " \
                       "SET status='failed', " \
                            "details='Error while submitting job', " \
                            "updated_at='%s' " \
                       "WHERE id=%d" % \
                    (jobtracker.nowstr(), job_row['id']))
        jobtracker.query(queries)
Beispiel #3
0
def submit(job_row):
    """
    Submits a job to QueueManager, if successful will store returned queue id.

    Input:
        job_row: A row from the jobs table. The datafiles associated
            with this job will be submitted to be processed.
    Outputs:
        None
    """
    fns = pipeline_utils.get_fns_for_jobid(job_row['id'])
    bad_days = [
        '20170414', '20170419', '20170420', '20170423', '20170423', '20170427',
        '20170429', '20170503', '20170510', '20170516'
    ]
    bad_beams = ['b5', 'b6']
    for bad_day in bad_days:
        if bad_day in fns[0]:
            if (bad_beams[0] in fns[0]) or (bad_beams[1] in fns[0]):
                print "Files affected by the bad beams 5, 6 60Hz signal: ", fns
                print "Will delete the raw data files."
                queries = []
                arglist = []
                queries.append("INSERT INTO job_submits (" \
                                    "job_id, " \
                                    "status, " \
                                    "created_at, " \
                                    "updated_at, " \
                                    "details) " \
                                    "VALUES (?, ?, ?, ?, ?)" )
                arglist.append( ( job_row['id'], 'Beams 5 and 6', \
                                  jobtracker.nowstr(), jobtracker.nowstr(), \
                                  "Affected by 60Hz signal") )
                queries.append("UPDATE jobs " \
                               "SET status='terminal_failure', " \
                               "details='Beams 5 and 6 affected by 60Hz signal', " \
                               "updated_at=? " \
                               "WHERE id=?" )
                arglist.append((jobtracker.nowstr(), job_row['id']))
                jobtracker.execute(queries, arglist)
                return
    try:
        presubmission_check(fns)
        print "\t file has been checked"
        outdir, created = get_output_dir(fns)
        if not created:
            #current_usr = getpass.getuser()
            #errormsg = "Permission denied to %s when attempting to create output directory %s"%(current_usr,outdir)
            #f = open('/scratch/eparent/eparent/PALFA4/results/missing_permission.out','a')
            #f.write(errormsg+'\n')
            #f.close()
            print "Permission issues while creating output directory, skipping"
            pass

        # Attempt to submit the job
        if job_row['status'] == 'retrying':
            ##            ppn=2
            ppn = 1
            tfact = 1.25
        else:
            ppn = 1
            tfact = 1.
        if config.jobpooler.alternative_submit_script:
            print "Submitting:", config.jobpooler.alternative_submit_script
            queue_id = config.jobpooler.queue_manager.submit\
                        (fns, outdir, job_row['id'],\
                         script=config.jobpooler.alternative_submit_script,\
                         ppn=ppn)
        else:
            queue_id = config.jobpooler.queue_manager.submit(fns,
                                                             outdir,
                                                             job_row['id'],
                                                             ppn=ppn,
                                                             tfact=tfact)

        msg = "Submitted job to process:\n"
        msg += "\tJob ID: %d, Queue ID: %s\n" % (job_row['id'], queue_id)
        msg += "\tData file(s):\n"
        for fn in fns:
            msg += "\t%s\n" % fn
        jobpool_cout.outs(msg)
        queries = []
        queries.append("INSERT INTO job_submits (" \
                    "job_id, " \
                    "queue_id, " \
                    "output_dir, " \
                    "status, " \
                    "created_at, " \
                    "updated_at, " \
                    "details) " \
                    "VALUES (%d,'%s','%s','%s','%s','%s','%s')" % \
                    (job_row['id'], queue_id, outdir, 'running', \
                    jobtracker.nowstr(), jobtracker.nowstr(), \
                    'Job submitted to queue'))
        queries.append("UPDATE jobs " \
                     "SET status='submitted', " \
                     "details='Job submitted to queue', updated_at='%s' WHERE id=%d" % (jobtracker.nowstr(), job_row['id']))
        jobtracker.query(queries)

    except (FailedPreCheckError):
        # Error caught during presubmission check.
        exceptionmsgs = traceback.format_exception(*sys.exc_info())
        errormsg = "Job ID: %d " % job_row['id']
        errormsg += "failed presubmission check!\n\n"
        errormsg += "".join(exceptionmsgs)

        jobpool_cout.outs("Job ID: %d failed presubmission check!\n\t%s\n" % \
                          (job_row['id'], exceptionmsgs[-1]))

        #if config.basic.delete_rawdata:
        #    pipeline_utils.clean_up(job_row['id'])

        queries = []
        arglist = []
        queries.append("INSERT INTO job_submits (" \
                            "job_id, " \
                            "status, " \
                            "created_at, " \
                            "updated_at, " \
                            "details) " \
                      "VALUES (?, ?, ?, ?, ?)" )
        arglist.append( ( job_row['id'], 'precheck_failed', \
                        jobtracker.nowstr(), jobtracker.nowstr(), \
                        errormsg) )
        queries.append("UPDATE jobs " \
                       "SET status='terminal_failure', " \
                            "details='Failed presubmission check', " \
                            "updated_at=? " \
                       "WHERE id=?" )
        arglist.append((jobtracker.nowstr(), job_row['id']))
        jobtracker.execute(queries, arglist)
    except (queue_managers.QueueManagerJobFatalError,\
              datafile.DataFileError):
        # Error caught during job submission.
        exceptionmsgs = traceback.format_exception(*sys.exc_info())
        errormsg = "Error while submitting job!\n"
        errormsg += "\tJob ID: %d\n\n" % job_row['id']
        errormsg += "".join(exceptionmsgs)

        jobpool_cout.outs("Error while submitting job!\n" \
                          "\tJob ID: %d\n\t%s\n" % \
                          (job_row['id'], exceptionmsgs[-1]))

        queries = []
        arglist = []
        queries.append("INSERT INTO job_submits (" \
                            "job_id, " \
                            "status, " \
                            "created_at, " \
                            "updated_at, " \
                            "details) " \
                      "VALUES (?, ?, ?, ?, ?)" )
        arglist.append( ( job_row['id'], 'submission_failed', \
                        jobtracker.nowstr(), jobtracker.nowstr(), \
                        errormsg) )
        queries.append("UPDATE jobs " \
                       "SET status='failed', " \
                            "details='Error while submitting job', " \
                            "updated_at=? " \
                       "WHERE id=?" )
        arglist.append((jobtracker.nowstr(), job_row['id']))
        jobtracker.execute(queries, arglist)
    except queue_managers.QueueManagerNonFatalError:
        # Do nothing. Don't submit the job. Don't mark the job as 'submitted'.
        # Don't mark the job as 'failed'. The job submission will be retried.
        pass
    except queue_managers.QueueManagerFatalError:
        # A fatal error occurred. Re-raise!
        raise
    except (MissingFilesError):
        # Unexpected error
        exceptionmsgs = traceback.format_exception(*sys.exc_info())
        errormsg = "Job ID: %d " % job_row['id']
        errormsg += "Raw data files missing from /scratch/ area.!\n\n"
        errormsg += "".join(exceptionmsgs)
        queries = []
        arglist = []
        queries.append("INSERT INTO job_submits (" \
                            "job_id, " \
                            "status, " \
                            "created_at, " \
                            "updated_at, " \
                            "details) " \
                      "VALUES (?, ?, ?, ?, ?)" )
        arglist.append( ( job_row['id'], 'submission_failed', \
                        jobtracker.nowstr(), jobtracker.nowstr(), \
                        errormsg) )
        queries.append("UPDATE jobs " \
                       "SET status='failed',details='Error while submitting job',updated_at=? " \
                       "WHERE id=?" )
        arglist.append((jobtracker.nowstr(), job_row['id']))
        jobtracker.execute(queries, arglist)
        print errormsg
Beispiel #4
0
def submit(job_row):
    """
    Submits a job to QueueManager, if successful will store returned queue id.

    Input:
        job_row: A row from the jobs table. The datafiles associated
            with this job will be submitted to be processed.
    Outputs:
        None
    """
    fns = pipeline_utils.get_fns_for_jobid(job_row['id']) 
    
    try:
        presubmission_check(fns)
        outdir = get_output_dir(fns)
        # Attempt to submit the job
        queue_id = config.jobpooler.queue_manager.submit\
                            (fns, outdir, job_row['id'])
    except (FailedPreCheckError):
        # Error caught during presubmission check.
        exceptionmsgs = traceback.format_exception(*sys.exc_info())
        errormsg = "Job ID: %d " % job_row['id']
        errormsg += "failed presubmission check!\n\n"
        errormsg += "".join(exceptionmsgs)

        jobpool_cout.outs("Job ID: %d failed presubmission check!\n\t%s\n" % \
                          (job_row['id'], exceptionmsgs[-1])) 
        
        if config.email.send_on_terminal_failures:
            # Send error email
            msg  = "Presubmission check failed!\n"
            msg += "Job ID: %d\n\n" % \
                    (job_row['id'])
            msg += errormsg
            msg += "\n*** Job has been terminally failed. ***\n"
            msg += "*** Job will NOT be re-submitted! ***\n"
            if config.basic.delete_rawdata:
                jobpool_cout.outs("Job #%d will NOT be retried. " \
                                    "Data files will be deleted." % job_row['id'])
                msg += "*** Raw data files will be deleted. ***\n"
            else:
                jobpool_cout.outs("Job #%d will NOT be retried. " % job_row['id'])
            notification = mailer.ErrorMailer(msg, \
                            subject="Job failed presubmission check - Terminal")
            notification.send()

        if config.basic.delete_rawdata:
            pipeline_utils.clean_up(job_row['id'])

        queries = []
        arglist = []
        queries.append("INSERT INTO job_submits (" \
                            "job_id, " \
                            "status, " \
                            "created_at, " \
                            "updated_at, " \
                            "details) " \
                      "VALUES (?, ?, ?, ?, ?)" )
        arglist.append( ( job_row['id'], 'precheck_failed', \
                        jobtracker.nowstr(), jobtracker.nowstr(), \
                        errormsg) )
        queries.append("UPDATE jobs " \
                       "SET status='terminal_failure', " \
                            "details='Failed presubmission check', " \
                            "updated_at=? " \
                       "WHERE id=?" )
        arglist.append( (jobtracker.nowstr(), job_row['id']) )
        jobtracker.execute(queries, arglist)
    except (queue_managers.QueueManagerJobFatalError,\
              datafile.DataFileError):
        # Error caught during job submission.
        exceptionmsgs = traceback.format_exception(*sys.exc_info())
        errormsg  = "Error while submitting job!\n"
        errormsg += "\tJob ID: %d\n\n" % job_row['id']
        errormsg += "".join(exceptionmsgs)

        jobpool_cout.outs("Error while submitting job!\n" \
                          "\tJob ID: %d\n\t%s\n" % \
                          (job_row['id'], exceptionmsgs[-1])) 
        
        queries = []
        arglist = []
        queries.append("INSERT INTO job_submits (" \
                            "job_id, " \
                            "status, " \
                            "created_at, " \
                            "updated_at, " \
                            "details) " \
                      "VALUES (?, ?, ?, ?, ?)" )
        arglist.append( ( job_row['id'], 'submission_failed', \
                        jobtracker.nowstr(), jobtracker.nowstr(), \
                        errormsg) )
        queries.append("UPDATE jobs " \
                       "SET status='failed', " \
                            "details='Error while submitting job', " \
                            "updated_at=? " \
                       "WHERE id=?" )
        arglist.append( (jobtracker.nowstr(), job_row['id']) )
        jobtracker.execute(queries, arglist)
    except queue_managers.QueueManagerNonFatalError:
        # Do nothing. Don't submit the job. Don't mark the job as 'submitted'.
        # Don't mark the job as 'failed'. The job submission will be retried.
        pass
    except queue_managers.QueueManagerFatalError:
        # A fatal error occurred. Re-raise!
        raise
    else: 
        # No error occurred
        msg  = "Submitted job to process:\n" 
        msg += "\tJob ID: %d, Queue ID: %s\n" % (job_row['id'], queue_id) 
        msg += "\tData file(s):\n" 
        for fn in fns:
            msg += "\t%s\n" % fn
        jobpool_cout.outs(msg)
        queries = []
        queries.append("INSERT INTO job_submits (" \
                            "job_id, " \
                            "queue_id, " \
                            "output_dir, " \
                            "status, " \
                            "created_at, " \
                            "updated_at, " \
                            "details) " \
                      "VALUES (%d,'%s','%s','%s','%s','%s','%s')" % \
                      (job_row['id'], queue_id, outdir, 'running', \
                        jobtracker.nowstr(), jobtracker.nowstr(), \
                        'Job submitted to queue'))
        queries.append("UPDATE jobs " \
                       "SET status='submitted', " \
                            "details='Job submitted to queue', " \
                            "updated_at='%s' " \
                       "WHERE id=%d" % \
                    (jobtracker.nowstr(), job_row['id']))
        jobtracker.query(queries)
Beispiel #5
0
def submit(job_row):
    """
    Submits a job to QueueManager, if successful will store returned queue id.

    Input:
        job_row: A row from the jobs table. The datafiles associated
            with this job will be submitted to be processed.
    Outputs:
        None
    """
    fns = pipeline_utils.get_fns_for_jobid(job_row['id'])

    try:
        outdir = get_output_dir(fns)
        # Submit job
        queue_id = config.jobpooler.queue_manager.submit(fns, outdir)
        msg = "Submitted job to process:\n"
        msg += "\tJob ID: %d, Queue ID: %s\n" % (job_row['id'], queue_id)
        msg += "\tData file(s):\n"
        for fn in fns:
            msg += "\t%s\n" % fn
        jobpool_cout.outs(msg)
        queries = []
        queries.append("INSERT INTO job_submits (" \
                            "job_id, " \
                            "queue_id, " \
                            "output_dir, " \
                            "status, " \
                            "created_at, " \
                            "updated_at, " \
                            "details) " \
                      "VALUES (%d,'%s','%s','%s','%s','%s','%s')" % \
                      (job_row['id'], queue_id, outdir, 'running', \
                        jobtracker.nowstr(), jobtracker.nowstr(), \
                        'Job submitted to queue'))
        queries.append("UPDATE jobs " \
                       "SET status='submitted', " \
                            "details='Job submitted to queue', " \
                            "updated_at='%s' " \
                       "WHERE id=%d" % \
                    (jobtracker.nowstr(), job_row['id']))
        jobtracker.query(queries)
    except pipeline_utils.PipelineError:
        # Error caught during job submission.
        exceptionmsgs = traceback.format_exception(*sys.exc_info())
        errormsg = "Error while submitting job!\n"
        errormsg += "\tJob ID: %d\n\n" % job_row['id']
        errormsg += "".join(exceptionmsgs)

        jobpool_cout.outs("Error while submitting job!\n" \
                          "\tJob ID: %d\n\t%s\n" % \
                          (job_row['id'], exceptionmsgs[-1]))

        queries = []
        queries.append("INSERT INTO job_submits (" \
                            "job_id, " \
                            "status, " \
                            "created_at, " \
                            "updated_at, " \
                            "details) " \
                      "VALUES (%d,'%s','%s','%s','%s')" % \
                      (job_row['id'], 'submission_failed', \
                        jobtracker.nowstr(), jobtracker.nowstr(), \
                        errormsg))
        queries.append("UPDATE jobs " \
                       "SET status='failed', " \
                            "details='Error while submitting job', " \
                            "updated_at='%s' " \
                       "WHERE id=%d" % \
                    (jobtracker.nowstr(), job_row['id']))
        jobtracker.query(queries)
Beispiel #6
0
def submit(job_row):
    """
    Submits a job to QueueManager, if successful will store returned queue id.

    Input:
        job_row: A row from the jobs table. The datafiles associated
            with this job will be submitted to be processed.
    Outputs:
        None
    """
    fns = pipeline_utils.get_fns_for_jobid(job_row['id'])

    try:
        presubmission_check(fns)
        outdir = get_output_dir(fns)
        # Attempt to submit the job
        queue_id = config.jobpooler.queue_manager.submit\
                            (fns, outdir, job_row['id'])
    except (FailedPreCheckError):
        # Error caught during presubmission check.
        exceptionmsgs = traceback.format_exception(*sys.exc_info())
        errormsg = "Job ID: %d " % job_row['id']
        errormsg += "failed presubmission check!\n\n"
        errormsg += "".join(exceptionmsgs)

        jobpool_cout.outs("Job ID: %d failed presubmission check!\n\t%s\n" % \
                          (job_row['id'], exceptionmsgs[-1]))

        if config.email.send_on_terminal_failures:
            # Send error email
            msg = "Presubmission check failed!\n"
            msg += "Job ID: %d\n\n" % \
                    (job_row['id'])
            msg += errormsg
            msg += "\n*** Job has been terminally failed. ***\n"
            msg += "*** Job will NOT be re-submitted! ***\n"
            if config.basic.delete_rawdata:
                jobpool_cout.outs("Job #%d will NOT be retried. " \
                                    "Data files will be deleted." % job_row['id'])
                msg += "*** Raw data files will be deleted. ***\n"
            else:
                jobpool_cout.outs("Job #%d will NOT be retried. " %
                                  job_row['id'])
            notification = mailer.ErrorMailer(msg, \
                            subject="Job failed presubmission check - Terminal")
            notification.send()

        if config.basic.delete_rawdata:
            pipeline_utils.clean_up(job_row['id'])

        queries = []
        arglist = []
        queries.append("INSERT INTO job_submits (" \
                            "job_id, " \
                            "status, " \
                            "created_at, " \
                            "updated_at, " \
                            "details) " \
                      "VALUES (?, ?, ?, ?, ?)" )
        arglist.append( ( job_row['id'], 'precheck_failed', \
                        jobtracker.nowstr(), jobtracker.nowstr(), \
                        errormsg) )
        queries.append("UPDATE jobs " \
                       "SET status='terminal_failure', " \
                            "details='Failed presubmission check', " \
                            "updated_at=? " \
                       "WHERE id=?" )
        arglist.append((jobtracker.nowstr(), job_row['id']))
        jobtracker.execute(queries, arglist)
    except (queue_managers.QueueManagerJobFatalError,\
              datafile.DataFileError):
        # Error caught during job submission.
        exceptionmsgs = traceback.format_exception(*sys.exc_info())
        errormsg = "Error while submitting job!\n"
        errormsg += "\tJob ID: %d\n\n" % job_row['id']
        errormsg += "".join(exceptionmsgs)

        jobpool_cout.outs("Error while submitting job!\n" \
                          "\tJob ID: %d\n\t%s\n" % \
                          (job_row['id'], exceptionmsgs[-1]))

        queries = []
        arglist = []
        queries.append("INSERT INTO job_submits (" \
                            "job_id, " \
                            "status, " \
                            "created_at, " \
                            "updated_at, " \
                            "details) " \
                      "VALUES (?, ?, ?, ?, ?)" )
        arglist.append( ( job_row['id'], 'submission_failed', \
                        jobtracker.nowstr(), jobtracker.nowstr(), \
                        errormsg) )
        queries.append("UPDATE jobs " \
                       "SET status='failed', " \
                            "details='Error while submitting job', " \
                            "updated_at=? " \
                       "WHERE id=?" )
        arglist.append((jobtracker.nowstr(), job_row['id']))
        jobtracker.execute(queries, arglist)
    except queue_managers.QueueManagerNonFatalError:
        # Do nothing. Don't submit the job. Don't mark the job as 'submitted'.
        # Don't mark the job as 'failed'. The job submission will be retried.
        pass
    except queue_managers.QueueManagerFatalError:
        # A fatal error occurred. Re-raise!
        raise
    else:
        # No error occurred
        msg = "Submitted job to process:\n"
        msg += "\tJob ID: %d, Queue ID: %s\n" % (job_row['id'], queue_id)
        msg += "\tData file(s):\n"
        for fn in fns:
            msg += "\t%s\n" % fn
        jobpool_cout.outs(msg)
        queries = []
        queries.append("INSERT INTO job_submits (" \
                            "job_id, " \
                            "queue_id, " \
                            "output_dir, " \
                            "status, " \
                            "created_at, " \
                            "updated_at, " \
                            "details) " \
                      "VALUES (%d,'%s','%s','%s','%s','%s','%s')" % \
                      (job_row['id'], queue_id, outdir, 'running', \
                        jobtracker.nowstr(), jobtracker.nowstr(), \
                        'Job submitted to queue'))
        queries.append("UPDATE jobs " \
                       "SET status='submitted', " \
                            "details='Job submitted to queue', " \
                            "updated_at='%s' " \
                       "WHERE id=%d" % \
                    (jobtracker.nowstr(), job_row['id']))
        jobtracker.query(queries)
Beispiel #7
0
def submit(job_row):
    """
    Submits a job to QueueManager, if successful will store returned queue id.

    Input:
        job_row: A row from the jobs table. The datafiles associated
            with this job will be submitted to be processed.
    Outputs:
        None
    """
    fns = pipeline_utils.get_fns_for_jobid(job_row['id'])

    try:
        outdir = get_output_dir(fns)
        # Attempt to submit the job
        queue_id = config.jobpooler.queue_manager.submit\
                            (fns, outdir, job_row['id'])
    except (queue_managers.QueueManagerJobFatalError,\
              datafile.DataFileError):
        # Error caught during job submission.
        exceptionmsgs = traceback.format_exception(*sys.exc_info())
        errormsg = "Error while submitting job!\n"
        errormsg += "\tJob ID: %d\n\n" % job_row['id']
        errormsg += "".join(exceptionmsgs)

        jobpool_cout.outs("Error while submitting job!\n" \
                          "\tJob ID: %d\n\t%s\n" % \
                          (job_row['id'], exceptionmsgs[-1]))

        queries = []
        arglist = []
        queries.append("INSERT INTO job_submits (" \
                            "job_id, " \
                            "status, " \
                            "created_at, " \
                            "updated_at, " \
                            "details) " \
                      "VALUES (?, ?, ?, ?, ?)" )
        arglist.append( ( job_row['id'], 'submission_failed', \
                        jobtracker.nowstr(), jobtracker.nowstr(), \
                        errormsg) )
        queries.append("UPDATE jobs " \
                       "SET status='failed', " \
                            "details='Error while submitting job', " \
                            "updated_at=? " \
                       "WHERE id=?" )
        arglist.append((jobtracker.nowstr(), job_row['id']))
        jobtracker.execute(queries, arglist)
    except queue_managers.QueueManagerNonFatalError:
        # Do nothing. Don't submit the job. Don't mark the job as 'submitted'.
        # Don't mark the job as 'failed'. The job submission will be retried.
        pass
    except queue_managers.QueueManagerFatalError:
        # A fatal error occurred. Re-raise!
        raise
    else:
        # No error occurred
        msg = "Submitted job to process:\n"
        msg += "\tJob ID: %d, Queue ID: %s\n" % (job_row['id'], queue_id)
        msg += "\tData file(s):\n"
        for fn in fns:
            msg += "\t%s\n" % fn
        jobpool_cout.outs(msg)
        queries = []
        queries.append("INSERT INTO job_submits (" \
                            "job_id, " \
                            "queue_id, " \
                            "output_dir, " \
                            "status, " \
                            "created_at, " \
                            "updated_at, " \
                            "details) " \
                      "VALUES (%d,'%s','%s','%s','%s','%s','%s')" % \
                      (job_row['id'], queue_id, outdir, 'running', \
                        jobtracker.nowstr(), jobtracker.nowstr(), \
                        'Job submitted to queue'))
        queries.append("UPDATE jobs " \
                       "SET status='submitted', " \
                            "details='Job submitted to queue', " \
                            "updated_at='%s' " \
                       "WHERE id=%d" % \
                    (jobtracker.nowstr(), job_row['id']))
        jobtracker.query(queries)
Beispiel #8
0
def submit(job_row):
    """
    Submits a job to QueueManager, if successful will store returned queue id.

    Input:
        job_row: A row from the jobs table. The datafiles associated
            with this job will be submitted to be processed.
    Outputs:
        None
    """
    fns = pipeline_utils.get_fns_for_jobid(job_row["id"])

    try:
        outdir = get_output_dir(fns)
        # Attempt to submit the job
        queue_id = config.jobpooler.queue_manager.submit(fns, outdir, job_row["id"])
    except (queue_managers.QueueManagerJobFatalError, datafile.DataFileError):
        # Error caught during job submission.
        exceptionmsgs = traceback.format_exception(*sys.exc_info())
        errormsg = "Error while submitting job!\n"
        errormsg += "\tJob ID: %d\n\n" % job_row["id"]
        errormsg += "".join(exceptionmsgs)

        jobpool_cout.outs("Error while submitting job!\n" "\tJob ID: %d\n\t%s\n" % (job_row["id"], exceptionmsgs[-1]))

        queries = []
        arglist = []
        queries.append(
            "INSERT INTO job_submits ("
            "job_id, "
            "status, "
            "created_at, "
            "updated_at, "
            "details) "
            "VALUES (?, ?, ?, ?, ?)"
        )
        arglist.append((job_row["id"], "submission_failed", jobtracker.nowstr(), jobtracker.nowstr(), errormsg))
        queries.append(
            "UPDATE jobs " "SET status='failed', " "details='Error while submitting job', " "updated_at=? " "WHERE id=?"
        )
        arglist.append((jobtracker.nowstr(), job_row["id"]))
        jobtracker.execute(queries, arglist)
    except queue_managers.QueueManagerNonFatalError:
        # Do nothing. Don't submit the job. Don't mark the job as 'submitted'.
        # Don't mark the job as 'failed'. The job submission will be retried.
        pass
    except queue_managers.QueueManagerFatalError:
        # A fatal error occurred. Re-raise!
        raise
    else:
        # No error occurred
        msg = "Submitted job to process:\n"
        msg += "\tJob ID: %d, Queue ID: %s\n" % (job_row["id"], queue_id)
        msg += "\tData file(s):\n"
        for fn in fns:
            msg += "\t%s\n" % fn
        jobpool_cout.outs(msg)
        queries = []
        queries.append(
            "INSERT INTO job_submits ("
            "job_id, "
            "queue_id, "
            "output_dir, "
            "status, "
            "created_at, "
            "updated_at, "
            "details) "
            "VALUES (%d,'%s','%s','%s','%s','%s','%s')"
            % (
                job_row["id"],
                queue_id,
                outdir,
                "running",
                jobtracker.nowstr(),
                jobtracker.nowstr(),
                "Job submitted to queue",
            )
        )
        queries.append(
            "UPDATE jobs "
            "SET status='submitted', "
            "details='Job submitted to queue', "
            "updated_at='%s' "
            "WHERE id=%d" % (jobtracker.nowstr(), job_row["id"])
        )
        jobtracker.query(queries)
Beispiel #9
0
def submit(job_row):
    """
    Submits a job to QueueManager, if successful will store returned queue id.

    Input:
        job_row: A row from the jobs table. The datafiles associated
            with this job will be submitted to be processed.
    Outputs:
        None
    """
    fns = pipeline_utils.get_fns_for_jobid(job_row["id"])

    script = os.path.join(config.basic.pipelinedir, "bin", "%s_search.py" % config.basic.survey)

    # Specify requested resources for job submission
    if job_row["task"] == "rfifind":
        res = [4 * 60 * 60, 1024, 25]
    elif "search" in job_row["task"]:
        res = [165240, 1024, 28]  # 45.9 hrs
    elif job_row["task"] == "sifting":  # Sifting should be quick
        res = [30 * 60, 256, 5]
    elif "folding" in job_row["task"]:
        res = [96 * 60 * 60, 3000, 28]
    # elif job_row['task']=='tidyup':
    #    res = [30*60, 256, 5]
    options = job_row["task"]

    try:
        SPAN512_job.presubmission_check(fns)
        outdir = SPAN512_job.get_output_dir(fns)
        # Attempt to submit the job
        queue_id = config.jobpooler.queue_manager.submit(
            fns, outdir, job_row["id"], resources=res, script=script, opts=options
        )
    except (FailedPreCheckError):
        # Error caught during presubmission check.
        exceptionmsgs = traceback.format_exception(*sys.exc_info())
        errormsg = "Job ID: %d " % job_row["id"]
        errormsg += "failed presubmission check!\n\n"
        errormsg += "".join(exceptionmsgs)

        jobpool_cout.outs("Job ID: %d failed presubmission check!\n\t%s\n" % (job_row["id"], exceptionmsgs[-1]))

        if config.email.send_on_terminal_failures:
            # Send error email
            msg = "Presubmission check failed!\n"
            msg += "Job ID: %d\n\n" % (job_row["id"])
            msg += errormsg
            msg += "\n*** Job has been terminally failed. ***\n"
            msg += "*** Job will NOT be re-submitted! ***\n"
            if config.basic.delete_rawdata:
                jobpool_cout.outs("Job #%d will NOT be retried. " "Data files will be deleted." % job_row["id"])
                msg += "*** Raw data files will be deleted. ***\n"
            else:
                jobpool_cout.outs("Job #%d will NOT be retried. " % job_row["id"])
            notification = mailer.ErrorMailer(msg, subject="Job failed presubmission check - Terminal")
            notification.send()

        if config.basic.delete_rawdata:
            pipeline_utils.clean_up(job_row["id"])

        queries = []
        arglist = []
        queries.append(
            "INSERT INTO job_submits ("
            "job_id, "
            "status, "
            "created_at, "
            "updated_at, "
            "details) "
            "VALUES (%d, %s, '%s', '%s', %s)"
            % (job_row["id"], "precheck_failed", jobtracker.nowstr(), jobtracker.nowstr(), errormsg)
        )
        queries.append(
            "UPDATE jobs "
            "SET status='terminal_failure', "
            "details='Failed presubmission check', "
            "updated_at='%s'"
            "WHERE id=%d" % (jobtracker.nowstr(), job_row["id"])
        )
        jobtracker.query(queries)

    except (queue_managers.QueueManagerJobFatalError, datafile.DataFileError):
        # Error caught during job submission.
        exceptionmsgs = traceback.format_exception(*sys.exc_info())
        errormsg = "Error while submitting job!\n"
        errormsg += "\tJob ID: %d\n\n" % job_row["id"]
        errormsg += "".join(exceptionmsgs)

        jobpool_cout.outs("Error while submitting job!\n" "\tJob ID: %d\n\t%s\n" % (job_row["id"], exceptionmsgs[-1]))

        queries = []
        arglist = []
        queries.append(
            "INSERT INTO job_submits ("
            "job_id, "
            "status, "
            "created_at, "
            "updated_at, "
            "details) "
            "VALUES (%d, %s, '%s', '%s', %s)"
            % (job_row["id"], "submission_failed", jobtracker.nowstr(), jobtracker.nowstr(), errormsg)
        )
        queries.append(
            "UPDATE jobs "
            "SET status='failed', "
            "details='Error while submitting job', "
            "updated_at='%s' "
            "WHERE id=%d" % (jobtracker.nowstr(), job_row["id"])
        )
        jobtracker.execute(queries)
    except queue_managers.QueueManagerNonFatalError:
        # Do nothing. Don't submit the job. Don't mark the job as 'submitted'.
        # Don't mark the job as 'failed'. The job submission will be retried.
        pass
    except queue_managers.QueueManagerFatalError:
        # A fatal error occurred. Re-raise!
        raise
    else:
        # No error occurred
        msg = "Submitted job to process:\n"
        msg += "\tJob ID: %d, Queue ID: %s\n" % (job_row["id"], queue_id)
        msg += "\tData file(s):\n"
        for fn in fns:
            msg += "\t%s\n" % fn
        jobpool_cout.outs(msg)
        queries = []
        queries.append(
            "INSERT INTO job_submits ("
            "job_id, "
            "queue_id, "
            "output_dir, "
            "status, "
            "created_at, "
            "updated_at, "
            "details) "
            "VALUES (%d,'%s','%s','%s','%s','%s','%s')"
            % (
                job_row["id"],
                queue_id,
                outdir,
                "running",
                jobtracker.nowstr(),
                jobtracker.nowstr(),
                "Job submitted to queue",
            )
        )
        queries.append(
            "UPDATE jobs "
            "SET status='submitted', "
            "details='Job submitted to queue', "
            "updated_at='%s' "
            "WHERE id=%d" % (jobtracker.nowstr(), job_row["id"])
        )
        jobtracker.query(queries)