Skip to content

K8SPSMDB-675: Fix constantly updated status conditions #1753

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Dec 11, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -162,13 +162,13 @@ spec:
- name: PBM_AGENT_MONGODB_USERNAME
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_USER
key: MONGODB_BACKUP_USER_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_AGENT_MONGODB_PASSWORD
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_PASSWORD
key: MONGODB_BACKUP_PASSWORD_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_MONGODB_REPLSET
Original file line number Diff line number Diff line change
@@ -162,13 +162,13 @@ spec:
- name: PBM_AGENT_MONGODB_USERNAME
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_USER
key: MONGODB_BACKUP_USER_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_AGENT_MONGODB_PASSWORD
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_PASSWORD
key: MONGODB_BACKUP_PASSWORD_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_MONGODB_REPLSET
Original file line number Diff line number Diff line change
@@ -163,13 +163,13 @@ spec:
- name: PBM_AGENT_MONGODB_USERNAME
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_USER
key: MONGODB_BACKUP_USER_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_AGENT_MONGODB_PASSWORD
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_PASSWORD
key: MONGODB_BACKUP_PASSWORD_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_MONGODB_REPLSET
Original file line number Diff line number Diff line change
@@ -160,13 +160,13 @@ spec:
- name: PBM_AGENT_MONGODB_USERNAME
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_USER
key: MONGODB_BACKUP_USER_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_AGENT_MONGODB_PASSWORD
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_PASSWORD
key: MONGODB_BACKUP_PASSWORD_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_MONGODB_REPLSET
Original file line number Diff line number Diff line change
@@ -160,13 +160,13 @@ spec:
- name: PBM_AGENT_MONGODB_USERNAME
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_USER
key: MONGODB_BACKUP_USER_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_AGENT_MONGODB_PASSWORD
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_PASSWORD
key: MONGODB_BACKUP_PASSWORD_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_MONGODB_REPLSET
Original file line number Diff line number Diff line change
@@ -159,13 +159,13 @@ spec:
- name: PBM_AGENT_MONGODB_USERNAME
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_USER
key: MONGODB_BACKUP_USER_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_AGENT_MONGODB_PASSWORD
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_PASSWORD
key: MONGODB_BACKUP_PASSWORD_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_MONGODB_REPLSET
Original file line number Diff line number Diff line change
@@ -160,13 +160,13 @@ spec:
- name: PBM_AGENT_MONGODB_USERNAME
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_USER
key: MONGODB_BACKUP_USER_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_AGENT_MONGODB_PASSWORD
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_PASSWORD
key: MONGODB_BACKUP_PASSWORD_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_MONGODB_REPLSET
Original file line number Diff line number Diff line change
@@ -160,13 +160,13 @@ spec:
- name: PBM_AGENT_MONGODB_USERNAME
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_USER
key: MONGODB_BACKUP_USER_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_AGENT_MONGODB_PASSWORD
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_PASSWORD
key: MONGODB_BACKUP_PASSWORD_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_MONGODB_REPLSET
Original file line number Diff line number Diff line change
@@ -161,13 +161,13 @@ spec:
- name: PBM_AGENT_MONGODB_USERNAME
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_USER
key: MONGODB_BACKUP_USER_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_AGENT_MONGODB_PASSWORD
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_PASSWORD
key: MONGODB_BACKUP_PASSWORD_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_MONGODB_REPLSET
Original file line number Diff line number Diff line change
@@ -161,13 +161,13 @@ spec:
- name: PBM_AGENT_MONGODB_USERNAME
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_USER
key: MONGODB_BACKUP_USER_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_AGENT_MONGODB_PASSWORD
valueFrom:
secretKeyRef:
key: MONGODB_BACKUP_PASSWORD
key: MONGODB_BACKUP_PASSWORD_ESCAPED
name: internal-some-name-users
optional: false
- name: PBM_MONGODB_REPLSET
1 change: 1 addition & 0 deletions e2e-tests/run-pr.csv
Original file line number Diff line number Diff line change
@@ -43,6 +43,7 @@ service-per-pod
serviceless-external-nodes
smart-update
split-horizon
stable-resource-version
storage
tls-issue-cert-manager
upgrade
1 change: 1 addition & 0 deletions e2e-tests/run-release.csv
Original file line number Diff line number Diff line change
@@ -44,6 +44,7 @@ service-per-pod
serviceless-external-nodes
smart-update
split-horizon
stable-resource-version
storage
tls-issue-cert-manager
upgrade
74 changes: 74 additions & 0 deletions e2e-tests/stable-resource-version/conf/some-name.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
apiVersion: psmdb.percona.com/v1
kind: PerconaServerMongoDB
metadata:
name: some-name
spec:
#platform: openshift
image:
imagePullPolicy: Always

tls:
mode: requireTLS

sharding:
enabled: true

configsvrReplSet:
size: 3
affinity:
antiAffinityTopologyKey: none
volumeSpec:
persistentVolumeClaim:
resources:
requests:
storage: 3Gi

mongos:
size: 3
affinity:
antiAffinityTopologyKey: none
expose:
type: ClusterIP

replsets:

