@@ -31,6 +31,10 @@ impl ProcessManagerService {
3131 cmd_tx,
3232 }
3333 }
34+
35+ async fn ensure_idle ( & self ) -> Result < ( ) , Status > {
36+ self . mgr . ensure_idle ( ) . await
37+ }
3438}
3539
3640#[ tonic:: async_trait]
@@ -39,6 +43,7 @@ impl proto::process_manager_server::ProcessManager for ProcessManagerService {
3943 & self ,
4044 _request : Request < proto:: ListRequest > ,
4145 ) -> Result < Response < proto:: ListResponse > , Status > {
46+ self . ensure_idle ( ) . await ?;
4247 let procs = self . mgr . processes ( ) . await ;
4348 let processes = procs. iter ( ) . map ( process_to_proto) . collect ( ) ;
4449 Ok ( Response :: new ( proto:: ListResponse { processes } ) )
@@ -48,6 +53,7 @@ impl proto::process_manager_server::ProcessManager for ProcessManagerService {
4853 & self ,
4954 request : Request < proto:: DescribeRequest > ,
5055 ) -> Result < Response < proto:: DescribeResponse > , Status > {
56+ self . ensure_idle ( ) . await ?;
5157 let name_or_uuid = request. into_inner ( ) . name_or_uuid ;
5258 let ( mut detail, pid) = {
5359 let procs = self . mgr . processes ( ) . await ;
@@ -67,6 +73,7 @@ impl proto::process_manager_server::ProcessManager for ProcessManagerService {
6773 & self ,
6874 _request : Request < proto:: GetStatusRequest > ,
6975 ) -> Result < Response < proto:: GetStatusResponse > , Status > {
76+ self . ensure_idle ( ) . await ?;
7077 let procs = self . mgr . processes ( ) . await ;
7178 let total = procs. len ( ) as u32 ;
7279 let ( mut created, mut starting, mut running, mut stopping) = ( 0u32 , 0 , 0 , 0 ) ;
@@ -103,6 +110,7 @@ impl proto::process_manager_server::ProcessManager for ProcessManagerService {
103110 request : Request < proto:: CreateRequest > ,
104111 ) -> Result < Response < proto:: CreateResponse > , Status > {
105112 require_privileged_pipe_client ( & request) ?;
113+ self . ensure_idle ( ) . await ?;
106114 let req = request. into_inner ( ) ;
107115 let config = create_request_to_config ( & req) ?;
108116 let ( reply_tx, reply_rx) = oneshot:: channel ( ) ;
@@ -129,6 +137,7 @@ impl proto::process_manager_server::ProcessManager for ProcessManagerService {
129137 & self ,
130138 request : Request < proto:: StartRequest > ,
131139 ) -> Result < Response < proto:: StartResponse > , Status > {
140+ self . ensure_idle ( ) . await ?;
132141 let name_or_uuid = request. into_inner ( ) . name_or_uuid ;
133142 let ( reply_tx, reply_rx) = oneshot:: channel ( ) ;
134143 self . cmd_tx
@@ -154,6 +163,7 @@ impl proto::process_manager_server::ProcessManager for ProcessManagerService {
154163 & self ,
155164 request : Request < proto:: StopRequest > ,
156165 ) -> Result < Response < proto:: StopResponse > , Status > {
166+ self . ensure_idle ( ) . await ?;
157167 let name_or_uuid = request. into_inner ( ) . name_or_uuid ;
158168 let ( reply_tx, reply_rx) = oneshot:: channel ( ) ;
159169 self . cmd_tx
@@ -198,6 +208,7 @@ impl proto::process_manager_server::ProcessManager for ProcessManagerService {
198208 & self ,
199209 _request : Request < proto:: GetConfigRequest > ,
200210 ) -> Result < Response < proto:: GetConfigResponse > , Status > {
211+ self . ensure_idle ( ) . await ?;
201212 let procs = self . mgr . processes ( ) . await ;
202213 let runtime = procs
203214 . iter ( )
0 commit comments