def test_res7(self):
     rm = taskrun.ResourceManager(
         taskrun.CounterResource('core', 9999, 4),
         taskrun.CounterResource('mem', 9999, 8000))
     ob = ComparisonCheckObserver(8, [
         '+t1 < +t2 +t3 +t4 -t4 -t3 -t2 -t1',
         '+t2 < +t3 +t4 -t4 -t3 -t2 -t1', '+t3 < +t4 -t4 -t3 -t2 -t1',
         '+t4 < -t4 -t3 -t2 -t1'
     ],
                                  verbose=False)
     tm = taskrun.TaskManager(resource_manager=rm, observers=[ob])
     t1 = taskrun.ProcessTask(tm, 't1', 'sleep 0.01')
     t1.resources = {'core': 1, 'mem': 0}
     t1.priority = 4
     t2 = taskrun.ProcessTask(tm, 't2', 'sleep 0.02')
     t2.resources = {'core': 1, 'mem': 0}
     t2.priority = 3
     t3 = taskrun.ProcessTask(tm, 't3', 'sleep 0.03')
     t3.resources = {'core': 1, 'mem': 0}
     t3.priority = 2
     t4 = taskrun.ProcessTask(tm, 't4', 'sleep 0.04')
     t4.resources = {'core': 1, 'mem': 0}
     t4.priority = 1
     tm.run_tasks()
     self.assertTrue(ob.ok())
Beispiel #2
0
 def test_blind_sequence(self):
     ob = OrderCheckObserver(['@t1', '@t2', '+t1', '!t1', '+t2', '!t2'])
     tm = taskrun.TaskManager(observers=[ob], failure_mode='blind_continue')
     t1 = taskrun.ProcessTask(tm, 't1', 'false')
     t2 = taskrun.ProcessTask(tm, 't2', 'false')
     t2.add_dependency(t1)
     tm.run_tasks()
     self.assertTrue(ob.ok())
Beispiel #3
0
 def test_dep3(self):
   ob = OrderCheckObserver(['@t1', '@t2', '+t2', '-t2', '+t1', '-t1'])
   tm = taskrun.TaskManager(observers=[ob])
   t1 = taskrun.ProcessTask(tm, 't1', 'sleep 0.01')
   t2 = taskrun.ProcessTask(tm, 't2', 'sleep 0.01')
   t1.add_dependency(t2)
   tm.run_tasks()
   self.assertTrue(ob.ok())
Beispiel #4
0
 def test_pri2(self):
     ob = ComparisonCheckObserver(4, ['+t2 < -t2 +t1 -t1', '+t1 < -t1'],
                                  verbose=False)
     tm = taskrun.TaskManager(observers=[ob])
     t1 = taskrun.ProcessTask(tm, 't1', 'sleep 0.01')
     t2 = taskrun.ProcessTask(tm, 't2', 'sleep 0.02')
     t1.priority = 1
     t2.priority = 2
     tm.run_tasks()
     self.assertTrue(ob.ok())
Beispiel #5
0
 def test_nocycle1(self):
   tm = taskrun.TaskManager()
   t1 = taskrun.ProcessTask(tm, 't1', '')
   t2 = taskrun.ProcessTask(tm, 't2', '')
   t3 = taskrun.ProcessTask(tm, 't3', '')
   t4 = taskrun.ProcessTask(tm, 't4', '')
   t5 = taskrun.ProcessTask(tm, 't5', '')
   t1.add_dependency(t2)
   t2.add_dependency(t3)
   t3.add_dependency(t4)
   t4.add_dependency(t5)
Beispiel #6
0
 def test_pri5(self):
     tm = taskrun.TaskManager(priority_levels=3)
     t1 = taskrun.ProcessTask(tm, 't1', 'sleep 0.01')
     t2 = taskrun.ProcessTask(tm, 't2', 'sleep 0.02')
     t1.priority = 2
     t2.priority = 1
     success = True
     try:
         tm.run_tasks()
     except AssertionError:
         success = False
     self.assertTrue(success)
