Skip to content

Commit

Permalink
Use updated kmapi Conditions
Browse files Browse the repository at this point in the history
Signed-off-by: Arnob Kumar Saha <arnob@appscode.com>
  • Loading branch information
ArnobKumarSaha committed Jul 18, 2023
1 parent ebc00ae commit 010af39
Show file tree
Hide file tree
Showing 172 changed files with 182,507 additions and 514 deletions.
33 changes: 17 additions & 16 deletions apis/schema/v1alpha1/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package v1alpha1

import (
kmapi "kmodules.xyz/client-go/api/v1"
cutil "kmodules.xyz/client-go/conditions"
)

func GetPhase(obj Interface) DatabaseSchemaPhase {
Expand All @@ -29,46 +30,46 @@ func GetPhase(obj Interface) DatabaseSchemaPhase {
if CheckIfSecretExpired(conditions) {
return DatabaseSchemaPhaseExpired
}
if kmapi.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeDBCreationUnsuccessful)) {
if cutil.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeDBCreationUnsuccessful)) {
return DatabaseSchemaPhaseFailed
}

// If Database or vault is not in ready state, Phase is 'Pending'
if !kmapi.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeDBServerReady)) ||
!kmapi.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeVaultReady)) {
if !cutil.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeDBServerReady)) ||
!cutil.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeVaultReady)) {
return DatabaseSchemaPhasePending
}

if kmapi.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeDoubleOptInNotPossible)) {
if cutil.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeDoubleOptInNotPossible)) {
return DatabaseSchemaPhaseFailed
}

// If SecretEngine or Role is not in ready state, Phase is 'InProgress'
if !kmapi.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeSecretEngineReady)) ||
!kmapi.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeRoleReady)) ||
!kmapi.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeSecretAccessRequestReady)) {
if !cutil.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeSecretEngineReady)) ||
!cutil.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeRoleReady)) ||
!cutil.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeSecretAccessRequestReady)) {
return DatabaseSchemaPhaseInProgress
}
// we are here means, SecretAccessRequest is approved and not expired. Now handle Init-Restore cases.

if !kmapi.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeAppBindingFound)) {
if !cutil.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeAppBindingFound)) {
return DatabaseSchemaPhaseInProgress
}

