diff --git a/pkg/compute/guestdrivers/kvm.go b/pkg/compute/guestdrivers/kvm.go index 18b9c326b3..1d03e281f2 100644 --- a/pkg/compute/guestdrivers/kvm.go +++ b/pkg/compute/guestdrivers/kvm.go @@ -259,14 +259,17 @@ func (self *SKVMGuestDriver) GetGuestVncInfo(ctx context.Context, userCred mccli func (self *SKVMGuestDriver) RequestStopOnHost(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask, syncStatus bool) error { body := jsonutils.NewDict() params := task.GetParams() - timeout, err := params.Int("timeout") - if err != nil { - timeout = int64(options.Options.DefaultGuestStopTimeout) - } isForce, _ := params.Bool("is_force") if isForce { body.Set("is_force", jsonutils.JSONTrue) } + timeout, err := params.Int("timeout") + if err != nil { + timeout = int64(options.Options.DefaultGuestStopTimeout) + if isForce { + timeout = int64(options.Options.DefaultGuestForceStopTimeout) + } + } body.Add(jsonutils.NewInt(timeout), "timeout") header := self.getTaskRequestHeader(task) diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index b6b2d3d2bb..7ddd889628 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -1426,13 +1426,14 @@ func (self *SGuest) StartGuestStopTask(ctx context.Context, userCred mcclient.To self.SetStatus(ctx, userCred, api.VM_START_STOP, "") } params := jsonutils.NewDict() + timeout := options.Options.DefaultGuestStopTimeout if isForce { + timeout = options.Options.DefaultGuestForceStopTimeout params.Add(jsonutils.NewBool(isForce), "is_force") } if timeoutSecs != nil { params.Add(jsonutils.NewInt(int64(*timeoutSecs)), "timeout") } else { - timeout := options.Options.DefaultGuestStopTimeout params.Add(jsonutils.NewInt(int64(timeout)), "timeout") } params.Add(jsonutils.NewBool(stopCharging), "stop_charging") diff --git a/pkg/compute/options/options.go b/pkg/compute/options/options.go index 34cf347b06..f18f3d31c6 100644 --- a/pkg/compute/options/options.go +++ b/pkg/compute/options/options.go @@ -98,7 +98,8 @@ type ComputeOptions struct { DefaultDiskDriver string `help:"default disk driver" choices:"scsi|virtio|ide" default:"scsi"` DefaultDiskCacheMode string `help:"default kvm disk cache mode" choices:"writeback|none|writethrough" default:"none"` - DefaultGuestStopTimeout int `help:"default guest stop timeout" default:"300"` + DefaultGuestStopTimeout int `help:"default guest stop timeout" default:"300"` + DefaultGuestForceStopTimeout int `help:"default guest force stop timeout" default:"30"` SystemAdminQuotaCheck bool `help:"Enable quota check for system admin, default False" default:"false"` CloudaccountHealthStatusCheck bool `help:"Enable cloudaccount health status check, default True" default:"true"`