Beispiel #7
0
 def test_deepcyclic(self):
   tm = taskrun.TaskManager()
   t1 = taskrun.ProcessTask(tm, 't1', '')
   t2 = taskrun.ProcessTask(tm, 't2', '')
   t3 = taskrun.ProcessTask(tm, 't3', '')
   t4 = taskrun.ProcessTask(tm, 't4', '')
   t5 = taskrun.ProcessTask(tm, 't5', '')
   t1.add_dependency(t2)
   t2.add_dependency(t3)
   t3.add_dependency(t4)
   t4.add_dependency(t5)
   with self.assertRaises(ValueError):
     t5.add_dependency(t1)
    def test_nooutputfiles(self):
        fd, file1 = tempfile.mkstemp()
        fd, file2 = tempfile.mkstemp()
        fd, file3 = tempfile.mkstemp()
        os.remove(file3)

        with open(file1, 'w') as fd:
            print('hello file1', file=fd)
        with open(file2, 'w') as fd:
            print('hello file2', file=fd)
        time.sleep(0.01)

        ob = taskrun.FileCleanupObserver()
        tm = taskrun.TaskManager(observers=[ob])
        t1 = taskrun.ProcessTask(tm, 't1', 'false'.format(file1, file2, file3))
        t1.add_condition(
            taskrun.FileModificationCondition([file1, file2], [file3]))

        tm.run_tasks()
        self.assertTrue(os.path.isfile(file1))
        self.assertTrue(os.path.isfile(file2))
        self.assertFalse(os.path.isfile(file3))

        # remove all files
        os.remove(file1)
        os.remove(file2)
Beispiel #9
0
 def test_aggressive_none(self):
     ob = OrderCheckObserver(['@t1', '+t1', '-t1'])
     tm = taskrun.TaskManager(observers=[ob],
                              failure_mode='aggressive_fail')
     t1 = taskrun.ProcessTask(tm, 't1', 'true')
     tm.run_tasks()
     self.assertTrue(ob.ok())
Beispiel #10
0
 def test_active_single(self):
     ob = OrderCheckObserver(['@t1', '+t1', '!t1'])
     tm = taskrun.TaskManager(observers=[ob],
                              failure_mode='active_continue')
     t1 = taskrun.ProcessTask(tm, 't1', 'false')
     tm.run_tasks()
     self.assertTrue(ob.ok())
Beispiel #11
0
 def test_res1(self):
     rm = taskrun.ResourceManager(
         taskrun.CounterResource('core', 9999, 4),
         taskrun.CounterResource('mem', 9999, 8000))
     tm = taskrun.TaskManager(resource_manager=rm)
     t1 = taskrun.ProcessTask(tm, 't1', '')
     with self.assertRaises(ValueError):
         tm.run_tasks()
 def test_mem1(self):
     rm = taskrun.ResourceManager(taskrun.MemoryResource('ram', 9999, 1))
     ob = OrderCheckObserver(['@t1', '+t1', '-t1'], verbose=False)
     tm = taskrun.TaskManager(resource_manager=rm, observers=[ob])
     t1 = taskrun.ProcessTask(tm, 't1', 'sleep 0.01')
     t1.resources = {'ram': 1}
     tm.run_tasks()
     self.assertTrue(ob.ok())
Beispiel #13
0
 def test_pri4(self):
     ob = ComparisonCheckObserver(8, [
         '+t2 < -t2 +t1 -t1 +t4 -t4 +t3 -t3', '+t1 < -t1 +t4 -t4 +t3 -t3',
         '+t4 < -t4 +t3 -t3', '+t3 < -t3'
     ],
                                  verbose=False)
     tm = taskrun.TaskManager(observers=[ob])
     t1 = taskrun.ProcessTask(tm, 't1', 'sleep 0.01')
     t2 = taskrun.ProcessTask(tm, 't2', 'sleep 0.02')
     t3 = taskrun.ProcessTask(tm, 't3', 'sleep 0.03')
     t4 = taskrun.ProcessTask(tm, 't4', 'sleep 0.04')
     t1.priority = 3
     t2.priority = 4
     t3.priority = 1
     t4.priority = 2
     tm.run_tasks()
     self.assertTrue(ob.ok())
Beispiel #14
0
 def test_passive_multiroottree_wide(self):
     ob = ComparisonCheckObserver(8, [
         '+t1 < +t2 +t3 +t4 !t3 -t4 -t2 -t1', '+t2 > +t1',
         '+t2 < +t3 +t4 !t3 -t4 -t2 -t1', '+t3 > +t2 +t1',
         '+t3 < +t4 !t3 -t4 -t2 -t1', '+t4 > +t3 +t2 +t1',
         '+t4 < !t3 -t4 -t2 -t1', '!t3 > +t4 +t3 +t2 +t1',
         '!t3 < -t4 -t2 -t1', '-t4 > !t3 +t4 +t3 +t2 +t1',
         '-t2 > !t3 +t4 +t3 +t2 +t1', '-t1 > !t3 +t4 +t3 +t2 +t1'
     ],
                                  verbose=False)
     rm = taskrun.ResourceManager(taskrun.CounterResource('slot', 1, 1000))
     tm = taskrun.TaskManager(observers=[ob],
                              resource_manager=rm,
                              failure_mode='passive_fail')
     t1 = taskrun.ProcessTask(tm, 't1', 'sleep 0.04')
     t1.priority = 4
     t2 = taskrun.ProcessTask(tm, 't2', 'sleep 0.03')
     t2.priority = 3
     t3 = taskrun.ProcessTask(tm, 't3', 'sleep 0.01; false')
     t3.priority = 2
     t4 = taskrun.ProcessTask(tm, 't4', 'sleep 0.02')
     t4.priority = 1
     t3a = taskrun.ProcessTask(tm, 't3a', '')
     t3a.add_dependency(t3)
     t3b = taskrun.ProcessTask(tm, 't3b', '')
     t3b.add_dependency(t3)
     t3ba = taskrun.ProcessTask(tm, 't3ba', '')
     t3ba.add_dependency(t3b)
     tm.run_tasks()
     self.assertTrue(ob.ok())
