Skip to content

Commit d87a32d

Browse files
committed
Use instance instead of index for StatefulSets.
Use the Kubernetes recommanded label "app.kubernetes.io/instance" to store the StatefulSet instance. Replace the int32 index variable by the name of the StatefulSet instance defined in `nodeSets`.
1 parent 9356602 commit d87a32d

38 files changed

+502
-555
lines changed

api/v1/kubegres_types.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ type KubegresSpec struct {
9393
// ----------------------- STATUS -----------------------------------------
9494

9595
type KubegresStatefulSetOperation struct {
96-
InstanceIndex int32 `json:"instanceIndex,omitempty"`
97-
Name string `json:"name,omitempty"`
96+
Instance string `json:"instance,omitempty"`
97+
Name string `json:"name,omitempty"`
9898
}
9999

100100
type KubegresStatefulSetSpecUpdateOperation struct {
@@ -113,7 +113,7 @@ type KubegresBlockingOperation struct {
113113
}
114114

115115
type KubegresStatus struct {
116-
LastCreatedInstanceIndex int32 `json:"lastCreatedInstanceIndex,omitempty"`
116+
LastCreatedInstance string `json:"lastCreatedInstance,omitempty"`
117117
BlockingOperation KubegresBlockingOperation `json:"blockingOperation,omitempty"`
118118
PreviousBlockingOperation KubegresBlockingOperation `json:"previousBlockingOperation,omitempty"`
119119
EnforcedReplicas int32 `json:"enforcedReplicas,omitempty"`

config/crd/bases/kubegres.reactive-tech.io_kubegres.yaml

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3620,9 +3620,8 @@ spec:
36203620
statefulSetOperation:
36213621
description: Custom operation fields
36223622
properties:
3623-
instanceIndex:
3624-
format: int32
3625-
type: integer
3623+
instance:
3624+
type: string
36263625
name:
36273626
type: string
36283627
type: object
@@ -3640,9 +3639,8 @@ spec:
36403639
enforcedReplicas:
36413640
format: int32
36423641
type: integer
3643-
lastCreatedInstanceIndex:
3644-
format: int32
3645-
type: integer
3642+
lastCreatedInstance:
3643+
type: string
36463644
previousBlockingOperation:
36473645
properties:
36483646
hasTimedOut:
@@ -3652,9 +3650,8 @@ spec:
36523650
statefulSetOperation:
36533651
description: Custom operation fields
36543652
properties:
3655-
instanceIndex:
3656-
format: int32
3657-
type: integer
3653+
instance:
3654+
type: string
36583655
name:
36593656
type: string
36603657
type: object

controllers/ctx/KubegresContext.go

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ const (
5454
EnvVarNamePgData = "PGDATA"
5555
EnvVarNameOfPostgresSuperUserPsw = "POSTGRES_PASSWORD"
5656
EnvVarNameOfPostgresReplicationUserPsw = "POSTGRES_REPLICATION_PASSWORD"
57+
NameLabelKey = "app.kubernetes.io/name"
58+
InstanceLabelKey = "app.kubernetes.io/instance"
59+
ReplicationRoleLabelKey = "app.kubegres.io/replication-role"
5760
)
5861

5962
func (r *KubegresContext) GetServiceResourceName(isPrimary bool) string {
@@ -63,13 +66,8 @@ func (r *KubegresContext) GetServiceResourceName(isPrimary bool) string {
6366
return r.Kubegres.Name + "-replica"
6467
}
6568

66-
func (r *KubegresContext) GetStatefulSetResourceName(instanceIndex int32) string {
67-
if r.HasNodeSets() && len(r.Kubegres.Spec.NodeSets) >= int(instanceIndex) {
68-
nodeSetSpec := r.Kubegres.Spec.NodeSets[instanceIndex-1]
69-
return r.Kubegres.Name + "-" + nodeSetSpec.Name
70-
} else {
71-
return r.Kubegres.Name + "-" + strconv.Itoa(int(instanceIndex))
72-
}
69+
func (r *KubegresContext) GetStatefulSetResourceName(instance string) string {
70+
return r.Kubegres.Name + "-" + instance
7371
}
7472

7573
func (r *KubegresContext) IsReservedVolumeName(volumeName string) bool {
@@ -79,24 +77,37 @@ func (r *KubegresContext) IsReservedVolumeName(volumeName string) bool {
7977
strings.Contains(volumeName, "kube-api")
8078
}
8179

82-
func (r *KubegresContext) HasNodeSets() bool {
83-
return r.Kubegres.Spec.NodeSets != nil
80+
func (r *KubegresContext) ReplicasCount() int32 {
81+
if r.Kubegres.Spec.NodeSets == nil {
82+
return *r.Kubegres.Spec.Replicas
83+
}
84+
return int32(len(r.Kubegres.Spec.NodeSets))
8485
}
8586

86-
func (r *KubegresContext) Replicas() *int32 {
87-
if r.HasNodeSets() {
88-
replicas := int32(len(r.Kubegres.Spec.NodeSets))
89-
return &replicas
87+
func (r *KubegresContext) GetNodeSetsFromSpec() []v1.KubegresNodeSet {
88+
if r.Kubegres.Spec.NodeSets == nil {
89+
nodeSets := make([]v1.KubegresNodeSet, *r.Kubegres.Spec.Replicas)
90+
for i := int32(0); i < *r.Kubegres.Spec.Replicas; i += 1 {
91+
nodeSets[i] = v1.KubegresNodeSet{
92+
Name: strconv.Itoa(int(i)),
93+
}
94+
}
95+
return nodeSets
9096
}
91-
return r.Kubegres.Spec.Replicas
97+
return r.Kubegres.Spec.NodeSets
9298
}
9399

94-
func (r *KubegresContext) GetInstanceIndexFromSpec(statefulSet apps.StatefulSet) (int32, error) {
95-
instanceIndexStr := statefulSet.Spec.Template.Labels["index"]
96-
instanceIndex, err := strconv.ParseInt(instanceIndexStr, 10, 32)
97-
if err != nil {
98-
r.Log.ErrorEvent("StatefulSetLoadingErr", err, "Unable to convert StatefulSet's label 'index' with value: "+instanceIndexStr+" into an integer. The name of statefulSet with this label is "+statefulSet.Name+".")
99-
return 0, err
100+
func (r *KubegresContext) GetInstanceFromStatefulSet(statefulSet apps.StatefulSet) string {
101+
return statefulSet.Labels[InstanceLabelKey]
102+
}
103+
104+
func (r *KubegresContext) GetNodeSetSpecFromInstance(instance string) *v1.KubegresNodeSet {
105+
for _, nodeSet := range r.Kubegres.Spec.NodeSets {
106+
if nodeSet.Name == instance {
107+
return &nodeSet
108+
}
109+
}
110+
return &v1.KubegresNodeSet{
111+
Name: instance,
100112
}
101-
return int32(instanceIndex), nil
102113
}

controllers/ctx/resources/ResourcesContext.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ package resources
2222

2323
import (
2424
"context"
25-
2625
"github.com/go-logr/logr"
2726
"k8s.io/client-go/tools/record"
2827
postgresV1 "reactive-tech.io/kubegres/api/v1"
@@ -75,13 +74,12 @@ func CreateResourcesContext(kubegres *postgresV1.Kubegres,
7574
client client.Client,
7675
recorder record.EventRecorder) (rc *ResourcesContext, err error) {
7776

78-
setReplicaFieldToZeroIfNil(kubegres)
77+
setReplicasFieldToZeroIfNil(kubegres)
7978

8079
rc = &ResourcesContext{}
8180

8281
rc.LogWrapper = log.LogWrapper{Kubegres: kubegres, Logger: logger, Recorder: recorder}
8382
rc.LogWrapper.Info("KUBEGRES", "name", kubegres.Name, "Status", kubegres.Status)
84-
//rc.LogWrapper.WithName(kubegres.Name)
8583

8684
rc.KubegresStatusWrapper = &status.KubegresStatusWrapper{
8785
Kubegres: kubegres,
@@ -127,7 +125,7 @@ func CreateResourcesContext(kubegres *postgresV1.Kubegres,
127125
return rc, nil
128126
}
129127

130-
func setReplicaFieldToZeroIfNil(kubegres *postgresV1.Kubegres) {
128+
func setReplicasFieldToZeroIfNil(kubegres *postgresV1.Kubegres) {
131129
if kubegres.Spec.Replicas != nil {
132130
return
133131
}

controllers/ctx/status/KubegresStatusWrapper.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ type KubegresStatusWrapper struct {
1515
statusFieldsToUpdate map[string]interface{}
1616
}
1717

18-
func (r *KubegresStatusWrapper) GetLastCreatedInstanceIndex() int32 {
19-
return r.Kubegres.Status.LastCreatedInstanceIndex
18+
func (r *KubegresStatusWrapper) GetLastCreatedInstance() string {
19+
return r.Kubegres.Status.LastCreatedInstance
2020
}
2121

22-
func (r *KubegresStatusWrapper) SetLastCreatedInstanceIndex(value int32) {
23-
r.addStatusFieldToUpdate("LastCreatedInstanceIndex", value)
24-
r.Kubegres.Status.LastCreatedInstanceIndex = value
22+
func (r *KubegresStatusWrapper) SetLastCreatedInstance(instance string) {
23+
r.addStatusFieldToUpdate("LastCreatedInstance", instance)
24+
r.Kubegres.Status.LastCreatedInstance = instance
2525
}
2626

2727
func (r *KubegresStatusWrapper) GetBlockingOperation() v1.KubegresBlockingOperation {

controllers/operation/BlockingOperation.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,17 +87,17 @@ func (r *BlockingOperation) ActivateOperation(operationId string, stepId string)
8787
return r.activateOperation(r.createOperationObj(operationId, stepId))
8888
}
8989

90-
func (r *BlockingOperation) ActivateOperationOnStatefulSet(operationId string, stepId string, statefulSetInstanceIndex int32) error {
90+
func (r *BlockingOperation) ActivateOperationOnStatefulSet(operationId string, stepId string, instance string) error {
9191
blockingOperation := r.createOperationObj(operationId, stepId)
92-
blockingOperation.StatefulSetOperation = r.createStatefulSetOperationObj(statefulSetInstanceIndex)
92+
blockingOperation.StatefulSetOperation = r.createStatefulSetOperationObj(instance)
9393
return r.activateOperation(blockingOperation)
9494
}
9595

9696
func (r *BlockingOperation) ActivateOperationOnStatefulSetSpecUpdate(operationId string, stepId string,
97-
statefulSetInstanceIndex int32, specDifferences string) error {
97+
instance string, specDifferences string) error {
9898

9999
blockingOperation := r.createOperationObj(operationId, stepId)
100-
blockingOperation.StatefulSetOperation = r.createStatefulSetOperationObj(statefulSetInstanceIndex)
100+
blockingOperation.StatefulSetOperation = r.createStatefulSetOperationObj(instance)
101101
blockingOperation.StatefulSetSpecUpdateOperation = r.createStatefulSetSpecUpdateOperationObj(specDifferences)
102102

103103
return r.activateOperation(blockingOperation)
@@ -154,10 +154,10 @@ func (r *BlockingOperation) createOperationObj(operationId string, stepId string
154154
return v1.KubegresBlockingOperation{OperationId: operationId, StepId: stepId}
155155
}
156156

157-
func (r *BlockingOperation) createStatefulSetOperationObj(statefulSetInstanceIndex int32) v1.KubegresStatefulSetOperation {
157+
func (r *BlockingOperation) createStatefulSetOperationObj(instance string) v1.KubegresStatefulSetOperation {
158158
return v1.KubegresStatefulSetOperation{
159-
InstanceIndex: statefulSetInstanceIndex,
160-
Name: r.kubegresContext.GetStatefulSetResourceName(statefulSetInstanceIndex),
159+
Instance: instance,
160+
Name: r.kubegresContext.GetStatefulSetResourceName(instance),
161161
}
162162
}
163163

controllers/operation/log/BlockingOperationLogger.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ func (r *BlockingOperationLogger) Log() {
2121
}
2222

2323
func (r *BlockingOperationLogger) logActiveOperation() {
24-
2524
activeOperation := r.blockingOperation.GetActiveOperation()
2625
activeOperationId := activeOperation.OperationId
2726
nbreSecondsLeftBeforeTimeOut := r.blockingOperation.GetNbreSecondsLeftBeforeTimeOut()
@@ -37,7 +36,6 @@ func (r *BlockingOperationLogger) logActiveOperation() {
3736
}
3837

3938
func (r *BlockingOperationLogger) logPreviouslyActiveOperation() {
40-
4139
previousActiveOperation := r.blockingOperation.GetPreviouslyActiveOperation()
4240
operationId := previousActiveOperation.OperationId
4341

@@ -51,20 +49,19 @@ func (r *BlockingOperationLogger) logPreviouslyActiveOperation() {
5149
}
5250

5351
func (r *BlockingOperationLogger) logOperation(operation v1.KubegresBlockingOperation) []interface{} {
54-
5552
operationId := operation.OperationId
5653
stepId := operation.StepId
5754
hasTimedOut := operation.HasTimedOut
58-
statefulSetInstanceIndex := operation.StatefulSetOperation.InstanceIndex
55+
instance := operation.StatefulSetOperation.Instance
5956
statefulSetSpecDifferences := operation.StatefulSetSpecUpdateOperation.SpecDifferences
6057

6158
var keysAndValues []interface{}
6259
keysAndValues = append(keysAndValues, "OperationId", operationId)
6360
keysAndValues = append(keysAndValues, "StepId", stepId)
6461
keysAndValues = append(keysAndValues, "HasTimedOut", hasTimedOut)
6562

66-
if statefulSetInstanceIndex != 0 {
67-
keysAndValues = append(keysAndValues, "StatefulSetInstanceIndex", statefulSetInstanceIndex)
63+
if instance != "" {
64+
keysAndValues = append(keysAndValues, "Instance", instance)
6865
}
6966

7067
if statefulSetSpecDifferences != "" {

controllers/spec/defaultspec/UndefinedSpecValuesChecker.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ func (r *UndefinedSpecValuesChecker) updateSpec() error {
104104
}
105105

106106
func (r *UndefinedSpecValuesChecker) createDefaultAffinity() *core.Affinity {
107-
108107
resourceName := r.kubegresContext.Kubegres.Name
109108

110109
weightedPodAffinityTerm := core.WeightedPodAffinityTerm{
@@ -113,7 +112,7 @@ func (r *UndefinedSpecValuesChecker) createDefaultAffinity() *core.Affinity {
113112
LabelSelector: &metav1.LabelSelector{
114113
MatchExpressions: []metav1.LabelSelectorRequirement{
115114
{
116-
Key: "app",
115+
Key: ctx.NameLabelKey,
117116
Operator: metav1.LabelSelectorOpIn,
118117
Values: []string{resourceName},
119118
},

controllers/spec/enforcer/resources_count_spec/ServicesCountSpecEnforcer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func (r *ServicesCountSpecEnforcer) isPrimaryDbReady() bool {
7676
}
7777

7878
func (r *ServicesCountSpecEnforcer) isThereReadyReplica() bool {
79-
return r.resourcesStates.StatefulSets.Replicas.NbreReady > 0
79+
return r.resourcesStates.StatefulSets.Replicas.NumberReady > 0
8080
}
8181

8282
func (r *ServicesCountSpecEnforcer) deployPrimaryService() error {

controllers/spec/enforcer/resources_count_spec/StatefulSetCountSpecEnforcer.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ func CreateStatefulSetCountSpecEnforcer(primaryDbCountSpecEnforcer statefulset.P
3939
}
4040

4141
func (r *StatefulSetCountSpecEnforcer) EnforceSpec() error {
42-
4342
if err := r.enforcePrimaryDbInstance(); err != nil {
4443
return err
4544
}

0 commit comments

Comments
 (0)