fix nil pointer panic for monitor

Signed-off-by: Ye Sijun <junnplus@gmail.com>
This commit is contained in:
Ye Sijun 2022-04-20 13:47:09 +08:00
parent 9503d7219e
commit 22cd13b370
No known key found for this signature in database
GPG Key ID: 0582626C83FA9CD0

View File

@ -214,21 +214,30 @@ func (m *monitor) monitor(ctx context.Context) ([]change, error) {
} }
var changes []change var changes []change
for _, c := range containers { for _, c := range containers {
var (
task containerd.Task
status containerd.Status
err error
)
labels, err := c.Labels(ctx) labels, err := c.Labels(ctx)
if err != nil { if err != nil {
return nil, err return nil, err
} }
desiredStatus := containerd.ProcessStatus(labels[restart.StatusLabel]) desiredStatus := containerd.ProcessStatus(labels[restart.StatusLabel])
task, err := c.Task(ctx, nil) if task, err = c.Task(ctx, nil); err == nil {
if err != nil && desiredStatus == containerd.Stopped { if status, err = task.Status(ctx); err == nil {
continue if desiredStatus == status.Status {
continue
}
}
} }
status, err := task.Status(ctx)
if err != nil && desiredStatus == containerd.Stopped { // Task or Status return error, only desired to stop
continue if err != nil {
} logrus.WithError(err).Error("monitor")
if desiredStatus == status.Status { if desiredStatus != containerd.Stopped {
continue continue
}
} }
switch desiredStatus { switch desiredStatus {