Beispiel #15
0
 def test_active_multiroottree_narrow(self):
     ob = ComparisonCheckObserver(8, [
         '+t1 < -t1 +t2 -t2 +t3 !t3 +t4 -t4', '-t1 > +t1',
         '-t1 < +t2 -t2 +t3 !t3 +t4 -t4', '+t2 > -t1 +t1',
         '+t2 < -t2 +t3 !t3 +t4 -t4', '-t2 > +t2 -t1 +t1',
         '-t2 < +t3 !t3 +t4 -t4', '+t3 > -t2 +t2 -t1 +t1',
         '+t3 < !t3 +t4 -t4', '!t3 > +t3 -t2 +t2 -t1 +t1', '!t3 < +t4 -t4',
         '+t4 > !t3 +t3 -t2 +t2 -t1 +t1', '+t4 < -t4',
         '-t4 > +t4 !t3 +t3 -t2 +t2 -t1 +t1'
     ],
                                  verbose=False)
     rm = taskrun.ResourceManager(taskrun.CounterResource('slot', 1, 1))
     tm = taskrun.TaskManager(observers=[ob],
                              resource_manager=rm,
                              failure_mode='active_continue')
     t1 = taskrun.ProcessTask(tm, 't1', '')
     t1.priority = 4
     t2 = taskrun.ProcessTask(tm, 't2', '')
     t2.priority = 3
     t3 = taskrun.ProcessTask(tm, 't3', 'false')
     t3.priority = 2
     t4 = taskrun.ProcessTask(tm, 't4', '')
     t4.priority = 1
     t3a = taskrun.ProcessTask(tm, 't3a', '')
     t3a.add_dependency(t3)
     t3b = taskrun.ProcessTask(tm, 't3b', '')
     t3b.add_dependency(t3)
     t3ba = taskrun.ProcessTask(tm, 't3ba', '')
     t3ba.add_dependency(t3b)
     tm.run_tasks()
     self.assertTrue(ob.ok())
Beispiel #16
0
 def test_proc1(self):
   fd, filename = tempfile.mkstemp()
   tm = taskrun.TaskManager()
   t1 = taskrun.ProcessTask(tm, 't1', 'rm {0}'.format(filename))
   with open(filename, 'w') as fd:
     print('hello world!\n', file=fd)
   self.assertTrue(os.path.isfile(filename))
   tm.run_tasks()
   self.assertFalse(os.path.isfile(filename))
Beispiel #17
0
def set_task_function(tm, name, cmd, console_out, task_type, config):
  task = taskrun.ProcessTask(tm, name, cmd)
  if console_out:
    task.stdout_file = console_out
    task.stderr_file = console_out
  if task_type is 'sim':
    task.resources = {'cpus': 1, 'mem': 5}
  else:
    task.resources = {'cpus': 1, 'mem': 3}
  return task
 def test_cputime2(self):
     rm = taskrun.ResourceManager(taskrun.CpuTimeResource('time', 10))
     ob = OrderCheckObserver(['@t1', '+t1', '-t1'], verbose=False)
     tm = taskrun.TaskManager(resource_manager=rm, observers=[ob])
     t1 = taskrun.ProcessTask(tm, 't1', 'test/testprogs/burncycles 1 0.1')
     t1.resources = {'time': 10}
     tm.run_tasks()
     self.assertTrue(t1.stdout.find('count=10') >= 0)
     self.assertTrue(t1.stdout.find('completed') >= 0)
     self.assertTrue(ob.ok())
