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 state
pull/3597/head
Ansuman Satapathy 2024-12-05 05:02:57 +00:00 committed by Harness
parent bd9d15500c
commit a5d442f289
4 changed files with 43 additions and 47 deletions

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}