diff --git a/operator/pkg/apis/cassandra/v1beta1/cassandradatacenter_types.go b/operator/pkg/apis/cassandra/v1beta1/cassandradatacenter_types.go index 5dc472d57..6e44beceb 100644 --- a/operator/pkg/apis/cassandra/v1beta1/cassandradatacenter_types.go +++ b/operator/pkg/apis/cassandra/v1beta1/cassandradatacenter_types.go @@ -256,6 +256,8 @@ type CassandraDatacenterSpec struct { AdditionalSeeds []string `json:"additionalSeeds,omitempty"` Reaper *ReaperConfig `json:"reaper,omitempty"` + + FastResume bool `json:"fastResume,omitempty"` } type NetworkingConfig struct { diff --git a/operator/pkg/reconciliation/reconcile_racks.go b/operator/pkg/reconciliation/reconcile_racks.go index 4b376a5bd..32fbaddeb 100644 --- a/operator/pkg/reconciliation/reconcile_racks.go +++ b/operator/pkg/reconciliation/reconcile_racks.go @@ -530,6 +530,22 @@ func (rc *ReconciliationContext) CheckPodsReady(endpointData httphelper.CassMeta return result.Continue() } + if rc.Datacenter.Spec.FastResume { + fastResumedOne := false + for i := range rc.dcPods { + pod := rc.dcPods[i] + if isMgmtApiRunning(pod) && isServerReadyToStart(pod) { + if err := rc.startCassandra(endpointData, pod); err != nil { + return result.Error(err) + } + fastResumedOne = true + } + } + if fastResumedOne { + return result.RequeueSoon(10) + } + } + // all errors in this function we're going to treat as likely ephemeral problems that would resolve // so we use ResultShouldRequeueSoon to check again soon