Beispiel #19
0
 def test_res2(self):
     rm = taskrun.ResourceManager(
         taskrun.CounterResource('core', 9999, 4),
         taskrun.CounterResource('mem', 9999, 8000))
     ob = OrderCheckObserver(['@t1', '+t1', '-t1'])
     tm = taskrun.TaskManager(resource_manager=rm, observers=[ob])
     t1 = taskrun.ProcessTask(tm, 't1', '')
     t1.resources = {'core': 1, 'mem': 5000}
     tm.run_tasks()
     self.assertTrue(ob.ok())
 def test_simple(self):
     obs = [
         OrderCheckObserver(['@t1', '+t1', '-t1']),
         OrderCheckObserver(['@t1', '+t1', '-t1']),
         OrderCheckObserver(['@t1', '+t1', '-t1'])
     ]
     tm = taskrun.TaskManager(observers=obs)
     t1 = taskrun.ProcessTask(tm, 't1', '')
     tm.run_tasks()
     for ob in obs:
         self.assertTrue(ob.ok())
 def test_mem5(self):
     rm = taskrun.ResourceManager(taskrun.MemoryResource('ram', 9999, 0.25))
     ob = OrderCheckObserver(['@t1', '+t1', '!t1'], verbose=False)
     tm = taskrun.TaskManager(resource_manager=rm, observers=[ob])
     t1 = taskrun.ProcessTask(tm, 't1',
                              'test/testprogs/alloclots 104857600 1000 5')
     t1.resources = {'ram': 0.25}
     tm.run_tasks()
     self.assertTrue(t1.stdout.find('+blocks=2') >= 0)
     self.assertTrue(t1.stdout.find('all allocated') < 0)
     self.assertTrue(ob.ok())
Beispiel #22
0
 def test_res8(self):
     for div in [1, 2, 3, 10, 25, 50, 100, 187]:
         cr = taskrun.CounterResource('foo', 4.3 / div, 4.3)
         rm = taskrun.ResourceManager(cr)
         tm = taskrun.TaskManager(resource_manager=rm)
         rnd = random.Random(12345678)
         for t in range(10000):
             cmd = 'usleep {}'.format(rnd.gauss(1000, 500))
             taskrun.ProcessTask(tm, str(t), cmd)
         tm.run_tasks()
         self.assertEqual(cr.total, 4.3)
         self.assertEqual(cr.used, 0)
Beispiel #23
0
def create_task(tm, name, cmd, console_out, task_type, config):
    task = taskrun.ProcessTask(tm, name, cmd)
    if console_out:
        task.stdout_file = console_out
        task.stderr_file = console_out
    if task_type == 'sim':
        task.resources = {'cpus': 1, 'mem': 0.5}
    elif task_type == 'parse':
        task.resources = {'cpus': 1, 'mem': 0.5}
    else:
        task.resources = {'cpus': 1, 'mem': 1.1}
    return task
Beispiel #24
0
 def test_blind_4wide(self):
     ob = ComparisonCheckObserver(8, [
         '+t1 < +t2 +t3 +t4 !t3 -t4 -t2 -t1', '+t2 > +t1',
         '+t2 < +t3 +t4 !t3 -t4 -t2 -t1', '+t3 > +t2 +t1',
         '+t3 < +t4 !t3 -t4 -t2 -t1', '+t4 > +t3 +t2 +t1',
         '+t4 < !t3 -t4 -t2 -t1', '!t3 > +t4 +t3 +t2 +t1',
         '!t3 < -t4 -t2 -t1', '-t4 > !t3 +t4 +t3 +t2 +t1',
         '-t2 > !t3 +t4 +t3 +t2 +t1', '-t1 > !t3 +t4 +t3 +t2 +t1'
     ],
                                  verbose=False)
     tm = taskrun.TaskManager(observers=[ob], failure_mode='blind_continue')
     t1 = taskrun.ProcessTask(tm, 't1', 'sleep 0.04')
     t1.priority = 4
     t2 = taskrun.ProcessTask(tm, 't2', 'sleep 0.03')
     t2.priority = 3
     t3 = taskrun.ProcessTask(tm, 't3', 'sleep 0.01; false')
     t3.priority = 2
     t4 = taskrun.ProcessTask(tm, 't4', 'sleep 0.02')
     t4.priority = 1
     tm.run_tasks()
     self.assertTrue(ob.ok())
Beispiel #25
0
 def test_res4(self):
     rm = taskrun.ResourceManager(
         taskrun.CounterResource('core', 9999, 4),
         taskrun.CounterResource('mem', 9999, 8000))
     ob = OrderCheckObserver([
         '@t1', '@t2', '@t3', '@t4', '+t1', '-t1', '+t2', '-t2', '+t3',
         '-t3', '+t4', '-t4'
     ])
     tm = taskrun.TaskManager(resource_manager=rm, observers=[ob])
     t1 = taskrun.ProcessTask(tm, 't1', '')
     t1.resources = {'core': 1, 'mem': 0}
     t2 = taskrun.ProcessTask(tm, 't2', '')
     t2.resources = {'core': 1, 'mem': 0}
     t3 = taskrun.ProcessTask(tm, 't3', '')
     t3.resources = {'core': 1, 'mem': 0}
     t4 = taskrun.ProcessTask(tm, 't4', '')
     t4.resources = {'core': 1, 'mem': 0}
     t4.add_dependency(t3)
     t3.add_dependency(t2)
     t2.add_dependency(t1)
     tm.run_tasks()
     self.assertTrue(ob.ok())
