Skip to content
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

If configure database is set to false skip all work #1433

Merged
Merged
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
5 changes: 1 addition & 4 deletions controllers/cluster_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1198,8 +1198,7 @@ var _ = Describe("cluster_controller", func() {
Context("with changes disabled", func() {
BeforeEach(func() {
shouldCompleteReconciliation = false
var flag = false
cluster.Spec.AutomationOptions.ConfigureDatabase = &flag
cluster.Spec.AutomationOptions.ConfigureDatabase = pointer.Bool(false)
cluster.Spec.DatabaseConfiguration.RedundancyMode = fdbv1beta2.RedundancyModeTriple

err = k8sClient.Update(context.TODO(), cluster)
Expand All @@ -1212,14 +1211,12 @@ var _ = Describe("cluster_controller", func() {
Expect(generations).To(Equal(fdbv1beta2.ClusterGenerationStatus{
Reconciled: originalVersion,
NeedsConfigurationChange: originalVersion + 1,
NeedsCoordinatorChange: originalVersion + 1,
}))
})

It("should not change the database configuration", func() {
adminClient, err := newMockAdminClientUncast(cluster, k8sClient)
Expect(err).NotTo(HaveOccurred())

Expect(adminClient.DatabaseConfiguration.RedundancyMode).To(Equal(fdbv1beta2.RedundancyModeDouble))
})
})
Expand Down
31 changes: 10 additions & 21 deletions controllers/update_database_configuration.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,11 @@ package controllers
import (
"context"
"fmt"

corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/equality"
"k8s.io/utils/pointer"

fdbtypes "github.com/FoundationDB/fdb-kubernetes-operator/api/v1beta2"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/equality"
)

// updateDatabaseConfiguration provides a reconciliation step for changing the
Expand All @@ -37,6 +36,10 @@ type updateDatabaseConfiguration struct{}

// reconcile runs the reconciler's work.
func (u updateDatabaseConfiguration) reconcile(ctx context.Context, r *FoundationDBClusterReconciler, cluster *fdbtypes.FoundationDBCluster) *requeue {
if !pointer.BoolDeref(cluster.Spec.AutomationOptions.ConfigureDatabase, true) {
johscheuer marked this conversation as resolved.
Show resolved Hide resolved
return nil
}

logger := log.WithValues("namespace", cluster.Namespace, "cluster", cluster.Name, "reconciler", "updateDatabaseConfiguration")
adminClient, err := r.getDatabaseClientProvider().GetAdminClient(cluster, r)

Expand All @@ -45,24 +48,20 @@ func (u updateDatabaseConfiguration) reconcile(ctx context.Context, r *Foundatio
}
defer adminClient.Close()

desiredConfiguration := cluster.DesiredDatabaseConfiguration()
desiredConfiguration.RoleCounts.Storage = 0
var currentConfiguration fdbtypes.DatabaseConfiguration

status, err := adminClient.GetStatus()
if err != nil {
return &requeue{curError: err}
}

initialConfig := !cluster.Status.Configured
dataState := status.Cluster.Data.State

if !(initialConfig || status.Client.DatabaseStatus.Available) {
logger.Info("Skipping database configuration change because database is unavailable")
return nil
}

currentConfiguration = status.Cluster.DatabaseConfiguration.NormalizeConfigurationWithSeparatedProxies(cluster.Spec.Version, cluster.Spec.DatabaseConfiguration.AreSeparatedProxiesConfigured())
desiredConfiguration := cluster.DesiredDatabaseConfiguration()
desiredConfiguration.RoleCounts.Storage = 0
currentConfiguration := status.Cluster.DatabaseConfiguration.NormalizeConfigurationWithSeparatedProxies(cluster.Spec.Version, cluster.Spec.DatabaseConfiguration.AreSeparatedProxiesConfigured())
// We have to reset the excluded servers here otherwise we will trigger a reconfiguration if one or more servers
// are excluded.
currentConfiguration.ExcludedServers = nil
Expand All @@ -77,24 +76,14 @@ func (u updateDatabaseConfiguration) reconcile(ctx context.Context, r *Foundatio
}
configurationString, _ := nextConfiguration.GetConfigurationString(cluster.Spec.Version)

dataState := status.Cluster.Data.State
if !(initialConfig || dataState.Healthy) {
logger.Info("Waiting for data distribution to be healthy", "stateName", dataState.Name, "stateDescription", dataState.Description)
r.Recorder.Event(cluster, corev1.EventTypeNormal, "NeedsConfigurationChange",
fmt.Sprintf("Spec require configuration change to `%s`, but data distribution is not fully healthy: %s (%s)", configurationString, dataState.Name, dataState.Description))
return nil
}

if !pointer.BoolDeref(cluster.Spec.AutomationOptions.ConfigureDatabase, true) {
r.Recorder.Event(cluster, corev1.EventTypeNormal, "NeedsConfigurationChange",
fmt.Sprintf("Spec require configuration change to `%s`, but configuration changes are disabled", configurationString))
cluster.Status.Generations.NeedsConfigurationChange = cluster.ObjectMeta.Generation
err = r.updateOrApply(ctx, cluster)
if err != nil {
logger.Error(err, "Error updating cluster status")
}
return &requeue{message: "Database configuration changes are disabled"}
}

if !initialConfig {
hasLock, err := r.takeLock(cluster,
fmt.Sprintf("reconfiguring the database to `%s`", configurationString))
Expand Down