[saga-rg] tasks and jobs...

Thilo Kielmann kielmann at cs.vu.nl
Mon Feb 6 09:27:32 CST 2006


Ouch! Andre has a pretty good punch! 

I agree with his proposal ;-)

Thilo

On Mon, Feb 06, 2006 at 04:22:55PM +0100, Andre Merzky wrote:
> X-Original-To: kielmann at localhost
> Delivered-To: kielmann at localhost.cs.vu.nl
> Date: Mon, 6 Feb 2006 16:22:55 +0100
> From: Andre Merzky <andre at merzky.net>
> To: Thilo Kielmann <kielmann at cs.vu.nl>
> Cc: saga-rg at ggf.org
> Subject: Re: [saga-rg] tasks and jobs...
> 
> Hi, 
> 
> I just had a discussion with Thilo about the topic, as he
> and me obviously talked somewhat orthogonal to each other...
> 
> Well, now we have the same opinion, kind of, and I have
> barely any bruises...  Anyway, I want to summarize our point
> here, as I probably was not really clear in my initial post.
> 
> Sorry if re-iteration of the topic bores you...
> 
> So, we have tasks, which represent async operations, with a
> couple of states attached, and the ability to call run(),
> wait() and cancel() on these.  And we can collect them in
> containers, and wait() on many of these tasks conveniently.
> 
> And then we have jobs, which represent remote executables,
> with a couple of states attached, and the ability to call
> run (== create them), wait() and cancel().  And some more
> methods.  And we can't collect them in containers right now,
> but would like to.
> 
> You see the similarities, right?  Its even more obvious in
> code:
> 
>   Tasks:
>   --------------------------------------------
>     task_container tc;
>     task t = file.copy <saga::task> (...);
>          t.run  (   );
>          t.wait (1.0);
>   
>         tc.add  (t);
>         tc.wait ( );
>   --------------------------------------------
>   
>   Jobs:
>   --------------------------------------------
>     job_container jc;
>     job j = job_server.submit (job_descr);
>         j.wait (1.0);
>   
>        jc.add  (j);
>        jc.wait ( );
>   --------------------------------------------
>   
>   slightly changed:
>   --------------------------------------------
>     job_container jc;
>   ! job j = job_server.create (job_descr);
>   +     j.run  (   );
>         j.wait (1.0);
>   
>        jc.add  (j);
>        jc.wait ( );
>   --------------------------------------------
> 
> The similarities are obvious I think.  Now, if job would
> IMPLEMENT the task interface (or inherit from task), we
> would unify both classes, and hence:
> 
>   - simplify jobs (leave only those methods which are
>     specific to jobs, like migrate, signal, ...
>   
>   - allow to out jobs into task containers, efficiently
>     handling large amounts of jobs and other tasks
> 
>   - have the API and used paradigms more uniform.
> 
> Also, if later tasks get suspendable, as Gregor rightly
> suggested, we can move more methods to tasks, w/o breaking
> the paradigms.
> 
> In terms of state, following mappings would be appropriate:
> 
>   job::Pending -> task::Pending
>   job::Done    -> task::Done
>   job::Failed  -> task::Failed
>   job::???     -> task::Cancelled
> 
>   job::Queued,Running,Pre/Poststaging,... -> task::Running
> 
> So, no adjustements to the statet models are needed AFAICS,
> apart from Cancelled 
> (Does it make sense   on jobs?  
>  Should job::stop     be job::cancel?  
>  Should tasks::cancel be task::job?)
> 
> Hope that clearifies things.  I think Gregor was on target
> with his remarks, and Hartmut signalled consent as well.
> And I think I convinced Thilo (Andre rubs his bruises).
> 
> Unless there is any opposition, I'll go ahead and document
> that in the strawman then, ok?
> 
> Cheers, Andre.
> 
> 
> Quoting [Thilo Kielmann] (Feb 04 2006):
> > Date: Sat, 4 Feb 2006 22:29:41 +0100
> > From: Thilo Kielmann <kielmann at cs.vu.nl>
> > To: saga-rg at ggf.org
> > Subject: Re: [saga-rg] tasks and jobs...
> > 
> > > Wouldn't it be useful to have jobs implementing the task
> > > interface?
> > 
> > Certainly, no.
> > Jobs and Tasks are two different things, and they are this on purpose.
> > 
> > However, Tasks always have been the mechanism for asynchronous operation,
> > which is kind-of obsoleted by having asynchronous ops directly.
> > 
> > If you want to work on the "S" of SAGA: why not unify both Tasks and Jobs
> > into a better "Job" notion, and do local asynchronous operations via
> > async, local calls?
> > 
> > Thilo
> -- 
> "So much time, so little to do..."  -- Garfield



-- 
Thilo Kielmann                                 http://www.cs.vu.nl/~kielmann/





More information about the saga-rg mailing list