Beispiel #26
0
 def test_res5(self):
     rm = taskrun.ResourceManager(
         taskrun.CounterResource('core', 9999, 1),
         taskrun.CounterResource('mem', 9999, 8000))
     ob = OrderCheckObserver([
         '@t1', '@t2', '@t3', '@t4', '+t1', '-t1', '+t2', '-t2', '+t3',
         '-t3', '+t4', '-t4'
     ])
     tm = taskrun.TaskManager(resource_manager=rm, observers=[ob])
     t1 = taskrun.ProcessTask(tm, 't1', '')
     t1.resources = {'core': 1, 'mem': 0}
     t1.priority = 4
     t2 = taskrun.ProcessTask(tm, 't2', '')
     t2.resources = {'core': 1, 'mem': 0}
     t2.priority = 3
     t3 = taskrun.ProcessTask(tm, 't3', '')
     t3.resources = {'core': 1, 'mem': 0}
     t3.priority = 2
     t4 = taskrun.ProcessTask(tm, 't4', '')
     t4.resources = {'core': 1, 'mem': 0}
     t4.priority = 1
     tm.run_tasks()
     self.assertTrue(ob.ok())
    def test_noinputfiles(self):
        fd, file1 = tempfile.mkstemp()
        fd, file2 = tempfile.mkstemp()
        fd, file3 = tempfile.mkstemp()
        os.remove(file1)
        os.remove(file2)
        os.remove(file3)

        time.sleep(0.01)

        ob = taskrun.FileCleanupObserver()
        tm = taskrun.TaskManager(observers=[ob])
        t1 = taskrun.ProcessTask(tm, 't1', 'false'.format(file1, file2, file3))
        t1.add_condition(
            taskrun.FileModificationCondition([file1, file2], [file3]))

        tm.run_tasks()
        self.assertFalse(os.path.isfile(file1))
        self.assertFalse(os.path.isfile(file2))
        self.assertFalse(os.path.isfile(file3))
