Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions pkg/unikontainers/unikontainers.go
Original file line number Diff line number Diff line change
Expand Up @@ -890,7 +890,7 @@ func (u *Unikontainer) executeHooksConcurrently(name string, hooks []specs.Hook,
wg.Add(1)
go func(h specs.Hook) {
defer wg.Done()
err := executeHook(h, s)
err := executeHook(h, s, u.UruncCfg.DefaultHookTimeoutSec)
if err != nil {
uniklog.WithFields(logrus.Fields{
"id": u.State.ID,
Expand Down Expand Up @@ -930,7 +930,7 @@ func (u *Unikontainer) executeHooksSequentially(name string, hooks []specs.Hook,
"args": hooks[i].Args,
}).Debug("Executing hook")

err := executeHook(hooks[i], s)
err := executeHook(hooks[i], s, u.UruncCfg.DefaultHookTimeoutSec)
if err != nil {
uniklog.WithFields(logrus.Fields{
"id": u.State.ID,
Expand Down
18 changes: 10 additions & 8 deletions pkg/unikontainers/urunc_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,11 @@ type UruncTimestamps struct {
}

type UruncConfig struct {
Log UruncLog `toml:"log"`
Timestamps UruncTimestamps `toml:"timestamps"`
Monitors map[string]types.MonitorConfig `toml:"monitors"`
ExtraBins map[string]types.ExtraBinConfig `toml:"extra_binaries"`
Log UruncLog `toml:"log"`
Timestamps UruncTimestamps `toml:"timestamps"`
Monitors map[string]types.MonitorConfig `toml:"monitors"`
ExtraBins map[string]types.ExtraBinConfig `toml:"extra_binaries"`
DefaultHookTimeoutSec uint `toml:"default_hook_timeout_sec"`
}

// this struct is used to parse only the log and timestamp section of the urunc config file
Expand Down Expand Up @@ -96,10 +97,11 @@ func defaultExtraBinConfig() map[string]types.ExtraBinConfig {

func defaultUruncConfig() *UruncConfig {
return &UruncConfig{
Log: defaultLogConfig(),
Timestamps: defaultTimestampsConfig(),
Monitors: defaultMonitorsConfig(),
ExtraBins: defaultExtraBinConfig(),
Log: defaultLogConfig(),
Timestamps: defaultTimestampsConfig(),
Monitors: defaultMonitorsConfig(),
ExtraBins: defaultExtraBinConfig(),
DefaultHookTimeoutSec: 30,
}
}

Expand Down
1 change: 1 addition & 0 deletions pkg/unikontainers/urunc_config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -525,6 +525,7 @@ func TestDefaultConfigs(t *testing.T) {
assert.Equal(t, testTimestampsPath, config.Timestamps.Destination)
assert.Len(t, config.Monitors, 5)
assert.Len(t, config.ExtraBins, 1)
assert.Equal(t, uint(30), config.DefaultHookTimeoutSec)
})

t.Run("defaultLogMetricsConfig", func(t *testing.T) {
Expand Down
4 changes: 3 additions & 1 deletion pkg/unikontainers/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -304,14 +304,16 @@ func rmMultipleDirs(prefixPath string, dirs []string) error {
return nil
}

func executeHook(hook specs.Hook, state []byte) error {
func executeHook(hook specs.Hook, state []byte, defaultTimeoutSec uint) error {
var stdout, stderr bytes.Buffer
var cancel context.CancelFunc
ctx := context.Background()

// Apply hook-specific timeout if set, otherwise use global config timeout
if hook.Timeout != nil && *hook.Timeout > 0 {
ctx, cancel = context.WithTimeout(ctx, time.Duration(*hook.Timeout)*time.Second)
} else if defaultTimeoutSec > 0 {
ctx, cancel = context.WithTimeout(ctx, time.Duration(defaultTimeoutSec)*time.Second)
}
if cancel != nil {
defer cancel()
Expand Down