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

Commit

Permalink
Rebase on top of new seed controller
Browse files Browse the repository at this point in the history
  • Loading branch information
kragniz committed Mar 1, 2018
1 parent 35de6c0 commit 2302e30
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 35 deletions.
9 changes: 5 additions & 4 deletions hack/e2e.sh
Original file line number Diff line number Diff line change
Expand Up @@ -351,10 +351,11 @@ function test_cassandracluster() {
fail_test "Failed to apply cassandracluster"
fi

seed_label=$(kubectl get pods --namespace "${namespace}" \
cass-${CASS_NAME}-ringnodes-1 \
-o jsonpath='{.metadata.labels.seed}')
if [ "$seed_label" != "true" ]; then
if ! stdout_equals "cass-${CASS_NAME}-ringnodes-0 cass-${CASS_NAME}-ringnodes-1" \
kubectl get pods --namespace "${namespace}" \
--selector=navigator.jetstack.io/cassandra-seed=true \
--output 'jsonpath={.items[*].metadata.name}'
then
fail_test "Second cassandra node not marked as seed"
fi
}
Expand Down
9 changes: 3 additions & 6 deletions pkg/apis/navigator/v1alpha1/defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,9 @@ func addDefaultingFuncs(scheme *runtime.Scheme) error {
return RegisterDefaults(scheme)
}

func SetDefaults_CassandraClusterSpec(spec *CassandraClusterSpec) {
func SetDefaults_CassandraClusterNodePool(np *CassandraClusterNodePool) {
// default to 1 seed if not specified
for i := 0; i < len(spec.NodePools); i++ {
np := &spec.NodePools[i]
if np.Seeds == 0 {
np.Seeds = 1
}
if np.Seeds == 0 {
np.Seeds = 1
}
}
5 changes: 4 additions & 1 deletion pkg/apis/navigator/v1alpha1/zz_generated.defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,10 @@ func RegisterDefaults(scheme *runtime.Scheme) error {
}

func SetObjectDefaults_CassandraCluster(in *CassandraCluster) {
SetDefaults_CassandraClusterSpec(&in.Spec)
for i := range in.Spec.NodePools {
a := &in.Spec.NodePools[i]
SetDefaults_CassandraClusterNodePool(a)
}
}

func SetObjectDefaults_CassandraClusterList(in *CassandraClusterList) {
Expand Down
64 changes: 40 additions & 24 deletions pkg/controllers/cassandra/seedlabeller/control.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,36 +44,52 @@ func NewControl(

func (c *defaultSeedLabeller) labelSeedNodes(
cluster *v1alpha1.CassandraCluster,
np *v1alpha1.CassandraClusterNodePool,
set *appsv1beta1.StatefulSet,
) error {
// TODO: make number of seed nodes configurable
pod, err := c.pods.Pods(cluster.Namespace).Get(fmt.Sprintf("%s-%d", set.Name, 0))
if err != nil {
glog.Warningf("Couldn't get stateful set pod: %v", err)
return nil
}
labels := pod.Labels
value := labels[seedprovider.SeedLabelKey]
if value == seedprovider.SeedLabelValue {
return nil
}
if labels == nil {
labels = map[string]string{}
for i := int64(0); i < np.Replicas; i++ {
pod, err := c.pods.Pods(cluster.Namespace).Get(fmt.Sprintf("%s-%d", set.Name, i))
if err != nil {
glog.Warningf("Couldn't get stateful set pod: %v", err)
return nil
}

// default to not a seed
desiredLabel := "false"

// label first n as seeds
if i < np.Seeds {
desiredLabel = seedprovider.SeedLabelValue
}

labels := pod.Labels
value := labels[seedprovider.SeedLabelKey]
if value == desiredLabel {
continue
}
if labels == nil {
labels = map[string]string{}
}
labels[seedprovider.SeedLabelKey] = desiredLabel
podCopy := pod.DeepCopy()
podCopy.SetLabels(labels)
_, err = c.kubeClient.CoreV1().Pods(podCopy.Namespace).Update(podCopy)
if err != nil {
return err
}
}
labels[seedprovider.SeedLabelKey] = seedprovider.SeedLabelValue
podCopy := pod.DeepCopy()
podCopy.SetLabels(labels)
_, err = c.kubeClient.CoreV1().Pods(podCopy.Namespace).Update(podCopy)
return err
return nil
}

func (c *defaultSeedLabeller) Sync(cluster *v1alpha1.CassandraCluster) error {
sets, err := util.StatefulSetsForCluster(cluster, c.statefulSetLister)
if err != nil {
return err
}
for _, s := range sets {
err = c.labelSeedNodes(cluster, s)
for _, np := range cluster.Spec.NodePools {
setName := util.NodePoolResourceName(cluster, &np)

set, err := c.statefulSetLister.StatefulSets(cluster.Namespace).Get(setName)
if err != nil {
return err
}
err = c.labelSeedNodes(cluster, &np, set)
if err != nil {
return err
}
Expand Down

0 comments on commit 2302e30

Please sign in to comment.