Beispiel #28
0
def main(args):
    # ensure rundir exists, if not make it
    if not os.path.isdir(args.rundir):
        try:
            os.mkdir(args.rundir)
        except:
            error('couldn\'t create {0}'.format(args.rundir))

    # ensure the supersim environment exists
    if not os.path.isdir(args.ssenv):
        error('{0} does not exist'.format(args.ssenv))

    # create a task manager to handle all tasks
    rm = taskrun.ResourceManager(
        taskrun.CounterResource('cpus', 9999, args.cpus),
        taskrun.MemoryResource('mem', 9999, args.mem))
    ob = taskrun.VerboseObserver(description=args.verbose)
    tm = taskrun.TaskManager(resource_manager=rm,
                             observer=ob,
                             failure_mode=taskrun.FailureMode.ACTIVE_CONTINUE)

    # sweep params
    sweepStart = 1
    sweepStop = 100
    sweepStep = 9
    loads = [
        '{0:.02f}'.format(x / 100)
        for x in range(sweepStart, sweepStop + 1, sweepStep)
    ]

    # sweep load
    parse_tasks = []
    for load in loads:
        runId = '{0:02d}_{1}'.format(args.queue, load)

        # create file names
        supersim_bin = os.path.join(args.ssenv, 'poem_supersim', 'bin',
                                    'supersim')
        sslatency_bin = os.path.join(args.ssenv, 'sslatency', 'bin',
                                     'sslatency')
        settings_json = os.path.join(args.ssenv, 'poem_supersim', 'json',
                                     'hierarchyhyperx_iq_GlueFactory1.json')
        simout_log = os.path.join(args.rundir, 'simout_{0}.log'.format(runId))
        messages_mpf = os.path.join(args.rundir,
                                    'messages_{0}.mpf'.format(runId))
        rates_csv = os.path.join(args.rundir, 'rates_{0}.csv'.format(runId))
        channels_csv = os.path.join(args.rundir,
                                    'channels_{0}.mpf'.format(runId))
        messages_csv = os.path.join(args.rundir,
                                    'messages_{0}.csv'.format(runId))
        packets_csv = os.path.join(args.rundir,
                                   'packets_{0}.csv'.format(runId))
        aggregate_csv = os.path.join(args.rundir,
                                     'aggregate_{0}.csv'.format(runId))
        packets_png = os.path.join(args.rundir,
                                   'packets_{0}.png'.format(runId))

        # create simulation task
        sim_cmd = ('{0} {1} '
                   'application.max_injection_rate=float={2} '
                   'application.message_log.file=string={3} '
                   'application.rate_log.file=string={4} '
                   'network.channel_log.file=string={5} '
                   'network.interface.init_credits=uint={6} '
                   'network.router.input_queue_depth=uint={6} ').format(
                       supersim_bin, settings_json, load, messages_mpf,
                       rates_csv, channels_csv, args.queue)
        sim_task = taskrun.ProcessTask(tm, 'sim_{0}'.format(runId), sim_cmd)
        sim_task.stdout_file = simout_log
        sim_task.stderr_file = simout_log
        sim_task.resources = {'cpus': 1, 'mem': 10}
        sim_task.add_condition(
            taskrun.FileModificationCondition(
                [settings_json],
                [simout_log, messages_mpf, rates_csv, channels_csv]))

        # create parser task
        parse_cmd = '{0} -m {1} -p {2} -a {3} {4}'.format(
            sslatency_bin, messages_csv, packets_csv, aggregate_csv,
            messages_mpf)
        parse_task = taskrun.ProcessTask(tm, 'parse_{0}'.format(runId),
                                         parse_cmd)
        parse_task.resources = {'cpus': 1, 'mem': 2}
        parse_task.add_dependency(sim_task)
        parse_task.add_condition(
            taskrun.FileModificationCondition(
                [messages_mpf], [messages_csv, packets_csv, aggregate_csv]))
        parse_tasks.append(parse_task)

        # create plot task
        plot_cmd = 'sslqp {0} {1}'.format(packets_csv, packets_png)
        plot_task = taskrun.ProcessTask(tm, 'plot_{0}'.format(runId), plot_cmd)
        plot_task.resources = {'cpus': 1, 'mem': 2}
        plot_task.add_dependency(parse_task)
        plot_task.add_condition(
            taskrun.FileModificationCondition([packets_csv], [packets_png]))

    # create a task to make a load latency graph
    loadlat_file = os.path.join(args.rundir,
                                'load_latency_{0:02d}.png'.format(args.queue))
    loadlat_cmd = ('ssllp --row Packet --title "QueueSize={0}" '
                   '{1} {2} {3} {4}').format(args.queue, loadlat_file,
                                             sweepStart, sweepStop + 1,
                                             sweepStep)
    agg_files = []
    for load in loads:
        runId = '{0:02d}_{1}'.format(args.queue, load)
        aggregate_csv = os.path.join(args.rundir,
                                     'aggregate_{0}.csv'.format(runId))
        loadlat_cmd += ' {0}'.format(aggregate_csv)
        agg_files.append(aggregate_csv)
    loadlat_task = taskrun.ProcessTask(tm, 'loadlat_{0}'.format(args.queue),
                                       loadlat_cmd)
    loadlat_task.resources = {'cpus': 1, 'mem': 2}
    for dep in parse_tasks:
        loadlat_task.add_dependency(dep)
    loadlat_task.add_condition(
        taskrun.FileModificationCondition(agg_files, [loadlat_file]))

    # run all tasks
    tm.run_tasks()
