Skip to content
This repository was archived by the owner on Apr 4, 2023. It is now read-only.

Commit 2302e30

Browse files
committed
Rebase on top of new seed controller
1 parent 35de6c0 commit 2302e30

File tree

4 files changed

+52
-35
lines changed

4 files changed

+52
-35
lines changed

hack/e2e.sh

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -351,10 +351,11 @@ function test_cassandracluster() {
351351
fail_test "Failed to apply cassandracluster"
352352
fi
353353

354-
seed_label=$(kubectl get pods --namespace "${namespace}" \
355-
cass-${CASS_NAME}-ringnodes-1 \
356-
-o jsonpath='{.metadata.labels.seed}')
357-
if [ "$seed_label" != "true" ]; then
354+
if ! stdout_equals "cass-${CASS_NAME}-ringnodes-0 cass-${CASS_NAME}-ringnodes-1" \
355+
kubectl get pods --namespace "${namespace}" \
356+
--selector=navigator.jetstack.io/cassandra-seed=true \
357+
--output 'jsonpath={.items[*].metadata.name}'
358+
then
358359
fail_test "Second cassandra node not marked as seed"
359360
fi
360361
}

pkg/apis/navigator/v1alpha1/defaults.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,9 @@ func addDefaultingFuncs(scheme *runtime.Scheme) error {
88
return RegisterDefaults(scheme)
99
}
1010

11-
func SetDefaults_CassandraClusterSpec(spec *CassandraClusterSpec) {
11+
func SetDefaults_CassandraClusterNodePool(np *CassandraClusterNodePool) {
1212
// default to 1 seed if not specified
13-
for i := 0; i < len(spec.NodePools); i++ {
14-
np := &spec.NodePools[i]
15-
if np.Seeds == 0 {
16-
np.Seeds = 1
17-
}
13+
if np.Seeds == 0 {
14+
np.Seeds = 1
1815
}
1916
}

pkg/apis/navigator/v1alpha1/zz_generated.defaults.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@ func RegisterDefaults(scheme *runtime.Scheme) error {
3434
}
3535

3636
func SetObjectDefaults_CassandraCluster(in *CassandraCluster) {
37-
SetDefaults_CassandraClusterSpec(&in.Spec)
37+
for i := range in.Spec.NodePools {
38+
a := &in.Spec.NodePools[i]
39+
SetDefaults_CassandraClusterNodePool(a)
40+
}
3841
}
3942

4043
func SetObjectDefaults_CassandraClusterList(in *CassandraClusterList) {

pkg/controllers/cassandra/seedlabeller/control.go

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -44,36 +44,52 @@ func NewControl(
4444

4545
func (c *defaultSeedLabeller) labelSeedNodes(
4646
cluster *v1alpha1.CassandraCluster,
47+
np *v1alpha1.CassandraClusterNodePool,
4748
set *appsv1beta1.StatefulSet,
4849
) error {
49-
// TODO: make number of seed nodes configurable
50-
pod, err := c.pods.Pods(cluster.Namespace).Get(fmt.Sprintf("%s-%d", set.Name, 0))
51-
if err != nil {
52-
glog.Warningf("Couldn't get stateful set pod: %v", err)
53-
return nil
54-
}
55-
labels := pod.Labels
56-
value := labels[seedprovider.SeedLabelKey]
57-
if value == seedprovider.SeedLabelValue {
58-
return nil
59-
}
60-
if labels == nil {
61-
labels = map[string]string{}
50+
for i := int64(0); i < np.Replicas; i++ {
51+
pod, err := c.pods.Pods(cluster.Namespace).Get(fmt.Sprintf("%s-%d", set.Name, i))
52+
if err != nil {
53+
glog.Warningf("Couldn't get stateful set pod: %v", err)
54+
return nil
55+
}
56+
57+
// default to not a seed
58+
desiredLabel := "false"
59+
60+
// label first n as seeds
61+
if i < np.Seeds {
62+
desiredLabel = seedprovider.SeedLabelValue
63+
}
64+
65+
labels := pod.Labels
66+
value := labels[seedprovider.SeedLabelKey]
67+
if value == desiredLabel {
68+
continue
69+
}
70+
if labels == nil {
71+
labels = map[string]string{}
72+
}
73+
labels[seedprovider.SeedLabelKey] = desiredLabel
74+
podCopy := pod.DeepCopy()
75+
podCopy.SetLabels(labels)
76+
_, err = c.kubeClient.CoreV1().Pods(podCopy.Namespace).Update(podCopy)
77+
if err != nil {
78+
return err
79+
}
6280
}
63-
labels[seedprovider.SeedLabelKey] = seedprovider.SeedLabelValue
64-
podCopy := pod.DeepCopy()
65-
podCopy.SetLabels(labels)
66-
_, err = c.kubeClient.CoreV1().Pods(podCopy.Namespace).Update(podCopy)
67-
return err
81+
return nil
6882
}
6983

7084
func (c *defaultSeedLabeller) Sync(cluster *v1alpha1.CassandraCluster) error {
71-
sets, err := util.StatefulSetsForCluster(cluster, c.statefulSetLister)
72-
if err != nil {
73-
return err
74-
}
75-
for _, s := range sets {
76-
err = c.labelSeedNodes(cluster, s)
85+
for _, np := range cluster.Spec.NodePools {
86+
setName := util.NodePoolResourceName(cluster, &np)
87+
88+
set, err := c.statefulSetLister.StatefulSets(cluster.Namespace).Get(setName)
89+
if err != nil {
90+
return err
91+
}
92+
err = c.labelSeedNodes(cluster, &np, set)
7793
if err != nil {
7894
return err
7995
}

0 commit comments

Comments
 (0)