- name: rs0
affinity:
antiAffinityTopologyKey: none
resources:
limits:
cpu: 500m
memory: 1G
requests:
cpu: 100m
memory: 0.1G
volumeSpec:
persistentVolumeClaim:
resources:
requests:
storage: 1Gi
size: 3
configuration: |
operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
security:
enableEncryption: true
redactClientLogData: false
setParameter:
ttlMonitorSleepSecs: 60
wiredTigerConcurrentReadTransactions: 128
wiredTigerConcurrentWriteTransactions: 128
storage:
engine: wiredTiger
wiredTiger:
collectionConfig:
blockCompressor: snappy
engineConfig:
directoryForIndexes: false
journalCompressor: snappy
indexConfig:
prefixCompression: true

secrets:
users: some-users
39 changes: 39 additions & 0 deletions e2e-tests/stable-resource-version/run
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/bin/bash

set -o errexit

test_dir=$(realpath $(dirname $0))
. ${test_dir}/../functions
set_debug

cluster="some-name"

create_infra ${namespace}

desc "create PSMDB cluster ${cluster}"
apply_cluster ${test_dir}/conf/${cluster}.yml

desc 'check if all pods started'
wait_for_running ${cluster}-rs0 3 "false"
wait_for_running ${cluster}-cfg 3 "false"
wait_for_running ${cluster}-mongos 3 "false"

wait_cluster_consistency ${cluster}

desc 'check if .metadata.resourceVersion is stable'

initial_resource_version=$(kubectl_bin get psmdb ${cluster} -o jsonpath={.metadata.resourceVersion})
for i in $(seq 1 5); do
sleep 7 # wait for a reconciliation loop
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[shfmt] reported by reviewdog 🐶

Suggested change
sleep 7 # wait for a reconciliation loop
sleep 7 # wait for a reconciliation loop

echo -n "check ${i}: expected resourceVersion is ${initial_resource_version}"
resource_version=$(kubectl_bin get psmdb ${cluster} -o jsonpath={.metadata.resourceVersion})
if [[ ${initial_resource_version} != ${resource_version} ]]; then
echo "...FAIL! .metadata.resourceVersion is ${resource_version}"
exit 1
fi
echo "...OK"
done

desc 'test passed'

exit 0
28 changes: 23 additions & 5 deletions pkg/apis/psmdb/v1/psmdb_types.go
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@ import (
"os"
"strconv"
"strings"
"time"

cmmeta "github.com/cert-manager/cert-manager/pkg/apis/meta/v1"
"github.com/go-logr/logr"
@@ -1206,13 +1207,30 @@ func (cr *PerconaServerMongoDB) CanRestore(ctx context.Context) error {
}

func (s *PerconaServerMongoDBStatus) AddCondition(c ClusterCondition) {
for i, cond := range s.Conditions {
if cond.Type != c.Type {
continue
existingCondition := s.FindCondition(c.Type)
if existingCondition == nil {
if c.LastTransitionTime.IsZero() {
c.LastTransitionTime = metav1.NewTime(time.Now())
}
s.Conditions = append(s.Conditions, c)
return
}

if existingCondition.Status != c.Status {
existingCondition.Status = c.Status
if !c.LastTransitionTime.IsZero() {
existingCondition.LastTransitionTime = c.LastTransitionTime
} else {
existingCondition.LastTransitionTime = metav1.NewTime(time.Now())
}
s.Conditions[i] = c
}
s.Conditions = append(s.Conditions, c)

if existingCondition.Reason != c.Reason {
existingCondition.Reason = c.Reason
}
if existingCondition.Message != c.Message {
existingCondition.Message = c.Message
}
}

// GetExternalNodes returns all external nodes for all replsets
16 changes: 15 additions & 1 deletion pkg/controller/perconaservermongodb/psmdb_controller.go
Original file line number Diff line number Diff line change
@@ -1473,7 +1473,21 @@ func (r *ReconcilePerconaServerMongoDB) reconcilePDB(ctx context.Context, cr *ap
}

func (r *ReconcilePerconaServerMongoDB) createOrUpdate(ctx context.Context, obj client.Object) error {
_, err := util.Apply(ctx, r.client, obj)
log := logf.FromContext(ctx).WithValues(
"name", obj.GetName(),
"kind", obj.GetObjectKind(),
"generation", obj.GetGeneration(),
"resourceVersion", obj.GetResourceVersion(),
)

status, err := util.Apply(ctx, r.client, obj)

switch status {
case util.ApplyStatusCreated:
log.V(1).Info("Object created")
case util.ApplyStatusUpdated:
log.V(1).Info("Object updated")
}
return err
}

2 changes: 1 addition & 1 deletion pkg/controller/perconaservermongodb/version.go
Original file line number Diff line number Diff line change
@@ -440,7 +440,7 @@ func (r *ReconcilePerconaServerMongoDB) scheduleTelemetryRequests(ctx context.Co
return
}

err = localCr.CheckNSetDefaults(r.serverVersion.Platform, log)
err = localCr.CheckNSetDefaults(ctx, r.serverVersion.Platform)
if err != nil {
log.Error(err, "failed to set defaults for CR")
return