Skip to content

Commit c9583f4

Browse files
committed
Merge branch 'pravega-master' into zk-backup-controller
2 parents a53eebc + a62cbf1 commit c9583f4

13 files changed

+5932
-3408
lines changed

.github/workflows/ci.yaml

+3-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ jobs:
2929
sudo go version
3030
- name: Check out code into the Go module directory
3131
uses: actions/checkout@v2
32+
- name: get go version
33+
run: go version
3234
- name: Gofmt and License checks
3335
run: make check
3436
- name: unit tests
@@ -37,7 +39,7 @@ jobs:
3739
uses: codecov/[email protected]
3840
- name: Set env
3941
run: |
40-
echo "KUBERNETES_VERSION=v1.20.13" >> $GITHUB_ENV
42+
echo "KUBERNETES_VERSION=v1.23.1" >> $GITHUB_ENV
4143
echo "OPERATOR_SDK_VERSION=v0.19.4" >> $GITHUB_ENV
4244
echo "MINIKUBE_VERSION=v1.24.0" >> $GITHUB_ENV
4345
echo "KUBERNETES_CONFIG_FILE=$HOME/.kube/config" >> $GITHUB_ENV

api/v1beta1/doc.go

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
* Copyright (c) 2018 Dell Inc., or its subsidiaries. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*/
10+
11+
// Package v1beta1 contains API Schema definitions for the zookeeper v1beta1 API
12+
// group
13+
// +k8s:deepcopy-gen=package,register
14+
// +groupName=zookeeper.pravega.io
15+
package v1beta1

config/crd/bases/zookeeper.pravega.io_zookeeperclusters.yaml

+5,552-3,138
Large diffs are not rendered by default.

config/crd/kustomization.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# It should be run by config/default
44
resources:
55
- bases/zookeeper.pravega.io_zookeeperclusters.yaml
6-
- bases/zookeeper.pravega.io.zookeeper.pravega.io_zookeeperbackups.yaml
6+
- bases/zookeeper.pravega.io_zookeeperbackups.yaml
77
# +kubebuilder:scaffold:crdkustomizeresource
88

99
patchesStrategicMerge:

controllers/zookeeperbackup_controller.go

+34-35
Original file line numberDiff line numberDiff line change
@@ -37,27 +37,26 @@ import (
3737
"github.com/mitchellh/hashstructure/v2"
3838
)
3939

40-
4140
var logBk = logf.Log.WithName("controller_zookeeperbackup")
4241

4342
// ZookeeperBackupReconciler reconciles a ZookeeperBackup object
4443
type ZookeeperBackupReconciler struct {
45-
client client.Client
46-
scheme *runtime.Scheme
47-
log logr.Logger
44+
Client client.Client
45+
Scheme *runtime.Scheme
46+
Log logr.Logger
4847
}
4948

5049
//+kubebuilder:rbac:groups=zookeeper.pravega.io.zookeeper.pravega.io,resources=zookeeperbackups,verbs=get;list;watch;create;update;patch;delete
5150
//+kubebuilder:rbac:groups=zookeeper.pravega.io.zookeeper.pravega.io,resources=zookeeperbackups/status,verbs=get;update;patch
5251
//+kubebuilder:rbac:groups=zookeeper.pravega.io.zookeeper.pravega.io,resources=zookeeperbackups/finalizers,verbs=update
5352

