Skip to content
Open
Show file tree
Hide file tree
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
1 change: 1 addition & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ aliases:
* BUGFIX: [vmdistributed](https://docs.victoriametrics.com/operator/resources/vmdistributed/): change default load balancing policy for write requests from `first_available` to `least_loaded`. This should allow to evenly distribute write load across all VMAgents.
* BUGFIX: [vmalertmanagerconfig](https://docs.victoriametrics.com/operator/resources/vmalertmanagerconfig/): fix previously ignored negative values in VMAlertmanagerConfig. See [#2132](https://github.com/VictoriaMetrics/operator/issues/2132).
* BUGFIX: [vmalertmanager](https://docs.victoriametrics.com/operator/resources/vmalertmanager/): fixed ignored alertmanager template if it has no discovered VMAlertmanagerconfig CRs or tracing config defined. See [#2121](https://github.com/VictoriaMetrics/operator/issues/2121).
* BUGFIX: [vmoperator](https://docs.victoriametrics.com/operator/): retry reconcile errors, that may lead to expanding state, before resource could hang in expanding state.

## [v0.69.0](https://github.com/VictoriaMetrics/operator/releases/tag/v0.69.0)
**Release date:** 22 April 2026
Expand Down
2 changes: 1 addition & 1 deletion internal/controller/operator/controllers.go
Original file line number Diff line number Diff line change
Expand Up @@ -345,8 +345,8 @@ func reconcileAndTrackStatus[T client.Object, ST reconcile.StatusWithMetadata[ST
resultStatus = vmv1beta1.UpdateStatusExpanding
} else {
resultStatus = vmv1beta1.UpdateStatusFailed
resultErr = err
}
resultErr = err
return
}
if specChanged {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ func TestReconcileAndTrackStatus(t *testing.T) {
wantStatus: vmv1beta1.UpdateStatusOperational,
})

// retryable conflict error, operational → expanding
// retryable conflict error, operational → expanding, error propagated for requeue
opSpec := vmv1beta1.VMAlertSpec{SelectAllByDefault: true}
f(opts{
object: &vmv1beta1.VMAlert{
Expand All @@ -89,9 +89,10 @@ func TestReconcileAndTrackStatus(t *testing.T) {
return ctrl.Result{}, k8serrors.NewConflict(schema.GroupResource{Group: "apps", Resource: "deployments"}, "test", fmt.Errorf("conflict"))
},
wantStatus: vmv1beta1.UpdateStatusExpanding,
wantErr: true,
})

// retryable wait interrupted, operational → expanding
// retryable wait interrupted, operational → expanding, error propagated for requeue
f(opts{
object: &vmv1beta1.VMAlert{
ObjectMeta: metav1.ObjectMeta{Name: "test-vmalert", Namespace: "default"},
Expand All @@ -105,6 +106,7 @@ func TestReconcileAndTrackStatus(t *testing.T) {
return ctrl.Result{}, wait.ErrorInterrupted(fmt.Errorf("timeout"))
},
wantStatus: vmv1beta1.UpdateStatusExpanding,
wantErr: true,
})

// operational → expanding → operational
Expand Down Expand Up @@ -237,7 +239,7 @@ func TestVMClusterRemainsExpandingDuringPVCResize(t *testing.T) {
_, err := reconcileAndTrackStatus(context.Background(), fclient, cluster, func() (ctrl.Result, error) {
return ctrl.Result{}, wait.ErrorInterrupted(fmt.Errorf("pvc resize still in progress"))
})
assert.NoError(t, err)
assert.Error(t, err)

got := &vmv1beta1.VMCluster{}
assert.NoError(t, fclient.Get(context.Background(), types.NamespacedName{Name: "test-vmcluster", Namespace: "default"}, got))
Expand Down
Loading