コード例 #1
0
def test_single_job_fail(tmpdir):
    tmpdir = str(tmpdir)
    target_file = os.path.join(tmpdir, 'result.txt')
    db_file = os.path.join(tmpdir, "test.db")
    assert not os.path.exists(target_file)

    # create a JIP database and a session
    jip.db.init(db_file)
    # create the cluster instance
    c = cl.LocalCluster()

    # create the pipeline
    p = jip.Pipeline()
    p.job(dir=tmpdir).bash('touch ${input}; exit 1;', outfile=target_file)
    p.context(locals())

    # create the jobs
    jobs = jip.create_jobs(p)

    # iterate the executions and pass the session so all jobs are stored
    for e in jip.create_executions(jobs, save=True):
        jip.submit_job(e.job, cluster=c)

    c.wait()
    # now the file should be there
    assert not os.path.exists(target_file)

    # we should also have the log files
    assert os.path.exists(os.path.join(tmpdir, "jip-1.out"))
    assert os.path.exists(os.path.join(tmpdir, "jip-1.err"))
    # and we should have one job in Done state in our database
    # we do the query with a fresh session though
    job = jip.db.get(1)
    assert job is not None
    assert job.state == jip.db.STATE_FAILED
コード例 #2
0
def test_job_hierarchy_execution_with_pipes_and_dispatching(tmpdir):
    print ">>>", tmpdir
    tmpdir = str(tmpdir)
    target_file = os.path.join(tmpdir, 'result')
    db_file = os.path.join(tmpdir, "test.db")

    # create a JIP database and a session
    jip.db.init(db_file)
    session = jip.db.create_session()

    # create the cluster instance
    c = cl.LocalCluster()

    # create the pipeline
    p = jip.Pipeline()
    a = p.job(dir=tmpdir).bash('echo "hello world"', output="${target_file}.1")
    b = p.job(dir=tmpdir).bash('wc -w ${input}',
                               input=a,
                               output="${target_file}.2")
    l = p.job(dir=tmpdir).bash('echo "Other" > ${target_file}.3')

    a | b
    p.context(locals())

    # create the jobs
    jobs = jip.create_jobs(p)
    assert len(jobs) == 3

    # iterate the executions and pass the session so all jobs are stored
    execs = 0
    for e in jip.create_executions(jobs, save=True):
        jip.submit_job(e.job, save=True, cluster=c)
        execs += 1
    assert execs == 2
    c.wait()
    # now the file should be there
    assert os.path.exists(target_file + ".1")
    assert os.path.exists(target_file + ".2")
    assert os.path.exists(target_file + ".3")

    # we should also have the log files
    assert os.path.exists(os.path.join(tmpdir, "jip-1.out"))
    assert os.path.exists(os.path.join(tmpdir, "jip-1.err"))
    assert os.path.exists(os.path.join(tmpdir, "jip-3.out"))
    assert os.path.exists(os.path.join(tmpdir, "jip-3.err"))
    # and we should have one job in Done state in our database
    # we do the query with a fresh session though
    find = jip.db.get
    assert find(1).state == jip.db.STATE_DONE
    assert find(2).state == jip.db.STATE_DONE
    assert find(3).state == jip.db.STATE_DONE

    # check the content of the output files
    assert open(target_file + ".1").read() == "hello world\n"
    assert open(target_file + ".2").read().strip() == "2"
    assert open(target_file + ".3").read() == "Other\n"
コード例 #3
0
def test_single_dummydirect(tmpdir):
    tmpdir = str(tmpdir)
    c = cl.LocalCluster()
    j = jip.db.Job()
    j.stdout = os.path.join(tmpdir, "out.txt")
    j.stderr = os.path.join(tmpdir, "err.txt")
    j.get_cluster_command = lambda: "echo 'hello world'"
    c.submit(j)
    c.wait()
    with open(os.path.join(tmpdir, 'out.txt')) as of:
        assert of.readlines()[0] == "hello world\n"
コード例 #4
0
def test_job_cancelation(tmpdir):
    tmpdir = str(tmpdir)
    db_file = os.path.join(tmpdir, "test.db")

    # create a JIP database and a session
    jip.db.init(db_file)
    session = jip.db.create_session()

    # create the cluster instance
    c = cl.LocalCluster()

    # create the pipeline
    p = jip.Pipeline()
    first = p.job(dir=tmpdir).bash('sleep 10')
    p.job(dir=tmpdir).bash('sleep 5').depends_on(first)
    p.context(locals())

    # create the jobs
    jobs = jip.create_jobs(p)

    # iterate the executions and pass the session so all jobs are stored
    for e in jip.create_executions(jobs, save=True):
        jip.submit_job(e.job, save=True, cluster=c)
    # sleep for a second to give the job time to start
    time.sleep(0.1)

    # cancel the job
    print jobs, jobs[0].id
    job = jip.db.get(1)
    jip.jobs.cancel(job, cluster=c, save=True)

    c.wait()

    # and we should have one job in Failed state in our database
    # we do the query with a fresh session though
    job_1 = jip.db.get(1)
    job_2 = jip.db.get(2)
    # print the log files
    print ">>>JOB 1 STD ERR LOG"
    print open(c.resolve_log(job, job_1.stderr)).read()
    print ">>>JOB 1 STD OUT LOG"
    print open(c.resolve_log(job, job_1.stdout)).read()

    assert job_1.state == jip.db.STATE_CANCELED
    assert job_2.state == jip.db.STATE_CANCELED
コード例 #5
0
def test_single_job_master_termination(tmpdir):
    tmpdir = str(tmpdir)
    db_file = os.path.join(tmpdir, "test.db")

    # create a JIP database and a session
    jip.db.init(db_file)
    session = jip.db.create_session()

    # create the cluster instance
    c = cl.LocalCluster()

    # create the pipeline
    p = jip.Pipeline()
    p.job(dir=tmpdir).bash('sleep 30')
    p.context(locals())

    # create the jobs
    jobs = jip.create_jobs(p)

    # iterate the executions and pass the session so all jobs are stored
    for e in jip.create_executions(jobs, save=True):
        jip.submit_job(e.job, save=True, cluster=c)
    # sleep for a second to give the job time to start
    time.sleep(1)

    c.shutdown()

    # and we should have one job in Failed state in our database
    # we do the query with a fresh session though
    job = jip.db.get(1)
    # print the log files
    print ">>>STD ERR LOG"
    print open(c.resolve_log(job, job.stderr)).read()
    print ">>>STD OUT LOG"
    print open(c.resolve_log(job, job.stdout)).read()
    assert job is not None
    assert job.state == jip.db.STATE_FAILED
コード例 #6
0
import jip
import os
import jip.grids as cl
from jip.db import Job
import sys

if __name__ == "__main__":
    num_runs = 10 if len(sys.argv) == 1 else int(sys.argv[1])
    db_file = os.path.abspath("test.db")

    # create a JIP database and a session
    jip.db.init(db_file)
    session = jip.db.create_session()

    # create the cluster instance
    c = cl.LocalCluster()

    # create the pipeline

    for i in range(num_runs):
        print("### CREATE RUN", i)
        target_file = "result.%d" % i
        p = jip.Pipeline()
        a = p.bash('echo "hello world" > ${outfile}; sleep 1',
                   outfile="${target_file}.1.%d" % i)
        b = p.bash('wc -w ${input}; sleep 1',
                   input=a, output="${target_file}.2.%d" % i)
        l = p.bash('echo "Other" > ${outfile}; sleep 1',
                   outfile="${target_file}.3.%d" % i)
        p.context(locals())