mirror of https://github.com/harness/drone.git
feat: [CDE-544]: allow actions if stuck in starting/stopping transient state (#3113)
* feat: [CDE-544]: allow actions if stuck in starting/stopping transient state * feat: [CDE-544]: allow actions if stuck in starting/stopping transient state * feat: [CDE-544]: allow actions if stuck in starting/stopping transient state * feat: [CDE-544]: allow actions if stuck in starting/stopping transient statepull/3597/head
parent
bd9d15500c
commit
a5d442f289
|
@ -66,7 +66,7 @@ func (c *Service) setInstance(
|
|||
if instance != nil {
|
||||
gitspaceConfig.GitspaceInstance = instance
|
||||
instance.SpacePath = gitspaceConfig.SpacePath
|
||||
gitspaceStateType, err := enum.GetGitspaceStateFromInstance(instance.State, instance.Updated)
|
||||
gitspaceStateType, err := instance.GetGitspaceState()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -461,10 +461,7 @@ func (s gitspaceConfigStore) ToGitspaceConfig(
|
|||
}
|
||||
|
||||
if instance != nil {
|
||||
gitspaceStateType, err2 := enum.GetGitspaceStateFromInstance(
|
||||
instance.State,
|
||||
instance.Updated,
|
||||
)
|
||||
gitspaceStateType, err2 := instance.GetGitspaceState()
|
||||
if err2 != nil {
|
||||
return nil, err2
|
||||
}
|
||||
|
|
|
@ -14,11 +14,6 @@
|
|||
|
||||
package enum
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
type GitspaceStateType string
|
||||
|
||||
func (GitspaceStateType) Enum() []interface{} {
|
||||
|
@ -42,40 +37,3 @@ const (
|
|||
GitspaceStateError GitspaceStateType = "error"
|
||||
GitspaceStateUninitialized GitspaceStateType = "uninitialized"
|
||||
)
|
||||
|
||||
func GetGitspaceStateFromInstance(
|
||||
instanceState GitspaceInstanceStateType,
|
||||
lastUpdateTime int64,
|
||||
) (GitspaceStateType, error) {
|
||||
switch instanceState {
|
||||
case GitspaceInstanceStateRunning:
|
||||
return GitspaceStateRunning, nil
|
||||
case GitspaceInstanceStateDeleted:
|
||||
return GitspaceStateStopped, nil
|
||||
case GitspaceInstanceStateUninitialized:
|
||||
return GitspaceStateUninitialized, nil
|
||||
case GitspaceInstanceStateError,
|
||||
GitspaceInstanceStateUnknown:
|
||||
return GitspaceStateError, nil
|
||||
case GitspaceInstanceStateStarting:
|
||||
if lastUpdateTimeExceeded(lastUpdateTime) {
|
||||
return GitspaceStateError, nil
|
||||
}
|
||||
return GitspaceStateStarting, nil
|
||||
case GitspaceInstanceStateStopping,
|
||||
GitSpaceInstanceStateCleaning:
|
||||
if lastUpdateTimeExceeded(lastUpdateTime) {
|
||||
return GitspaceStateError, nil
|
||||
}
|
||||
return GitspaceStateStopping, nil
|
||||
case GitspaceInstanceStateCleaned:
|
||||
return GitspaceStateStopped, nil
|
||||
default:
|
||||
return GitspaceStateError, fmt.Errorf("unsupported gitspace instance state %s", string(instanceState))
|
||||
}
|
||||
}
|
||||
|
||||
func lastUpdateTimeExceeded(lastUpdateTime int64) bool {
|
||||
duration := time.Minute * 10
|
||||
return time.Since(time.UnixMilli(lastUpdateTime)) > duration
|
||||
}
|
||||
|
|
|
@ -15,6 +15,9 @@
|
|||
package types
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/harness/gitness/types/enum"
|
||||
)
|
||||
|
||||
|
@ -102,3 +105,41 @@ type GitspaceInstanceFilter struct {
|
|||
SpaceIDs []int64
|
||||
Limit int
|
||||
}
|
||||
|
||||
func (g *GitspaceInstance) GetGitspaceState() (enum.GitspaceStateType, error) {
|
||||
if g == nil {
|
||||
return enum.GitspaceStateError, fmt.Errorf("GitspaceInstance is nil")
|
||||
}
|
||||
instanceState := g.State
|
||||
switch instanceState {
|
||||
case enum.GitspaceInstanceStateRunning:
|
||||
return enum.GitspaceStateRunning, nil
|
||||
case enum.GitspaceInstanceStateDeleted:
|
||||
return enum.GitspaceStateStopped, nil
|
||||
case enum.GitspaceInstanceStateUninitialized:
|
||||
return enum.GitspaceStateUninitialized, nil
|
||||
case enum.GitspaceInstanceStateError,
|
||||
enum.GitspaceInstanceStateUnknown:
|
||||
return enum.GitspaceStateError, nil
|
||||
case enum.GitspaceInstanceStateStarting:
|
||||
if g.LastUsed != nil && lastUpdateTimeExceeded(*g.LastUsed) {
|
||||
return enum.GitspaceStateError, nil
|
||||
}
|
||||
return enum.GitspaceStateStarting, nil
|
||||
case enum.GitspaceInstanceStateStopping,
|
||||
enum.GitSpaceInstanceStateCleaning:
|
||||
if g.ActiveTimeEnded != nil && lastUpdateTimeExceeded(*g.ActiveTimeEnded) {
|
||||
return enum.GitspaceStateError, nil
|
||||
}
|
||||
return enum.GitspaceStateStopping, nil
|
||||
case enum.GitspaceInstanceStateCleaned:
|
||||
return enum.GitspaceStateStopped, nil
|
||||
default:
|
||||
return enum.GitspaceStateError, fmt.Errorf("unsupported gitspace instance state %s", string(instanceState))
|
||||
}
|
||||
}
|
||||
|
||||
func lastUpdateTimeExceeded(lastUpdateTime int64) bool {
|
||||
duration := time.Minute * 10
|
||||
return time.Since(time.UnixMilli(lastUpdateTime)) > duration
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue