func()

in pkg/controllers/mysqld_statefulset_controller.go [140:194]


func (mssc *mysqldStatefulSetController) ReconcileStatefulSet(ctx context.Context, sc *SyncContext) syncResult {
	mysqldSfset := sc.mysqldSfset
	cs := sc.configSummary
	nc := sc.ndb

	if mysqldSfset == nil {
		// statefulset doesn't exist yet
		if cs.NumOfMySQLServers == 0 {
			// the current state is in sync with expectation
			return continueProcessing()
		}

		// StatefulSet has to be created
		// First ensure that a root password secret exists
		secretClient := NewMySQLUserPasswordSecretInterface(mssc.client)
		if _, err := secretClient.EnsureMySQLRootPassword(ctx, nc); err != nil {
			klog.Errorf("Failed to ensure root password secret for StatefulSet %q : %s",
				mssc.ndbNodeStatefulset.GetName(nc), err)
			return errorWhileProcessing(err)
		}

		// create a statefulset
		if _, err := mssc.createStatefulSet(ctx, sc); err != nil {
			return errorWhileProcessing(err)
		}

		// StatefulSet was created successfully.
		// Finish processing. Reconciliation will
		// continue once the statefulset is updated.
		return finishProcessing()
	}

	// At this point the statefulset exists and has already been verified
	// to be complete (i.e. no previous updates still being applied) by HandleScaleDown.
	// Check if the statefulset has the recent config generation.
	if workloadHasConfigGeneration(mysqldSfset, cs.NdbClusterGeneration) {
		// Statefulset upto date
		klog.Info("All MySQL Servers are up-to-date and ready")
		return continueProcessing()
	}

	// Statefulset has to be patched
	// Patch the Governing Service first
	if err := sc.serviceController.patchService(ctx, sc, mssc.ndbNodeStatefulset); err != nil {
		return errorWhileProcessing(err)
	}

	// Patch the StatefulSet
	updatedStatefulSet, err := mssc.ndbNodeStatefulset.NewStatefulSet(cs, nc)
	if err != nil {
		return errorWhileProcessing(err)
	}

	return mssc.patchStatefulSet(ctx, mysqldSfset, updatedStatefulSet)
}