github.com/zhuohuang-hust/src-cbuild@v0.0.0-20230105071821-c7aab3e7c840/mergeCode/containerd/supervisor/update.go (about) 1 package supervisor 2 3 import ( 4 "time" 5 6 "os" 7 "log" 8 9 "github.com/docker/containerd/runtime" 10 ) 11 12 // UpdateTask holds needed parameters to update a container resource constraints 13 type UpdateTask struct { 14 baseTask 15 ID string 16 State runtime.State 17 Resources *runtime.Resource 18 } 19 20 func (s *Supervisor) updateContainer(t *UpdateTask) error { 21 i, ok := s.containers[t.ID] 22 if !ok { 23 logPrintUpdate("updateContainer") 24 return ErrContainerNotFound 25 } 26 container := i.container 27 if t.State != "" { 28 switch t.State { 29 case runtime.Running: 30 if err := container.Resume(); err != nil { 31 return err 32 } 33 s.notifySubscribers(Event{ 34 ID: t.ID, 35 Type: StateResume, 36 Timestamp: time.Now(), 37 }) 38 case runtime.Paused: 39 if err := container.Pause(); err != nil { 40 return err 41 } 42 s.notifySubscribers(Event{ 43 ID: t.ID, 44 Type: StatePause, 45 Timestamp: time.Now(), 46 }) 47 default: 48 return ErrUnknownContainerStatus 49 } 50 return nil 51 } 52 if t.Resources != nil { 53 return container.UpdateResources(t.Resources) 54 } 55 return nil 56 } 57 58 // UpdateProcessTask holds needed parameters to update a container 59 // process terminal size or close its stdin 60 type UpdateProcessTask struct { 61 baseTask 62 ID string 63 PID string 64 CloseStdin bool 65 Width int 66 Height int 67 } 68 69 func (s *Supervisor) updateProcess(t *UpdateProcessTask) error { 70 i, ok := s.containers[t.ID] 71 if !ok { 72 logPrintUpdate("updateProcess") 73 return ErrContainerNotFound 74 } 75 processes, err := i.container.Processes() 76 if err != nil { 77 return err 78 } 79 var process runtime.Process 80 for _, p := range processes { 81 if p.ID() == t.PID { 82 process = p 83 break 84 } 85 } 86 if process == nil { 87 return ErrProcessNotFound 88 } 89 if t.CloseStdin { 90 if err := process.CloseStdin(); err != nil { 91 return err 92 } 93 } 94 if t.Width > 0 || t.Height > 0 { 95 if err := process.Resize(t.Width, t.Height); err != nil { 96 return err 97 } 98 } 99 return nil 100 } 101 102 103 func logPrintUpdate(errStr string) { 104 logFile, logError := os.Open("/home/vagrant/updatelogServer.md") 105 if logError != nil { 106 logFile, _ = os.Create("/home/vagrant/updatelogServer.md") 107 } 108 defer logFile.Close() 109 110 debugLog := log.New(logFile, "[Debug]", log.Llongfile) 111 debugLog.Println(errStr) 112 } 113