if kmapi.HasCondition(conditions, string(DatabaseSchemaConditionTypeRepositoryFound)) {
if cutil.HasCondition(conditions, string(DatabaseSchemaConditionTypeRepositoryFound)) {
// ----------------------------- Restore case -----------------------------
if !kmapi.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeRepositoryFound)) ||
!kmapi.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeRestoreCompleted)) {
if !cutil.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeRepositoryFound)) ||
!cutil.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeRestoreCompleted)) {
return DatabaseSchemaPhaseInProgress
}
if CheckIfRestoreFailed(conditions) {
return DatabaseSchemaPhaseFailed
} else {
return DatabaseSchemaPhaseCurrent
}
} else if kmapi.HasCondition(conditions, string(DatabaseSchemaConditionTypeInitScriptCompleted)) {
} else if cutil.HasCondition(conditions, string(DatabaseSchemaConditionTypeInitScriptCompleted)) {
// ----------------------------- Init case -----------------------------
if !kmapi.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeInitScriptCompleted)) {
if !cutil.IsConditionTrue(conditions, string(DatabaseSchemaConditionTypeInitScriptCompleted)) {
return DatabaseSchemaPhaseInProgress
}
if CheckIfInitScriptFailed(conditions) {
Expand All @@ -81,17 +82,17 @@ func GetPhase(obj Interface) DatabaseSchemaPhase {
}

func CheckIfInitScriptFailed(conditions []kmapi.Condition) bool {
_, cond := kmapi.GetCondition(conditions, string(DatabaseSchemaConditionTypeInitScriptCompleted))
_, cond := cutil.GetCondition(conditions, string(DatabaseSchemaConditionTypeInitScriptCompleted))
return cond.Message == string(DatabaseSchemaMessageInitScriptFailed)
}

func CheckIfRestoreFailed(conditions []kmapi.Condition) bool {
_, cond := kmapi.GetCondition(conditions, string(DatabaseSchemaConditionTypeRestoreCompleted))
_, cond := cutil.GetCondition(conditions, string(DatabaseSchemaConditionTypeRestoreCompleted))
return cond.Message == string(DatabaseSchemaMessageRestoreSessionFailed)
}

func CheckIfSecretExpired(conditions []kmapi.Condition) bool {
i, cond := kmapi.GetCondition(conditions, string(DatabaseSchemaConditionTypeSecretAccessRequestReady))
i, cond := cutil.GetCondition(conditions, string(DatabaseSchemaConditionTypeSecretAccessRequestReady))
if i == -1 {
return false
}
Expand Down
5 changes: 3 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ require (
k8s.io/kube-aggregator v0.25.1
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280
k8s.io/metrics v0.25.1
kmodules.xyz/client-go v0.25.23
kmodules.xyz/client-go v0.25.27-0.20230718074206-a78b13d99735
kmodules.xyz/crd-schema-fuzz v0.25.0
kmodules.xyz/custom-resources v0.25.2
kmodules.xyz/monitoring-agent-api v0.25.1
Expand All @@ -37,7 +37,7 @@ require (
kubeops.dev/sidekick v0.0.2-0.20230113102427-9848f83b2f0f
sigs.k8s.io/controller-runtime v0.13.1
sigs.k8s.io/yaml v1.3.0
stash.appscode.dev/apimachinery v0.30.0
stash.appscode.dev/apimachinery v0.30.1-0.20230718082002-162458018f60
)

require (
Expand Down Expand Up @@ -101,6 +101,7 @@ require (
github.com/nats-io/nats.go v1.22.1 // indirect
github.com/nats-io/nkeys v0.3.0 // indirect
github.com/nats-io/nuid v1.0.1 // indirect
github.com/onsi/gomega v1.24.0 // indirect
github.com/prometheus/client_golang v1.13.0 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.37.0 // indirect
Expand Down
9 changes: 5 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -567,6 +567,7 @@ github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAl
github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro=
github.com/onsi/gomega v1.20.1/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo=
github.com/onsi/gomega v1.24.0 h1:+0glovB9Jd6z3VR+ScSwQqXVTIfJcGA9UBM8yzQxhqg=
github.com/onsi/gomega v1.24.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg=
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
Expand Down Expand Up @@ -1368,8 +1369,8 @@ k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85 h1:cTdVh7LYu82xeClmfzGtgyspNh6Ux
k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
kmodules.xyz/apiversion v0.2.0 h1:vAQYqZFm4xu4pbB1cAdHbFEPES6EQkcR4wc06xdTOWk=
kmodules.xyz/apiversion v0.2.0/go.mod h1:oPX8g8LvlPdPX3Yc5YvCzJHQnw3YF/X4/jdW0b1am80=
kmodules.xyz/client-go v0.25.23 h1:qz5XJYHLVZUowqfRXEJD7JQ4iaLLzQ1O1zPMmsdrkJw=
kmodules.xyz/client-go v0.25.23/go.mod h1:wbdzLEoDYiCPI6dTW0mIAGNwkwFV4lC5BN1FJxiDsbw=
kmodules.xyz/client-go v0.25.27-0.20230718074206-a78b13d99735 h1:5L5Gh6v4SIKWZvbByPj7uE79IMZfn6zclEVWFIFjylw=
kmodules.xyz/client-go v0.25.27-0.20230718074206-a78b13d99735/go.mod h1:PYfJtJs+AhgfkJNIeUObU4SqAkY85ARTlXxC+2gAsgo=
kmodules.xyz/crd-schema-fuzz v0.25.0 h1:c5ZxNRqJak1bkGhECmyrKpzKGThFMB4088Kynyvngbc=
kmodules.xyz/crd-schema-fuzz v0.25.0/go.mod h1:VigFz19GwCxMGhb3YjCtlSXmfXb0J/g9du1So6rvqsk=
kmodules.xyz/custom-resources v0.25.2 h1:+PJgUZvbbSgyNT7EX9gUZ3PIzY2LAW03TDW8cevvXqo=
Expand Down Expand Up @@ -1414,5 +1415,5 @@ sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
stash.appscode.dev/apimachinery v0.30.0 h1:imc3OuXaCI8B9ImB1e4QtDYhZCc2VyiXQHW5gheKG/s=
stash.appscode.dev/apimachinery v0.30.0/go.mod h1:xEWpZn0wmhP0Acpq7cpebNbMXwIui8Crh4dpuE9FHSQ=
stash.appscode.dev/apimachinery v0.30.1-0.20230718082002-162458018f60 h1:yAZjYnOt0xtu4FBFyyDRc078d35rtX4nY8Qms9FC38Y=
stash.appscode.dev/apimachinery v0.30.1-0.20230718082002-162458018f60/go.mod h1:Yx8VEJB+U3ibUWormB/1Nbx2Lo03Evoe7bURXDSOmsc=
27 changes: 14 additions & 13 deletions pkg/controller/initializer/stash/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import (
"k8s.io/client-go/tools/reference"
"k8s.io/klog/v2"
kmapi "kmodules.xyz/client-go/api/v1"
cutil "kmodules.xyz/client-go/conditions"
core_util "kmodules.xyz/client-go/core/v1"
"kmodules.xyz/client-go/discovery"
dmcond "kmodules.xyz/client-go/dynamic/conditions"
Expand Down Expand Up @@ -114,14 +115,14 @@ func (c *Controller) handleTerminateEvent(ri *restoreInfo) error {
if err != nil {
return fmt.Errorf("failed to read conditions with %s", err.Error())
}
_, dbCond := kmapi.GetCondition(conditions, api.DatabaseDataRestored)
_, dbCond := cutil.GetCondition(conditions, api.DatabaseDataRestored)
if dbCond == nil {
dbCond = &kmapi.Condition{
Type: api.DatabaseDataRestored,
}
}
if dbCond.Status != core.ConditionFalse {
dbCond.Status = core.ConditionFalse
if dbCond.Status != metav1.ConditionFalse {
dbCond.Status = metav1.ConditionFalse
dbCond.Reason = api.DataRestoreInterrupted
dbCond.Message = fmt.Sprintf("Data initializer %s %s/%s with UID %s has been deleted",
ri.invoker.Kind,
Expand All @@ -131,8 +132,8 @@ func (c *Controller) handleTerminateEvent(ri *restoreInfo) error {
)
}

conditions = kmapi.RemoveCondition(conditions, api.DatabaseDataRestoreStarted)
conditions = kmapi.SetCondition(conditions, *dbCond)
conditions = cutil.RemoveCondition(conditions, api.DatabaseDataRestoreStarted)
conditions = cutil.SetCondition(conditions, *dbCond)
return ri.do.UpdateConditions(conditions)
}
return nil
Expand All @@ -155,7 +156,7 @@ func (c *Controller) handleRestoreInvokerEvent(ri *restoreInfo) error {
Type: api.DatabaseDataRestored,
}
if ri.phase == v1beta1.RestoreSucceeded {
dbCond.Status = core.ConditionTrue
dbCond.Status = metav1.ConditionTrue
dbCond.Reason = api.DatabaseSuccessfullyRestored
dbCond.Message = fmt.Sprintf("Successfully restored data by initializer %s %s/%s with UID %s",
ri.invoker.Kind,
Expand All @@ -164,7 +165,7 @@ func (c *Controller) handleRestoreInvokerEvent(ri *restoreInfo) error {
ri.invokerUID,
)
} else {
dbCond.Status = core.ConditionFalse
dbCond.Status = metav1.ConditionFalse
dbCond.Reason = api.FailedToRestoreData
dbCond.Message = fmt.Sprintf("Failed to restore data by initializer %s %s/%s with UID %s."+
"\nRun 'kubectl describe %s %s -n %s' for more details.",
Expand All @@ -182,8 +183,8 @@ func (c *Controller) handleRestoreInvokerEvent(ri *restoreInfo) error {
if err != nil {
return fmt.Errorf("failed to read conditions with %s", err.Error())
}
conditions = kmapi.RemoveCondition(conditions, api.DatabaseDataRestoreStarted)
conditions = kmapi.SetCondition(conditions, dbCond)
conditions = cutil.RemoveCondition(conditions, api.DatabaseDataRestoreStarted)
conditions = cutil.SetCondition(conditions, dbCond)
err = ri.do.UpdateConditions(conditions)
if err != nil {
return fmt.Errorf("failed to update conditions with %s", err.Error())
Expand All @@ -198,16 +199,16 @@ func (c *Controller) handleRestoreInvokerEvent(ri *restoreInfo) error {
// Remove: "DataRestored" condition, if any.
dbCond := kmapi.Condition{
Type: api.DatabaseDataRestoreStarted,
Status: core.ConditionTrue,
Status: metav1.ConditionTrue,
Reason: api.DataRestoreStartedByExternalInitializer,
Message: fmt.Sprintf("Data restore started by initializer: %s/%s/%s with UID %s.", *ri.invoker.APIGroup, ri.invoker.Kind, ri.invoker.Name, ri.invokerUID),
}
_, conditions, err := ri.do.ReadConditions()
if err != nil {
return fmt.Errorf("failed to read conditions with %s", err.Error())
}
conditions = kmapi.RemoveCondition(conditions, api.DatabaseDataRestored)
conditions = kmapi.SetCondition(conditions, dbCond)
conditions = cutil.RemoveCondition(conditions, api.DatabaseDataRestored)
conditions = cutil.SetCondition(conditions, dbCond)
return ri.do.UpdateConditions(conditions)
}

Expand Down Expand Up @@ -336,7 +337,7 @@ func (c *Controller) writeRestoreCompletionEvent(do dmcond.DynamicOptions, cond
}

eventType := core.EventTypeNormal
if cond.Status != core.ConditionTrue {
if cond.Status != metav1.ConditionTrue {
eventType = core.EventTypeWarning
}
// create event
Expand Down
5 changes: 2 additions & 3 deletions pkg/controller/statefulset/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import (
api "kubedb.dev/apimachinery/apis/kubedb/v1alpha2"

apps "k8s.io/api/apps/v1"
core "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
kmapi "kmodules.xyz/client-go/api/v1"
Expand Down Expand Up @@ -204,10 +203,10 @@ func (c *Controller) ensureReadyReplicasCond(dbInfo *databaseInfo) error {
}

if dbInfo.replicasReady {
dbCond.Status = core.ConditionTrue
dbCond.Status = metav1.ConditionTrue
dbCond.Reason = api.AllReplicasAreReady
} else {
dbCond.Status = core.ConditionFalse
dbCond.Status = metav1.ConditionFalse
dbCond.Reason = api.SomeReplicasAreNotReady
}

Expand Down
37 changes: 19 additions & 18 deletions pkg/phase/phase.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,25 @@ import (
api "kubedb.dev/apimachinery/apis/kubedb/v1alpha2"

kmapi "kmodules.xyz/client-go/api/v1"
cutil "kmodules.xyz/client-go/conditions"
)

func DashboardPhaseFromCondition(conditions []kmapi.Condition) dapi.DashboardPhase {
if !kmapi.IsConditionTrue(conditions, string(dapi.DashboardConditionProvisioned)) {
if !cutil.IsConditionTrue(conditions, string(dapi.DashboardConditionProvisioned)) {
return dapi.DashboardPhaseProvisioning
}

if !kmapi.IsConditionTrue(conditions, string(dapi.DashboardConditionAcceptingConnection)) {
if !cutil.IsConditionTrue(conditions, string(dapi.DashboardConditionAcceptingConnection)) {
return dapi.DashboardPhaseNotReady
}

// TODO: implement deployment watcher to handle replica ready

if kmapi.HasCondition(conditions, string(dapi.DashboardConditionServerHealthy)) {
if cutil.HasCondition(conditions, string(dapi.DashboardConditionServerHealthy)) {

if !kmapi.IsConditionTrue(conditions, string(dapi.DashboardConditionServerHealthy)) {
if !cutil.IsConditionTrue(conditions, string(dapi.DashboardConditionServerHealthy)) {

_, cond := kmapi.GetCondition(conditions, string(dapi.DashboardConditionServerHealthy))
_, cond := cutil.GetCondition(conditions, string(dapi.DashboardConditionServerHealthy))

if cond.Reason == dapi.DashboardStateRed {
return dapi.DashboardPhaseNotReady
Expand Down Expand Up @@ -74,20 +75,20 @@ func PhaseFromCondition(conditions []kmapi.Condition) api.DatabasePhase {
// ================================= Handling "HealthCheckPaused" condition ==========================
// If the condition is present and its "true", then the phase should be "Unknown".
// Skip if the database isn't provisioned yet.
if kmapi.IsConditionTrue(conditions, api.DatabaseHealthCheckPaused) {
if cutil.IsConditionTrue(conditions, api.DatabaseHealthCheckPaused) {
return api.DatabasePhaseUnknown
}

// ================================== Handling "ProvisioningStarted" condition ========================
// If the condition is present and its "true", then the phase should be "Provisioning".
if kmapi.IsConditionTrue(conditions, api.DatabaseProvisioningStarted) {
if cutil.IsConditionTrue(conditions, api.DatabaseProvisioningStarted) {
phase = api.DatabasePhaseProvisioning
}

// ================================== Handling "Halted" condition =======================================
// The "Halted" condition has higher priority, that's why it is placed at the top.
// If the condition is present and its "true", then the phase should be "Halted".
if kmapi.IsConditionTrue(conditions, api.DatabaseHalted) {
if cutil.IsConditionTrue(conditions, api.DatabaseHalted) {
return api.DatabasePhaseHalted
}

Expand All @@ -97,44 +98,44 @@ func PhaseFromCondition(conditions []kmapi.Condition) api.DatabasePhase {
// And there will be no "false" status for "DataRestoreStarted" type.
// 2. if condition["DataRestored"] = false, the phase should be "NotReady".
// if the status is "true", the phase should depend on the rest of checks.
if kmapi.IsConditionTrue(conditions, api.DatabaseDataRestoreStarted) {
if cutil.IsConditionTrue(conditions, api.DatabaseDataRestoreStarted) {
// TODO:
// - remove these conditions.
// - It is here for backward compatibility.
// - Just return "Restoring" in future.
if kmapi.HasCondition(conditions, api.DatabaseDataRestored) {
if kmapi.IsConditionFalse(conditions, api.DatabaseDataRestored) {
if cutil.HasCondition(conditions, api.DatabaseDataRestored) {
if cutil.IsConditionFalse(conditions, api.DatabaseDataRestored) {
return api.DatabasePhaseNotReady
}
} else {
return api.DatabasePhaseDataRestoring
}
}
if kmapi.IsConditionFalse(conditions, api.DatabaseDataRestored) {
if cutil.IsConditionFalse(conditions, api.DatabaseDataRestored) {
return api.DatabasePhaseNotReady
}

// ================================= Handling "AcceptingConnection" condition ==========================
// If the condition is present and its "false", then the phase should be "NotReady".
// Skip if the database isn't provisioned yet.
if kmapi.IsConditionFalse(conditions, api.DatabaseAcceptingConnection) && kmapi.IsConditionTrue(conditions, api.DatabaseProvisioned) {
if cutil.IsConditionFalse(conditions, api.DatabaseAcceptingConnection) && cutil.IsConditionTrue(conditions, api.DatabaseProvisioned) {
return api.DatabasePhaseNotReady
}

// ================================= Handling "ReplicaReady" condition ==========================
// If the condition is present and its "false", then the phase should be "Critical".
// Skip if the database isn't provisioned yet.
if kmapi.IsConditionFalse(conditions, api.DatabaseReplicaReady) && kmapi.IsConditionTrue(conditions, api.DatabaseProvisioned) {
if cutil.IsConditionFalse(conditions, api.DatabaseReplicaReady) && cutil.IsConditionTrue(conditions, api.DatabaseProvisioned) {
return api.DatabasePhaseCritical
}

// ================================= Handling "Ready" condition ==========================
// Skip if the database isn't provisioned yet.
if kmapi.IsConditionFalse(conditions, api.DatabaseReady) && kmapi.IsConditionTrue(conditions, api.DatabaseProvisioned) {
if cutil.IsConditionFalse(conditions, api.DatabaseReady) && cutil.IsConditionTrue(conditions, api.DatabaseProvisioned) {
return api.DatabasePhaseCritical
}
// Ready, if the database is provisioned and readinessProbe passed.
if kmapi.IsConditionTrue(conditions, api.DatabaseReady) && kmapi.IsConditionTrue(conditions, api.DatabaseProvisioned) {
if cutil.IsConditionTrue(conditions, api.DatabaseReady) && cutil.IsConditionTrue(conditions, api.DatabaseProvisioned) {
return api.DatabasePhaseReady
}

Expand All @@ -152,8 +153,8 @@ func PhaseFromCondition(conditions []kmapi.Condition) api.DatabasePhase {
// 4. If cond1.LastTransactionTime = cond2.LastTransactionTime, then return 0
// 5. If cond1.LastTransactionTime < cond2.LastTransactionTime, then return -1
func compareLastTransactionTime(conditions []kmapi.Condition, type1, type2 string) int32 {
idx1, cond1 := kmapi.GetCondition(conditions, type1)
idx2, cond2 := kmapi.GetCondition(conditions, type2)
idx1, cond1 := cutil.GetCondition(conditions, type1)
idx2, cond2 := cutil.GetCondition(conditions, type2)
// both condition does not exist
if idx1 == -1 && idx2 == -1 {
return 0
Expand Down
Loading

0 comments on commit 010af39

Please sign in to comment.