cri: disable drain-exec-IO if it is empty timeout

Signed-off-by: Wei Fu <fuweid89@gmail.com>
This commit is contained in:
Wei Fu 2023-03-03 09:19:22 +08:00
parent 791f137a5b
commit ffebcb1223
2 changed files with 22 additions and 8 deletions

View File

@ -117,9 +117,15 @@ func (c *criService) execInternal(ctx context.Context, container containerd.Cont
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
drainExecSyncIOTimeout, err := time.ParseDuration(c.config.DrainExecSyncIOTimeout) var drainExecSyncIOTimeout time.Duration
if err != nil { var err error
return nil, fmt.Errorf("failed to parse drain_exec_sync_io_timeout %q: %w", c.config.DrainExecSyncIOTimeout, err)
if c.config.DrainExecSyncIOTimeout != "" {
drainExecSyncIOTimeout, err = time.ParseDuration(c.config.DrainExecSyncIOTimeout)
if err != nil {
return nil, fmt.Errorf("failed to parse drain_exec_sync_io_timeout %q: %w",
c.config.DrainExecSyncIOTimeout, err)
}
} }
spec, err := container.Spec(ctx) spec, err := container.Spec(ctx)
@ -298,5 +304,6 @@ func drainExecSyncIO(ctx context.Context, execProcess containerd.Process, drainE
execProcess.ID(), err) execProcess.ID(), err)
} }
} }
return fmt.Errorf("failed to drain exec process %q io because io is still held by other processes", execProcess.ID()) return fmt.Errorf("failed to drain exec process %q io in %s because io is still held by other processes",
execProcess.ID(), drainExecIOTimeout)
} }

View File

@ -117,9 +117,15 @@ func (c *criService) execInternal(ctx context.Context, container containerd.Cont
ctx, cancel := context.WithCancel(ctx) ctx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
drainExecSyncIOTimeout, err := time.ParseDuration(c.config.DrainExecSyncIOTimeout) var drainExecSyncIOTimeout time.Duration
if err != nil { var err error
return nil, fmt.Errorf("failed to parse drain_exec_sync_io_timeout %q: %w", c.config.DrainExecSyncIOTimeout, err)
if c.config.DrainExecSyncIOTimeout != "" {
drainExecSyncIOTimeout, err = time.ParseDuration(c.config.DrainExecSyncIOTimeout)
if err != nil {
return nil, fmt.Errorf("failed to parse drain_exec_sync_io_timeout %q: %w",
c.config.DrainExecSyncIOTimeout, err)
}
} }
spec, err := container.Spec(ctx) spec, err := container.Spec(ctx)
@ -298,5 +304,6 @@ func drainExecSyncIO(ctx context.Context, execProcess containerd.Process, drainE
execProcess.ID(), err) execProcess.ID(), err)
} }
} }
return fmt.Errorf("failed to drain exec process %q io because io is still held by other processes", execProcess.ID()) return fmt.Errorf("failed to drain exec process %q io in %s because io is still held by other processes",
execProcess.ID(), drainExecIOTimeout)
} }