11use super :: communicator:: Communicator ;
22use client:: dataobject:: DataObject ;
33use client:: task:: Task ;
4+ use rain_core:: common_capnp;
5+ use rain_core:: types:: { DataObjectId , DataType , ObjectSpec , Resources , SId , TaskId , TaskSpec ,
6+ TaskSpecInput , UserAttrs } ;
7+ use serde_json;
8+ use std:: cell:: Cell ;
49use std:: collections:: HashMap ;
510use std:: error:: Error ;
6- use client:: task:: TaskInput ;
7- use common:: Attributes ;
8- use common:: id:: TaskId ;
9- use common:: id:: DataObjectId ;
10- use common:: id:: SId ;
11- use common:: DataType ;
12- use std:: cell:: Cell ;
1311use std:: rc:: Rc ;
1412
1513pub type DataObjectPtr = Rc < DataObject > ;
@@ -45,28 +43,36 @@ impl Session {
4543 }
4644
4745 pub fn unkeep ( & mut self , objects : & [ DataObjectPtr ] ) -> Result < ( ) , Box < Error > > {
48- self . comm
49- . unkeep ( & objects. iter ( ) . map ( |o| o. id ) . collect :: < Vec < DataObjectId > > ( ) )
46+ self . comm . unkeep ( & objects
47+ . iter ( )
48+ . map ( |o| o. id ( ) )
49+ . collect :: < Vec < DataObjectId > > ( ) )
5050 }
5151
5252 pub fn wait ( & mut self , tasks : & [ TaskPtr ] , objects : & [ DataObjectPtr ] ) -> Result < ( ) , Box < Error > > {
5353 self . comm . wait (
54- & tasks. iter ( ) . map ( |t| t. id ) . collect :: < Vec < TaskId > > ( ) ,
55- & objects. iter ( ) . map ( |o| o. id ) . collect :: < Vec < DataObjectId > > ( ) ,
54+ & tasks. iter ( ) . map ( |t| t. id ( ) ) . collect :: < Vec < TaskId > > ( ) ,
55+ & objects
56+ . iter ( )
57+ . map ( |o| o. id ( ) )
58+ . collect :: < Vec < DataObjectId > > ( ) ,
5659 )
5760 }
5861 pub fn wait_some (
5962 & mut self ,
6063 tasks : & [ TaskPtr ] ,
6164 objects : & [ DataObjectPtr ] ,
6265 ) -> Result < ( Vec < TaskPtr > , Vec < DataObjectPtr > ) , Box < Error > > {
63- let task_map: HashMap < TaskId , & TaskPtr > = tasks. iter ( ) . map ( |t| ( t. id , t) ) . collect ( ) ;
66+ let task_map: HashMap < TaskId , & TaskPtr > = tasks. iter ( ) . map ( |t| ( t. id ( ) , t) ) . collect ( ) ;
6467 let object_map: HashMap < DataObjectId , & DataObjectPtr > =
65- objects. iter ( ) . map ( |o| ( o. id , o) ) . collect ( ) ;
68+ objects. iter ( ) . map ( |o| ( o. id ( ) , o) ) . collect ( ) ;
6669
6770 let ( task_ids, object_ids) = self . comm . wait_some (
68- & tasks. iter ( ) . map ( |t| t. id ) . collect :: < Vec < TaskId > > ( ) ,
69- & objects. iter ( ) . map ( |o| o. id ) . collect :: < Vec < DataObjectId > > ( ) ,
71+ & tasks. iter ( ) . map ( |t| t. id ( ) ) . collect :: < Vec < TaskId > > ( ) ,
72+ & objects
73+ . iter ( )
74+ . map ( |o| o. id ( ) )
75+ . collect :: < Vec < DataObjectId > > ( ) ,
7076 ) ?;
7177
7278 Ok ( (
@@ -82,13 +88,13 @@ impl Session {
8288 }
8389 pub fn wait_all ( & mut self ) -> Result < ( ) , Box < Error > > {
8490 self . comm . wait (
85- & vec ! [ TaskId :: new( self . id, :: common_capnp:: ALL_TASKS_ID ) ] ,
91+ & vec ! [ TaskId :: new( self . id, common_capnp:: ALL_TASKS_ID ) ] ,
8692 & vec ! [ ] ,
8793 )
8894 }
8995
90- pub fn fetch ( & mut self , object : & DataObject ) -> Result < Vec < u8 > , Box < Error > > {
91- self . comm . fetch ( object . id )
96+ pub fn fetch ( & mut self , o : & DataObjectPtr ) -> Result < Vec < u8 > , Box < Error > > {
97+ self . comm . fetch ( & o . id ( ) )
9298 }
9399
94100 pub fn blob ( & mut self , data : Vec < u8 > ) -> DataObjectPtr {
@@ -102,13 +108,17 @@ impl Session {
102108 DataObjectId :: new ( self . id , id)
103109 }
104110 pub ( crate ) fn create_object ( & mut self , label : String , data : Option < Vec < u8 > > ) -> DataObjectPtr {
105- let object = DataObject {
111+ let spec = ObjectSpec {
106112 id : self . create_object_id ( ) ,
107- keep : Cell :: new ( false ) ,
108113 label,
109- data,
110- attributes : Attributes :: new ( ) ,
111114 data_type : DataType :: Blob ,
115+ content_type : "" . to_owned ( ) ,
116+ user : UserAttrs :: new ( ) ,
117+ } ;
118+ let object = DataObject {
119+ keep : Cell :: new ( false ) ,
120+ data,
121+ spec,
112122 } ;
113123 let rc = Rc :: new ( object) ;
114124 self . data_objects . push ( rc. clone ( ) ) ;
@@ -124,27 +134,24 @@ impl Session {
124134 }
125135 pub fn create_task (
126136 & mut self ,
127- command : String ,
128- inputs : Vec < TaskInput > ,
137+ task_type : String ,
138+ inputs : Vec < TaskSpecInput > ,
129139 outputs : Vec < DataObjectPtr > ,
130140 config : HashMap < String , String > ,
131- cpus : i32 ,
141+ cpus : u32 ,
132142 ) -> TaskPtr {
133- let mut attributes = Attributes :: new ( ) ;
134- attributes. set ( "config" , config) . unwrap ( ) ;
135-
136- let mut resources: HashMap < String , i32 > = HashMap :: new ( ) ;
137- resources. insert ( "cpus" . to_owned ( ) , cpus) ;
138- attributes. set ( "resources" , resources) . unwrap ( ) ;
139-
140- let task = Task {
143+ let spec = TaskSpec {
141144 id : self . create_task_id ( ) ,
142- command,
143145 inputs,
144- outputs,
145- attributes,
146+ task_type,
147+ outputs : outputs. iter ( ) . map ( |o| o. id ( ) ) . collect ( ) ,
148+ config : Some ( serde_json:: to_value ( & config) . unwrap ( ) ) ,
149+ resources : Resources { cpus } ,
150+ user : UserAttrs :: new ( ) ,
146151 } ;
147152
153+ let task = Task { spec, outputs } ;
154+
148155 let rc = Rc :: new ( task) ;
149156 self . tasks . push ( rc. clone ( ) ) ;
150157
0 commit comments