This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shardingsphere-on-cloud.git


The following commit(s) were added to refs/heads/main by this push:
     new 161fb97  feat: add CloudNative PG finalize
     new 857be0e  Merge pull request #406 from mlycore/finalize-cnpg
161fb97 is described below

commit 161fb9771bc9df7eb02d4fad86d3184e34be187b
Author: mlycore <[email protected]>
AuthorDate: Thu Jun 8 16:15:37 2023 +0800

    feat: add CloudNative PG finalize
    
    Signed-off-by: mlycore <[email protected]>
---
 .../pkg/controllers/storage_node_controller.go     | 30 ++++++++++++++++++++++
 .../kubernetes/cloudnative-pg/cloudnative-pg.go    |  1 +
 2 files changed, 31 insertions(+)

diff --git a/shardingsphere-operator/pkg/controllers/storage_node_controller.go 
b/shardingsphere-operator/pkg/controllers/storage_node_controller.go
index 178042c..9713ce0 100644
--- a/shardingsphere-operator/pkg/controllers/storage_node_controller.go
+++ b/shardingsphere-operator/pkg/controllers/storage_node_controller.go
@@ -41,6 +41,7 @@ import (
        "k8s.io/utils/strings/slices"
        ctrl "sigs.k8s.io/controller-runtime"
        "sigs.k8s.io/controller-runtime/pkg/client"
+       "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
 )
 
 const (
@@ -108,10 +109,39 @@ func (r *StorageNodeReconciler) Reconcile(ctx 
context.Context, req ctrl.Request)
        return r.reconcile(ctx, storageProvider, node)
 }
 
+func (r *StorageNodeReconciler) finalizeCloudNativePG(ctx context.Context, 
node *v1alpha1.StorageNode, storageProvider *v1alpha1.StorageProvider) 
(ctrl.Result, error) {
+       namespacedName := types.NamespacedName{
+               Name:      node.Name,
+               Namespace: node.Namespace,
+       }
+
+       cluster, err := r.CNPG.GetClusterByNamespacedName(ctx, namespacedName)
+       if err != nil {
+               return ctrl.Result{Requeue: true}, err
+       }
+
+       if cluster != nil {
+               if err := r.CNPG.Delete(ctx, cluster); err != nil {
+                       return ctrl.Result{Requeue: true}, err
+               }
+       }
+
+       controllerutil.RemoveFinalizer(node, ChaosFinalizerName)
+       if err := r.Update(ctx, node); err != nil {
+               return ctrl.Result{}, err
+       }
+
+       return ctrl.Result{RequeueAfter: defaultRequeueTime}, nil
+}
+
 func (r *StorageNodeReconciler) finalize(ctx context.Context, node 
*v1alpha1.StorageNode, storageProvider *v1alpha1.StorageProvider) (ctrl.Result, 
error) {
        var err error
        var oldStatus = node.Status.DeepCopy()
 
+       if storageProvider.Spec.Provisioner == 
v1alpha1.ProvisionerCloudNativePG {
+               return r.finalizeCloudNativePG(ctx, node, storageProvider)
+       }
+
        switch node.Status.Phase {
        case v1alpha1.StorageNodePhaseReady, v1alpha1.StorageNodePhaseNotReady:
                // set storage node status to deleting
diff --git 
a/shardingsphere-operator/pkg/kubernetes/cloudnative-pg/cloudnative-pg.go 
b/shardingsphere-operator/pkg/kubernetes/cloudnative-pg/cloudnative-pg.go
index 45a9b55..8036526 100644
--- a/shardingsphere-operator/pkg/kubernetes/cloudnative-pg/cloudnative-pg.go
+++ b/shardingsphere-operator/pkg/kubernetes/cloudnative-pg/cloudnative-pg.go
@@ -68,6 +68,7 @@ type Getter interface {
 type Setter interface {
        Create(context.Context, *cnpgv1.Cluster) error
        Update(context.Context, *cnpgv1.Cluster) error
+       Delete(context.Context, *cnpgv1.Cluster) error
 }
 
 type getter struct {

Reply via email to