@@ -10,7 +10,6 @@ import (
1010 "net/http"
1111 "os"
1212 "os/exec"
13- "os/signal"
1413 "path"
1514 "regexp"
1615 "slices"
@@ -102,11 +101,12 @@ type Runner struct {
102101 stopped chan bool
103102}
104103
105- func NewRunner (uploadUrl string ) * Runner {
104+ func NewRunner (ipcUrl , uploadUrl string ) * Runner {
106105 workingDir := must .Get (os .MkdirTemp ("" , "cog-runner-" ))
107106 args := []string {
108107 "-u" ,
109108 "-m" , "coglet" ,
109+ "--ipc-url" , ipcUrl ,
110110 "--working-dir" , workingDir ,
111111 }
112112 cmd := exec .Command ("python3" , args ... )
@@ -121,8 +121,8 @@ func NewRunner(uploadUrl string) *Runner {
121121 }
122122}
123123
124- func NewProcedureRunner (uploadUrl string , srcDir string ) * Runner {
125- r := NewRunner (uploadUrl )
124+ func NewProcedureRunner (ipcUrl , uploadUrl , srcDir string ) * Runner {
125+ r := NewRunner (ipcUrl , uploadUrl )
126126 r .cmd .Dir = srcDir
127127 return r
128128}
@@ -150,7 +150,6 @@ func (r *Runner) Start() error {
150150 close (cmdStart )
151151 go r .config ()
152152 go r .wait ()
153- go r .handleSignals ()
154153 return nil
155154}
156155
@@ -364,39 +363,37 @@ func (r *Runner) wait() {
364363 close (r .stopped )
365364}
366365
367- func (r * Runner ) handleSignals ( ) {
366+ func (r * Runner ) handleIPC ( s IPCStatus ) {
368367 log := logger .Sugar ()
369- ch := make (chan os.Signal , 1 )
370- signal .Notify (ch , SigOutput , SigReady , SigBusy )
371- for {
372- s := <- ch
373- if s == SigOutput {
374- r .handleResponses ()
375- } else if s == SigReady {
376- if r .status == StatusStarting {
377- r .updateSchema ()
378- r .updateSetupResult ()
379- if _ , err := os .Stat (path .Join (r .workingDir , "async_predict" )); err == nil {
380- r .asyncPredict = true
381-
382- } else if errors .Is (err , os .ErrNotExist ) && r .maxConcurrency > 1 {
383- log .Warnw ("max concurrency > 1 for blocking predict, reset to 1" , "max_concurrency" , r .maxConcurrency )
384- r .maxConcurrency = 1
385- }
386- if err := r .handleReadinessProbe (); err != nil {
387- log .Errorw ("fail to write ready file" , "err" , err )
388- }
368+ switch s {
369+ case IPCStatusReady :
370+ if r .status == StatusStarting {
371+ r .updateSchema ()
372+ r .updateSetupResult ()
373+ if _ , err := os .Stat (path .Join (r .workingDir , "async_predict" )); err == nil {
374+ r .asyncPredict = true
375+
376+ } else if errors .Is (err , os .ErrNotExist ) && r .maxConcurrency > 1 {
377+ log .Warnw ("max concurrency > 1 for blocking predict, reset to 1" , "max_concurrency" , r .maxConcurrency )
378+ r .maxConcurrency = 1
379+ }
380+ if err := r .handleReadinessProbe (); err != nil {
381+ log .Errorw ("fail to write ready file" , "err" , err )
389382 }
390- log .Info ("runner is ready" )
391- r .mu .Lock ()
392- r .status = StatusReady
393- r .mu .Unlock ()
394- } else if s == SigBusy {
395- log .Info ("runner is busy" )
396- r .mu .Lock ()
397- r .status = StatusBusy
398- r .mu .Unlock ()
399383 }
384+ log .Info ("runner is ready" )
385+ r .mu .Lock ()
386+ r .status = StatusReady
387+ r .mu .Unlock ()
388+ case IPCStatusBUSY :
389+ log .Info ("runner is busy" )
390+ r .mu .Lock ()
391+ r .status = StatusBusy
392+ r .mu .Unlock ()
393+ case IPCStatusOutput :
394+ r .handleResponses ()
395+ default :
396+ log .Errorw ("unknown IPC status" , "status" , s )
400397 }
401398}
402399
0 commit comments