54-
func (r *ZookeeperBackupReconciler) Reconcile(request reconcile.Request) (reconcile.Result, error) {
55-
r.log = logBk.WithValues("Request.Namespace", request.Namespace, "Request.Name", request.Name)
56-
r.log.Info("Reconciling ZookeeperBackup")
53+
func (r *ZookeeperBackupReconciler) Reconcile(_ context.Context, request reconcile.Request) (reconcile.Result, error) {
54+
r.Log = logBk.WithValues("Request.Namespace", request.Namespace, "Request.Name", request.Name)
55+
r.Log.Info("Reconciling ZookeeperBackup")
5756

5857
// Fetch the ZookeeperBackup instance
5958
zookeeperBackup := &zookeeperv1beta1.ZookeeperBackup{}
60-
err := r.client.Get(context.TODO(), request.NamespacedName, zookeeperBackup)
59+
err := r.Client.Get(context.TODO(), request.NamespacedName, zookeeperBackup)
6160
if err != nil {
6261
if errors.IsNotFound(err) {
6362
// Request object not found, could have been deleted after reconcile request.
@@ -74,16 +73,16 @@ func (r *ZookeeperBackupReconciler) Reconcile(request reconcile.Request) (reconc
7473
pvc := newPVCForZookeeperBackup(zookeeperBackup)
7574

7675
// Set ZookeeperBackup instance as the owner and controller
77-
if err := controllerutil.SetControllerReference(zookeeperBackup, pvc, r.scheme); err != nil {
76+
if err := controllerutil.SetControllerReference(zookeeperBackup, pvc, r.Scheme); err != nil {
7877
return reconcile.Result{}, err
7978
}
8079

8180
// Check if PVC already created
8281
foundPVC := &corev1.PersistentVolumeClaim{}
83-
err = r.client.Get(context.TODO(), types.NamespacedName{Name: pvc.Name, Namespace: pvc.Namespace}, foundPVC)
82+
err = r.Client.Get(context.TODO(), types.NamespacedName{Name: pvc.Name, Namespace: pvc.Namespace}, foundPVC)
8483
if err != nil && errors.IsNotFound(err) {
85-
r.log.Info("Creating a new PersistenVolumeClaim")
86-
err = r.client.Create(context.TODO(), pvc)
84+
r.Log.Info("Creating a new PersistenVolumeClaim")
85+
err = r.Client.Create(context.TODO(), pvc)
8786
if err != nil {
8887
return reconcile.Result{}, err
8988
}
@@ -95,20 +94,20 @@ func (r *ZookeeperBackupReconciler) Reconcile(request reconcile.Request) (reconc
9594
cronJob := newCronJobForCR(zookeeperBackup)
9695

9796
// Set ZookeeperBackup instance as the owner and controller
98-
if err := controllerutil.SetControllerReference(zookeeperBackup, cronJob, r.scheme); err != nil {
97+
if err := controllerutil.SetControllerReference(zookeeperBackup, cronJob, r.Scheme); err != nil {
9998
return reconcile.Result{}, err
10099
}
101100

102101
// Check if zookeeper cluster exists
103102
foundZookeeperCluster := &zookeeperv1beta1.ZookeeperCluster{}
104103
zkCluster := zookeeperBackup.Spec.ZookeeperCluster
105-
err = r.client.Get(context.TODO(), types.NamespacedName{Name: zkCluster, Namespace: zookeeperBackup.Namespace}, foundZookeeperCluster)
104+
err = r.Client.Get(context.TODO(), types.NamespacedName{Name: zkCluster, Namespace: zookeeperBackup.Namespace}, foundZookeeperCluster)
106105
if err != nil && errors.IsNotFound(err) {
107-
r.log.Error(err, fmt.Sprintf("Zookeeper cluster '%s' not found", zkCluster))
106+
r.Log.Error(err, fmt.Sprintf("Zookeeper cluster '%s' not found", zkCluster))
108107
return reconcile.Result{}, err
109108
}
110109
if foundZookeeperCluster.Status.Replicas != foundZookeeperCluster.Status.ReadyReplicas {
111-
r.log.Info(fmt.Sprintf("Not all cluster replicas are ready: %d/%d. Suspend CronJob",
110+
r.Log.Info(fmt.Sprintf("Not all cluster replicas are ready: %d/%d. Suspend CronJob",
112111
foundZookeeperCluster.Status.ReadyReplicas, foundZookeeperCluster.Status.Replicas))
113112
*cronJob.Spec.Suspend = true
114113
} else {
@@ -120,7 +119,7 @@ func (r *ZookeeperBackupReconciler) Reconcile(request reconcile.Request) (reconc
120119
if err != nil && errors.IsNotFound(err) {
121120
return reconcile.Result{}, err
122121
}
123-
r.log.Info(fmt.Sprintf("Leader IP (hostname): %s", leaderIp))
122+
r.Log.Info(fmt.Sprintf("Leader IP (hostname): %s", leaderIp))
124123
leaderHostname := strings.Split(leaderIp, ".")[0]
125124

126125
// Landing backup pod on the same node with leader
@@ -129,11 +128,11 @@ func (r *ZookeeperBackupReconciler) Reconcile(request reconcile.Request) (reconc
129128
client.InNamespace(request.NamespacedName.Namespace),
130129
client.MatchingLabels{"app": zkCluster},
131130
}
132-
err = r.client.List(context.TODO(), podList, opts...)
131+
err = r.Client.List(context.TODO(), podList, opts...)
133132
if err != nil {
134133
if errors.IsNotFound(err) {
135134
msg := fmt.Sprintf("Pods cannot be found by label app:%s", zookeeperBackup.Name)
136-
r.log.Error(err, msg)
135+
r.Log.Error(err, msg)
137136
}
138137
return reconcile.Result{}, err
139138
}
@@ -142,7 +141,7 @@ func (r *ZookeeperBackupReconciler) Reconcile(request reconcile.Request) (reconc
142141
for _, pod := range podList.Items {
143142
if pod.Spec.Hostname == leaderHostname {
144143
leaderFound = true
145-
r.log.Info(fmt.Sprintf("Leader was found. Pod: %s (node: %s)", pod.Name, pod.Spec.NodeName))
144+
r.Log.Info(fmt.Sprintf("Leader was found. Pod: %s (node: %s)", pod.Name, pod.Spec.NodeName))
146145
// Set appropriate NodeSelector and PVC ClaimName
147146
cronJob.Spec.JobTemplate.Spec.Template.Spec.NodeSelector =
148147
map[string]string{"kubernetes.io/hostname": pod.Spec.NodeName}
@@ -152,7 +151,7 @@ func (r *ZookeeperBackupReconciler) Reconcile(request reconcile.Request) (reconc
152151
}
153152
}
154153
if !leaderFound {
155-
r.log.Info("Pod with leader role wasn't found. Suspend CronJob")
154+
r.Log.Info("Pod with leader role wasn't found. Suspend CronJob")
156155
*cronJob.Spec.Suspend = true
157156
}
158157

@@ -169,50 +168,50 @@ func (r *ZookeeperBackupReconciler) Reconcile(request reconcile.Request) (reconc
169168

170169
// Check if this CronJob already exists
171170
foundCJ := &batchv1beta1.CronJob{}
172-
err = r.client.Get(context.TODO(), types.NamespacedName{Name: cronJob.Name, Namespace: cronJob.Namespace}, foundCJ)
171+
err = r.Client.Get(context.TODO(), types.NamespacedName{Name: cronJob.Name, Namespace: cronJob.Namespace}, foundCJ)
173172
if err != nil && errors.IsNotFound(err) {
174-
r.log.Info("Creating a new CronJob", "CronJob.Namespace", cronJob.Namespace, "CronJob.Name", cronJob.Name)
173+
r.Log.Info("Creating a new CronJob", "CronJob.Namespace", cronJob.Namespace, "CronJob.Name", cronJob.Name)
175174
cronJob.Annotations["last-applied-hash"] = hashStr
176-
err = r.client.Create(context.TODO(), cronJob)
175+
err = r.Client.Create(context.TODO(), cronJob)
177176
if err != nil {
178177
return reconcile.Result{}, err
179178
}
180179

181180
// CronJob created successfully
182-
r.log.Info("CronJob created successfully.", "RequeueAfter", ReconcileTime)
181+
r.Log.Info("CronJob created successfully.", "RequeueAfter", ReconcileTime)
183182
return reconcile.Result{RequeueAfter: ReconcileTime}, nil
184183
} else if err != nil {
185184
return reconcile.Result{}, err
186185
}
187186

188187
if foundCJ.Annotations["last-applied-hash"] == hashStr {
189-
r.log.Info("CronJob already exists and looks updated", "CronJob.Namespace", foundCJ.Namespace, "CronJob.Name", foundCJ.Name)
188+
r.Log.Info("CronJob already exists and looks updated", "CronJob.Namespace", foundCJ.Namespace, "CronJob.Name", foundCJ.Name)
190189
} else {
191190
cronJob.Annotations["last-applied-hash"] = hashStr
192-
r.log.Info("Update CronJob", "Namespace", cronJob.Namespace, "Name", cronJob.Name)
191+
r.Log.Info("Update CronJob", "Namespace", cronJob.Namespace, "Name", cronJob.Name)
193192
//cronJob.ObjectMeta.ResourceVersion = foundCJ.ObjectMeta.ResourceVersion
194-
err = r.client.Update(context.TODO(), cronJob)
193+
err = r.Client.Update(context.TODO(), cronJob)
195194
if err != nil {
196-
r.log.Error(err, "CronJob cannot be updated")
195+
r.Log.Error(err, "CronJob cannot be updated")
197196
return reconcile.Result{}, err
198197
}
199198
}
200199

201200
// Requeue
202-
r.log.Info(fmt.Sprintf("Rerun reconclie after %s sec.", ReconcileTime))
201+
r.Log.Info(fmt.Sprintf("Rerun reconclie after %s sec.", ReconcileTime))
203202
return reconcile.Result{RequeueAfter: ReconcileTime}, nil
204203
}
205204

206205
func (r *ZookeeperBackupReconciler) GetLeaderIP(zkCluster *zookeeperv1beta1.ZookeeperCluster) (string, error) {
207206
// Get zookeeper leader via zookeeper admin server
208207
svcAdminName := zkCluster.GetAdminServerServiceName()
209208
foundSvcAdmin := &corev1.Service{}
210-
err := r.client.Get(context.TODO(), types.NamespacedName{
209+
err := r.Client.Get(context.TODO(), types.NamespacedName{
211210
Name: svcAdminName,
212211
Namespace: zkCluster.Namespace,
213212
}, foundSvcAdmin)
214213
if err != nil && errors.IsNotFound(err) {
215-
r.log.Error(err, fmt.Sprintf("Zookeeper admin service '%s' not found", svcAdminName))
214+
r.Log.Error(err, fmt.Sprintf("Zookeeper admin service '%s' not found", svcAdminName))
216215
return "", err
217216
}
218217

@@ -221,19 +220,19 @@ func (r *ZookeeperBackupReconciler) GetLeaderIP(zkCluster *zookeeperv1beta1.Zook
221220

222221
resp, err := http.Get(fmt.Sprintf("http://%s:%d/commands/leader", adminIp, svcPort.Port))
223222
if err != nil {
224-
r.log.Error(err, "Admin service error response")
223+
r.Log.Error(err, "Admin service error response")
225224
return "", err
226225
}
227226
defer resp.Body.Close()
228227
body, err := io.ReadAll(resp.Body)
229228
if err != nil {
230-
r.log.Error(err, "Can't read response body")
229+
r.Log.Error(err, "Can't read response body")
231230
return "", err
232231
}
233232
var result map[string]interface{}
234233
err = json.Unmarshal(body, &result)
235234
if err != nil {
236-
r.log.Error(err, "Can't unmarshal json")
235+
r.Log.Error(err, "Can't unmarshal json")
237236
return "", err
238237
}
239238
leaderIp := result["leader_ip"].(string)

controllers/zookeepercluster_controller.go

+12-11
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,16 @@ package controllers
1212
import (
1313
"context"
1414
"fmt"
15+
"strconv"
16+
"time"
17+
1518
"github.com/pravega/zookeeper-operator/pkg/controller/config"
1619
"github.com/pravega/zookeeper-operator/pkg/utils"
1720
"github.com/pravega/zookeeper-operator/pkg/yamlexporter"
1821
"github.com/pravega/zookeeper-operator/pkg/zk"
1922
"k8s.io/client-go/kubernetes/scheme"
2023
"sigs.k8s.io/controller-runtime/pkg/client/fake"
2124
"sigs.k8s.io/controller-runtime/pkg/predicate"
22-
"strconv"
23-
"time"
2425

2526
"github.com/go-logr/logr"
2627
zookeeperv1beta1 "github.com/pravega/zookeeper-operator/api/v1beta1"
@@ -59,7 +60,7 @@ type reconcileFun func(cluster *zookeeperv1beta1.ZookeeperCluster) error
5960
// +kubebuilder:rbac:groups=zookeeper.pravega.io.zookeeper.pravega.io,resources=zookeeperclusters,verbs=get;list;watch;create;update;patch;delete
6061
// +kubebuilder:rbac:groups=zookeeper.pravega.io.zookeeper.pravega.io,resources=zookeeperclusters/status,verbs=get;update;patch
6162

62-
func (r *ZookeeperClusterReconciler) Reconcile(request ctrl.Request) (ctrl.Result, error) {
63+
func (r *ZookeeperClusterReconciler) Reconcile(_ context.Context, request ctrl.Request) (ctrl.Result, error) {
6364
r.Log = log.WithValues(
6465
"Request.Namespace", request.Namespace,
6566
"Request.Name", request.Name)
@@ -262,7 +263,7 @@ func (r *ZookeeperClusterReconciler) updateStatefulSet(instance *zookeeperv1beta
262263

263264
func (r *ZookeeperClusterReconciler) upgradeStatefulSet(instance *zookeeperv1beta1.ZookeeperCluster, foundSts *appsv1.StatefulSet) (err error) {
264265

265-
//Getting the upgradeCondition from the zk clustercondition
266+
// Getting the upgradeCondition from the zk clustercondition
266267
_, upgradeCondition := instance.Status.GetClusterCondition(zookeeperv1beta1.ClusterConditionUpgrading)
267268

268269
if upgradeCondition == nil {
@@ -271,8 +272,8 @@ func (r *ZookeeperClusterReconciler) upgradeStatefulSet(instance *zookeeperv1bet
271272
return nil
272273
}
273274

274-
//Setting the upgrade condition to true to trigger the upgrade
275-
//When the zk cluster is upgrading Statefulset CurrentRevision and UpdateRevision are not equal and zk cluster image tag is not equal to CurrentVersion
275+
// Setting the upgrade condition to true to trigger the upgrade
276+
// When the zk cluster is upgrading Statefulset CurrentRevision and UpdateRevision are not equal and zk cluster image tag is not equal to CurrentVersion
276277
if upgradeCondition.Status == corev1.ConditionFalse {
277278
if instance.Status.IsClusterInReadyState() && foundSts.Status.CurrentRevision != foundSts.Status.UpdateRevision && instance.Spec.Image.Tag != instance.Status.CurrentVersion {
278279
instance.Status.TargetVersion = instance.Spec.Image.Tag
@@ -281,20 +282,20 @@ func (r *ZookeeperClusterReconciler) upgradeStatefulSet(instance *zookeeperv1bet
281282
}
282283
}
283284

284-
//checking if the upgrade is in progress
285+
// checking if the upgrade is in progress
285286
if upgradeCondition.Status == corev1.ConditionTrue {
286-
//checking when the targetversion is empty
287+
// checking when the targetversion is empty
287288
if instance.Status.TargetVersion == "" {
288289
r.Log.Info("upgrading to an unknown version: cancelling upgrade process")
289290
return r.clearUpgradeStatus(instance)
290291
}
291-
//Checking for upgrade completion
292+
// Checking for upgrade completion
292293
if foundSts.Status.CurrentRevision == foundSts.Status.UpdateRevision {
293294
instance.Status.CurrentVersion = instance.Status.TargetVersion
294295
r.Log.Info("upgrade completed")
295296
return r.clearUpgradeStatus(instance)
296297
}
297-
//updating the upgradecondition if upgrade is in progress
298+
// updating the upgradecondition if upgrade is in progress
298299
if foundSts.Status.CurrentRevision != foundSts.Status.UpdateRevision {
299300
r.Log.Info("upgrade in progress")
300301
if fmt.Sprint(foundSts.Status.UpdatedReplicas) != upgradeCondition.Message {
@@ -555,7 +556,7 @@ func (r *ZookeeperClusterReconciler) reconcileClusterStatus(instance *zookeeperv
555556
instance.Status.Members.Ready = readyMembers
556557
instance.Status.Members.Unready = unreadyMembers
557558

558-
//If Cluster is in a ready state...
559+
// If Cluster is in a ready state...
559560
if instance.Spec.Replicas == instance.Status.ReadyReplicas && (!instance.Status.MetaRootCreated) {
560561
r.Log.Info("Cluster is Ready, Creating ZK Metadata...")
561562
zkUri := utils.GetZkServiceUri(instance)

0 commit comments

Comments
 (0)