Beispiel #29
0
    def test_many(self):
        # create files for processes
        procs = 100
        files = []
        for proc_id in range(procs):
            fd, file_a = tempfile.mkstemp()
            fd, file_b = tempfile.mkstemp()
            fd, file_c = tempfile.mkstemp()
            files.append([file_a, file_b, file_c])

        # write something into A and B files
        time.sleep(0.01)
        for proc_id in range(procs):
            with open(files[proc_id][0], 'w') as afile:
                print('hello file A from proc {0}'.format(proc_id), file=afile)
            with open(files[proc_id][1], 'w') as bfile:
                print('hello file B from proc {0}'.format(proc_id), file=bfile)

        # initial
        ob = OccurredCheckObserver([], verbose=False)
        tm = taskrun.TaskManager(observers=[ob])
        evts = []
        for proc_id in range(procs):
            task = taskrun.ProcessTask(
                tm, 't{0:04}'.format(proc_id),
                'cat {0} {1} > {2}'.format(files[proc_id][0],
                                           files[proc_id][1],
                                           files[proc_id][2]))
            cond = taskrun.FileModificationCondition(
                [files[proc_id][0], files[proc_id][1]], [files[proc_id][2]])
            task.add_condition(cond)
            evts.append('@{0}'.format(task.name))
            evts.append('+{0}'.format(task.name))
            evts.append('-{0}'.format(task.name))
        ob.reinit(evts)
        tm.run_tasks()
        self.assertTrue(ob.ok())

        # no change
        ob = OccurredCheckObserver([], verbose=False)
        tm = taskrun.TaskManager(observers=[ob])
        evts = []
        for proc_id in range(procs):
            task = taskrun.ProcessTask(
                tm, 't{0:04}'.format(proc_id),
                'cat {0} {1} > {2}'.format(files[proc_id][0],
                                           files[proc_id][1],
                                           files[proc_id][2]))
            cond = taskrun.FileModificationCondition(
                [files[proc_id][0], files[proc_id][1]], [files[proc_id][2]])
            task.add_condition(cond)
            evts.append('@{0}'.format(task.name))
            evts.append('*{0}'.format(task.name))
        ob.reinit(evts)
        tm.run_tasks()
        self.assertTrue(ob.ok())

        # change some
        rnd = random.Random()
        ob = OccurredCheckObserver([], verbose=False)
        tm = taskrun.TaskManager(observers=[ob])
        evts = []
        for proc_id in range(procs):
            task = taskrun.ProcessTask(
                tm, 't{0:04}'.format(proc_id),
                'cat {0} {1} > {2}'.format(files[proc_id][0],
                                           files[proc_id][1],
                                           files[proc_id][2]))
            cond = taskrun.FileModificationCondition(
                [files[proc_id][0], files[proc_id][1]], [files[proc_id][2]])
            task.add_condition(cond)
            # randomly sabotage this task
            evts.append('@{0}'.format(task.name))
            if bool(rnd.getrandbits(1)):
                evts.append('+{0}'.format(task.name))
                evts.append('-{0}'.format(task.name))
                # randomly select between sabotaging the input or output
                if bool(rnd.getrandbits(1)):
                    # sabotage input (change input file)
                    with open(files[proc_id][rnd.getrandbits(1)],
                              'w+') as ifile:
                        print(str(rnd.getrandbits(8)), file=ifile)
                else:
                    # sabotage output (delete output file)
                    os.remove(files[proc_id][2])
            else:
                evts.append('*{0}'.format(task.name))
        ob.reinit(evts)
        tm.run_tasks()
        self.assertTrue(ob.ok())

        # no change
        ob = OccurredCheckObserver([], verbose=False)
        tm = taskrun.TaskManager(observers=[ob])
        evts = []
        for proc_id in range(procs):
            task = taskrun.ProcessTask(
                tm, 't{0:04}'.format(proc_id),
                'cat {0} {1} > {2}'.format(files[proc_id][0],
                                           files[proc_id][1],
                                           files[proc_id][2]))
            cond = taskrun.FileModificationCondition(
                [files[proc_id][0], files[proc_id][1]], [files[proc_id][2]])
            task.add_condition(cond)
            evts.append('@{0}'.format(task.name))
            evts.append('*{0}'.format(task.name))
        ob.reinit(evts)
        tm.run_tasks()
        self.assertTrue(ob.ok())

        # change some
        rnd = random.Random()
        ob = OccurredCheckObserver([], verbose=False)
        tm = taskrun.TaskManager(observers=[ob])
        evts = []
        for proc_id in range(procs):
            task = taskrun.ProcessTask(
                tm, 't{0:04}'.format(proc_id),
                'cat {0} {1} > {2}'.format(files[proc_id][0],
                                           files[proc_id][1],
                                           files[proc_id][2]))
            cond = taskrun.FileModificationCondition(
                [files[proc_id][0], files[proc_id][1]], [files[proc_id][2]])
            task.add_condition(cond)
            # randomly sabotage this task
            evts.append('@{0}'.format(task.name))
            if bool(rnd.getrandbits(1)):
                evts.append('+{0}'.format(task.name))
                evts.append('-{0}'.format(task.name))
                # randomly select between sabotaging the input or output
                if bool(rnd.getrandbits(1)):
                    # sabotage input (change input file)
                    with open(files[proc_id][rnd.getrandbits(1)],
                              'w+') as ifile:
                        print(str(rnd.getrandbits(8)), file=ifile)
                else:
                    # sabotage output (delete output file)
                    os.remove(files[proc_id][2])
            else:
                evts.append('*{0}'.format(task.name))
        ob.reinit(evts)
        tm.run_tasks()
        self.assertTrue(ob.ok())

        # remove all files
        for proc_id in range(procs):
            for tfile in files[proc_id]:
                os.remove(tfile)
