Skip to content

Commit

Permalink
WIP: stop reconciliation and clustering
Browse files Browse the repository at this point in the history
Signed-off-by: d-kuro <[email protected]>
  • Loading branch information
d-kuro committed Oct 11, 2023
1 parent fcde57d commit 8604b9d
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 12 deletions.
12 changes: 7 additions & 5 deletions api/v1beta1/mysqlcluster_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -288,11 +288,13 @@ type MySQLClusterStatus struct {
}

const (
ConditionInitialized string = "Initialized"
ConditionAvailable string = "Available"
ConditionHealthy string = "Healthy"
ConditionStatefulSetReady string = "StatefulSetReady"
ConditionReconcileSuccess string = "ReconcileSuccess"
ConditionInitialized string = "Initialized"
ConditionAvailable string = "Available"
ConditionHealthy string = "Healthy"
ConditionStatefulSetReady string = "StatefulSetReady"
ConditionReconcileSuccess string = "ReconcileSuccess"
ConditionReconciliationActive string = "ReconciliationActive"
ConditionClusteringActive string = "ClusteringActive"
)

// BackupStatus represents the status of the last successful backup.
Expand Down
12 changes: 7 additions & 5 deletions api/v1beta2/mysqlcluster_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -602,11 +602,13 @@ type MySQLClusterStatus struct {
}

const (
ConditionInitialized string = "Initialized"
ConditionAvailable string = "Available"
ConditionHealthy string = "Healthy"
ConditionStatefulSetReady string = "StatefulSetReady"
ConditionReconcileSuccess string = "ReconcileSuccess"
ConditionInitialized string = "Initialized"
ConditionAvailable string = "Available"
ConditionHealthy string = "Healthy"
ConditionStatefulSetReady string = "StatefulSetReady"
ConditionReconcileSuccess string = "ReconcileSuccess"
ConditionReconciliationActive string = "ReconciliationActive"
ConditionClusteringActive string = "ClusteringActive"
)

// BackupStatus represents the status of the last successful backup.
Expand Down
8 changes: 8 additions & 0 deletions clustering/process.go
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,14 @@ func (p *managerProcess) updateStatus(ctx context.Context, ss *StatusSet) error
meta.SetStatusCondition(&cluster.Status.Conditions, updateCond(mocov1beta2.ConditionAvailable, available))
meta.SetStatusCondition(&cluster.Status.Conditions, updateCond(mocov1beta2.ConditionHealthy, healthy))

meta.SetStatusCondition(&cluster.Status.Conditions,
metav1.Condition{
Type: mocov1beta2.ConditionClusteringActive,
Status: metav1.ConditionTrue,
Reason: "ClusteringActive",
},
)

if available == metav1.ConditionTrue {
p.metrics.available.Set(1)
} else {
Expand Down
84 changes: 84 additions & 0 deletions controllers/mysqlcluster_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,13 @@ func (r *MySQLClusterReconciler) reconcileV1(ctx context.Context, req ctrl.Reque
return ctrl.Result{}, err
}

if cluster.Annotations[constants.AnnClusteringStopped] == "true" {
if err := r.clusteringStopV1(ctx, cluster); err != nil {
return ctrl.Result{}, err
}
return ctrl.Result{}, nil
}

r.ClusterManager.Update(client.ObjectKeyFromObject(cluster), string(controller.ReconcileIDFromContext(ctx)))
return ctrl.Result{}, nil
}
Expand Down Expand Up @@ -1914,12 +1921,89 @@ func (r *MySQLClusterReconciler) updateStatus(ctx context.Context, cluster *moco
},
)

meta.SetStatusCondition(&cluster.Status.Conditions,
metav1.Condition{
Type: mocov1beta2.ConditionReconciliationActive,
Status: metav1.ConditionTrue,
Reason: "ReconciliationActive",
},
)

if !equality.Semantic.DeepEqual(orig, cluster) {
if err := r.Status().Update(ctx, cluster); err != nil {
return err
}
log.Info("update status successfully")
}
return nil
}

func (r *MySQLClusterReconciler) clusteringStopV1(ctx context.Context, cluster *mocov1beta2.MySQLCluster) error {
log := crlog.FromContext(ctx)
orig := cluster.DeepCopy()

if meta.IsStatusConditionFalse(cluster.Status.Conditions, mocov1beta2.ConditionClusteringActive) {
return nil
}

r.ClusterManager.Stop(types.NamespacedName{Namespace: cluster.Namespace, Name: cluster.Name})

for _, cond := range cluster.Status.Conditions {
if cond.Type == mocov1beta2.ConditionAvailable || cond.Type == mocov1beta2.ConditionHealthy {
cond.Status = metav1.ConditionUnknown
meta.SetStatusCondition(&orig.Status.Conditions, cond)
}
}

meta.SetStatusCondition(&orig.Status.Conditions,
metav1.Condition{
Type: mocov1beta2.ConditionClusteringActive,
Status: metav1.ConditionFalse,
},
)

if !equality.Semantic.DeepEqual(orig, cluster) {
if err := r.Status().Update(ctx, cluster); err != nil {
return err
}
log.Info("update status successfully")
}

return nil
}

func (r *MySQLClusterReconciler) reconciliationStopV1(ctx context.Context, cluster *mocov1beta2.MySQLCluster) error {

Check failure on line 1975 in controllers/mysqlcluster_controller.go

View workflow job for this annotation

GitHub Actions / Small tests

func (*MySQLClusterReconciler).reconciliationStopV1 is unused (U1000)
log := crlog.FromContext(ctx)
orig := cluster.DeepCopy()

if meta.IsStatusConditionFalse(cluster.Status.Conditions, mocov1beta2.ConditionClusteringActive) {
return nil
}

r.ClusterManager.Stop(types.NamespacedName{Namespace: cluster.Namespace, Name: cluster.Name})

for _, cond := range cluster.Status.Conditions {
if cond.Type == mocov1beta2.ConditionAvailable || cond.Type == mocov1beta2.ConditionHealthy {
cond.Status = metav1.ConditionUnknown
meta.SetStatusCondition(&orig.Status.Conditions, cond)
}
}

meta.SetStatusCondition(&orig.Status.Conditions,
metav1.Condition{
Type: mocov1beta2.ConditionClusteringActive,
Status: metav1.ConditionFalse,
Reason: "ClusteringInactive",
},
)

if !equality.Semantic.DeepEqual(orig, cluster) {
if err := r.Status().Update(ctx, cluster); err != nil {
return err
}
log.Info("update status successfully")
}

return nil
}

Expand Down
6 changes: 4 additions & 2 deletions pkg/constants/meta.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ const (

// annotation keys and values
const (
AnnDemote = "moco.cybozu.com/demote"
AnnSecretVersion = "moco.cybozu.com/secret-version"
AnnDemote = "moco.cybozu.com/demote"
AnnSecretVersion = "moco.cybozu.com/secret-version"
AnnClusteringStopped = "moco.cybozu.com/clustering-stopped"
AnnReconciliationStopped = "moco.cybozu.com/reconciliation-stopped"
)

// MySQLClusterFinalizer is the finalizer specifier for MySQLCluster.
Expand Down

0 comments on commit 8604b9d

Please sign in to comment.