@@ -6,11 +6,26 @@ use tako::messages::common::ProgramDefinition;
66use crate :: client:: globalsettings:: GlobalSettings ;
77use crate :: client:: job:: print_job_detail;
88
9+ use crate :: client:: resources:: parse_cpu_request;
910use crate :: common:: arraydef:: ArrayDef ;
1011use crate :: rpc_call;
1112use crate :: transfer:: connection:: ClientConnection ;
1213use crate :: transfer:: messages:: { FromClientMessage , JobType , SubmitRequest , ToClientMessage } ;
1314use anyhow:: anyhow;
15+ use std:: str:: FromStr ;
16+ use tako:: common:: resources:: { CpuRequest , ResourceRequest } ;
17+
18+ // I am wrapping CpuRequest + implementing FromStr as I am not able to provide
19+ // own parser function into clap??
20+ struct ArgCpuRequest ( CpuRequest ) ;
21+
22+ impl FromStr for ArgCpuRequest {
23+ type Err = anyhow:: Error ;
24+
25+ fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
26+ parse_cpu_request ( s) . map ( ArgCpuRequest )
27+ }
28+ }
1429
1530#[ derive( Clap ) ]
1631#[ clap( setting = clap:: AppSettings :: ColoredHelp ) ]
@@ -21,15 +36,31 @@ pub struct SubmitOpts {
2136 #[ clap( long) ]
2237 array : Option < ArrayDef > ,
2338
39+ #[ clap( long, default_value = "1" ) ]
40+ cpus : ArgCpuRequest ,
41+
2442 #[ clap( long) ]
2543 name : Option < String > ,
44+
45+ #[ clap( long) ]
46+ pin : bool ,
47+ }
48+
49+ impl SubmitOpts {
50+ fn resource_request ( & self ) -> ResourceRequest {
51+ ResourceRequest :: new ( self . cpus . 0 . clone ( ) )
52+ }
2653}
2754
2855pub async fn submit_computation (
2956 gsettings : & GlobalSettings ,
3057 connection : & mut ClientConnection ,
3158 opts : SubmitOpts ,
3259) -> crate :: Result < ( ) > {
60+ let resources = opts. resource_request ( ) ;
61+
62+ resources. validate ( ) ?;
63+
3364 let name = if let Some ( name) = opts. name {
3465 validate_name ( name) ?
3566 } else {
@@ -47,7 +78,6 @@ pub async fn submit_computation(
4778 let submit_cwd = std:: env:: current_dir ( ) . unwrap ( ) ;
4879 let stdout = submit_cwd. join ( "stdout.%{JOB_ID}.%{TASK_ID}" ) ;
4980 let stderr = submit_cwd. join ( "stderr.%{JOB_ID}.%{TASK_ID}" ) ;
50-
5181 let message = FromClientMessage :: Submit ( SubmitRequest {
5282 job_type,
5383 name,
@@ -59,6 +89,8 @@ pub async fn submit_computation(
5989 stderr : Some ( stderr) ,
6090 cwd : None ,
6191 } ,
92+ resources,
93+ pin : opts. pin ,
6294 } ) ;
6395 let response = rpc_call ! ( connection, message, ToClientMessage :: SubmitResponse ( r) => r) . await ?;
6496 print_job_detail ( gsettings, response. job , true , false ) ;
0 commit comments