Beispiel #30
0
    def test_simple(self):
        fd, file1 = tempfile.mkstemp()
        fd, file2 = tempfile.mkstemp()
        fd, file3 = tempfile.mkstemp()

        with open(file1, 'w') as fd:
            print('hello file1', file=fd)
        with open(file2, 'w') as fd:
            print('hello file2', file=fd)
        time.sleep(0.01)

        # initial run
        ob = OrderCheckObserver(['@t1', '+t1', '-t1'], verbose=False)
        tm = taskrun.TaskManager(observers=[ob])
        t1 = taskrun.ProcessTask(
            tm, 't1', 'cat {0} {1} > {2}'.format(file1, file2, file3))
        tm.run_tasks()
        self.assertTrue(ob.ok())

        # nothing changed
        ob = OrderCheckObserver(['@t1', '*t1'], verbose=False)
        tm = taskrun.TaskManager(observers=[ob])
        t1 = taskrun.ProcessTask(
            tm, 't1', 'cat {0} {1} > {2}'.format(file1, file2, file3))
        c1 = taskrun.FileModificationCondition([file1, file2], [file3])
        t1.add_condition(c1)
        tm.run_tasks()
        self.assertTrue(ob.ok())

        # nothing changed
        ob = OrderCheckObserver(['@t1', '*t1'], verbose=False)
        tm = taskrun.TaskManager(observers=[ob])
        t1 = taskrun.ProcessTask(
            tm, 't1', 'cat {0} {1} > {2}'.format(file1, file2, file3))
        c1 = taskrun.FileModificationCondition([file1, file2], [file3])
        t1.add_condition(c1)
        tm.run_tasks()
        self.assertTrue(ob.ok())

        # missing output
        os.remove(file3)
        ob = OrderCheckObserver(['@t1', '+t1', '-t1'], verbose=False)
        tm = taskrun.TaskManager(observers=[ob])
        t1 = taskrun.ProcessTask(
            tm, 't1', 'cat {0} {1} > {2}'.format(file1, file2, file3))
        c1 = taskrun.FileModificationCondition([file1, file2], [file3])
        t1.add_condition(c1)
        tm.run_tasks()
        self.assertTrue(ob.ok())

        # nothing changed
        ob = OrderCheckObserver(['@t1', '*t1'], verbose=False)
        tm = taskrun.TaskManager(observers=[ob])
        t1 = taskrun.ProcessTask(
            tm, 't1', 'cat {0} {1} > {2}'.format(file1, file2, file3))
        c1 = taskrun.FileModificationCondition([file1, file2], [file3])
        t1.add_condition(c1)
        tm.run_tasks()
        self.assertTrue(ob.ok())

        # input changed
        time.sleep(0.01)
        with open(file1, 'w') as fd:
            print('hello file1!', file=fd)
        time.sleep(0.01)
        ob = OrderCheckObserver(['@t1', '+t1', '-t1'], verbose=False)
        tm = taskrun.TaskManager(observers=[ob])
        t1 = taskrun.ProcessTask(
            tm, 't1', 'cat {0} {1} > {2}'.format(file1, file2, file3))
        c1 = taskrun.FileModificationCondition([file1, file2], [file3])
        t1.add_condition(c1)
        tm.run_tasks()
        self.assertTrue(ob.ok())

        # nothing changed
        ob = OrderCheckObserver(['@t1', '*t1'], verbose=False)
        tm = taskrun.TaskManager(observers=[ob])
        t1 = taskrun.ProcessTask(
            tm, 't1', 'cat {0} {1} > {2}'.format(file1, file2, file3))
        c1 = taskrun.FileModificationCondition([file1, file2], [file3])
        t1.add_condition(c1)
        tm.run_tasks()
        self.assertTrue(ob.ok())

        # input changed (test add_input)
        time.sleep(0.01)
        with open(file1, 'w') as fd:
            print('hello file1!', file=fd)
        time.sleep(0.01)
        ob = OrderCheckObserver(['@t1', '+t1', '-t1'], verbose=False)
        tm = taskrun.TaskManager(observers=[ob])
        t1 = taskrun.ProcessTask(
            tm, 't1', 'cat {0} {1} > {2}'.format(file1, file2, file3))
        c1 = taskrun.FileModificationCondition([file2], [file3])
        c1.add_input(file1)
        t1.add_condition(c1)
        tm.run_tasks()
        self.assertTrue(ob.ok())

        # missing output (test add_output)
        os.remove(file3)
        ob = OrderCheckObserver(['@t1', '+t1', '-t1'], verbose=False)
        tm = taskrun.TaskManager(observers=[ob])
        t1 = taskrun.ProcessTask(
            tm, 't1', 'cat {0} {1} > {2}'.format(file1, file2, file3))
        c1 = taskrun.FileModificationCondition([file1, file2], [])
        c1.add_output(file3)
        t1.add_condition(c1)
        tm.run_tasks()
        self.assertTrue(ob.ok())

        # nothing changed
        ob = OrderCheckObserver(['@t1', '*t1'], verbose=False)
        tm = taskrun.TaskManager(observers=[ob])
        t1 = taskrun.ProcessTask(
            tm, 't1', 'cat {0} {1} > {2}'.format(file1, file2, file3))
        c1 = taskrun.FileModificationCondition([file1, file2], [file3])
        t1.add_condition(c1)
        tm.run_tasks()
        self.assertTrue(ob.ok())

        # remove all files
        os.remove(file1)
        os.remove(file2)
        os.remove(file3)