Skip to content

K8SPS-823 calculator-based MySQL autoconfig - #1502

Open
gkech wants to merge 20 commits into
mainfrom
K8SPS-823
Open

K8SPS-823 calculator-based MySQL autoconfig#1502
gkech wants to merge 20 commits into
mainfrom
K8SPS-823

Conversation

@gkech

@gkech gkech commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

CHANGE DESCRIPTION

Problem:

The operator's autotune only derives innodb_buffer_pool_size, its chunk size and max_connections from the memory limit. Everything else is left at server defaults, so a cluster is under-tuned out of the box.

Cause:
Short explanation of the root cause of the issue if applicable.

Solution:

Adds an opt-in spec.mysql.autoconfig that generates a full mysqld configuration from the pod's CPU/memory allocation using mysqloperatorcalculator.

New cr option:

mysql:
  autoconfig:
    enabled: true                                                                                                                                                            
    loadType: someWrites   # mostlyReads | someWrites | equalReadsWrites | heavyWrites
    version: "8.4"         # which parameter set to calculate for
  resources:
    limits: { cpu: "2", memory: 4Gi }
    requests: { cpu: "1", memory: 2Gi }

Logging the following error when the current PVC and the calculated redo log do not much. In that case a suggestion is compiled for the end user.

2026-08-28T09:25:06.370Z	ERROR	Reconciler error	{"controller": "ps-controller", "controllerGroup": "ps.percona.com", "controllerKind": "PerconaServerMySQL", "PerconaServerMySQL": {"name":"ps-cluster1","namespace":"kech1"}, "namespace": "kech1", "name": "ps-cluster1", "reconcileID": "51d22394-785b-4c2d-8502-e35ad0b1a3fb", "error": "reconcile: database: reconcile MySQL auto-config: calculate autoconfig parameters: calculated redo log is 2230805926 bytes but mysql.volumeSpec.persistentVolumeClaim requests 2147483648 bytes; increase the volume or lower mysql.resources memory: data volume is too small for the calculated configuration", "errorVerbose": "reconcile: database: reconcile MySQL auto-config: calculate autoconfig parameters: calculated redo log is 2230805926 bytes but mysql.volumeSpec.persistentVolumeClaim requests 2147483648 bytes; increase the volume or lower mysql.resources memory: data volume is too small for the calculated configuration\ndata volume is too small for the calculated configuration\ngithub.com/percona/percona-server-mysql-operator/pkg/mysql.init\n\t<autogenerated>:1\nruntime.doInit1\n\t/usr/local/go/src/runtime/proc.go:8103\nruntime.doInit\n\t/usr/local/go/src/runtime/proc.go:8070\nruntime.main\n\t/usr/local/go/src/runtime/proc.go:258\nruntime.goexit\n\t/usr/local/go/src/runtime/asm_amd64.s:1771"}

CHECKLIST

Jira

  • Is the Jira ticket created and referenced properly?
  • Does the Jira ticket have the proper statuses for documentation (Needs Doc) and QA (Needs QA)?
  • Does the Jira ticket link to the proper milestone (Fix Version field)?

Tests

  • Is an E2E test/test case added for the new feature/change?
  • Are unit tests added where appropriate?

Config/Logging/Testability

  • Are all needed new/changed options added to default YAML files?
  • Are all needed new/changed options added to the Helm Chart?
  • Did we add proper logging messages for operator actions?
  • Did we ensure compatibility with the previous version or cluster upgrade process?
  • Does the change support oldest and newest supported PS version?
  • Does the change support oldest and newest supported Kubernetes version?

@pull-request-size pull-request-size Bot added the size/XXL 1000+ lines label Aug 21, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds calculator-based MySQL autoconfiguration using pod resources, workload profile, topology, and MySQL version.

Changes:

  • Introduces the calculator adapter and configuration merging.
  • Adds the mysql.autoconfig API, validation, defaults, and manifests.
  • Handles dynamic application and unsupported loose variables.

Reviewed changes

Copilot reviewed 18 out of 20 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
pkg/mysql/config.go Calculates and merges tuning parameters.
pkg/mysql/config_test.go Tests calculation and merging.
pkg/mysql/autoconfig/autoconfig.go Wraps the calculator library.
pkg/mysql/autoconfig/autoconfig_test.go Tests the wrapper.
pkg/db/admin.go Identifies loose variables.
pkg/controller/ps/mysql_config.go Skips unknown loose variables.
pkg/controller/ps/mysql_config_test.go Tests dynamic configuration.
pkg/controller/ps/controller.go Reconciles calculator output.
pkg/controller/ps/controller_test.go Tests resource validation.
go.mod Adds calculator dependencies.
go.sum Records dependency checksums.
deploy/cw-bundle.yaml Adds the generated API schema.
deploy/crd.yaml Adds the generated API schema.
deploy/cr.yaml Enables autoconfiguration in the example.
deploy/bundle.yaml Adds the generated API schema.
config/crd/bases/ps.percona.com_perconaservermysqls.yaml Defines the CRD schema and validation.
cmd/example-gen/pkg/defaults/manual.go Updates generated example defaults.
api/v1/zz_generated.deepcopy.go Adds generated deep-copy support.
api/v1/perconaservermysql_types.go Defines the autoconfiguration API.
api/v1/autoconfig_defaults_test.go Tests API defaulting.
Files not reviewed (1)
  • api/v1/zz_generated.deepcopy.go: Generated file

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread pkg/mysql/config.go Outdated
Comment on lines +173 to +175
for name := range params {
if _, ok := userKeys[name]; ok {
continue
Comment thread deploy/cr.yaml
Comment on lines +260 to +262
autoconfig:
enabled: true
loadType: someWrites
Comment thread pkg/mysql/config.go Outdated
return result, nil
}

// GetAutoTuneParams is the legacy tuning implementation the onsides
Comment thread api/v1/perconaservermysql_types.go Outdated

// +kubebuilder:validation:XValidation:rule="has(self.image) && size(self.image) > 0",message="mysql.image is required"
// +kubebuilder:validation:XValidation:rule="has(self.size) && self.size > 0",message="mysql.size must be greater than 0"
// +kubebuilder:validation:XValidation:rule="!(has(self.autoconfig) && has(self.autoconfig.enabled) && self.autoconfig.enabled) || (has(self.resources) && ((has(self.resources.limits) && 'cpu' in self.resources.limits) || (has(self.resources.requests) && 'cpu' in self.resources.requests)) && ((has(self.resources.limits) && 'memory' in self.resources.limits) || (has(self.resources.requests) && 'memory' in self.resources.requests)))",message="mysql.resources must set cpu and memory (via limits or requests) when mysql.autoconfig.enabled is true"

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

fixed

@gkech
gkech requested a balanced review from Copilot August 21, 2026 15:05

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 18 out of 20 changed files in this pull request and generated no new comments.

Files not reviewed (1)
  • api/v1/zz_generated.deepcopy.go: Generated file
Suppressed comments (3)

Previously missed (1) — in code that hasn't changed since the last review.

pkg/controller/ps/controller.go:1113

  • There is no end-to-end coverage that starts a real cluster with autoconfig enabled. The unit tests only inspect calculator output substrings and mock SET GLOBAL, so they cannot catch generated options that prevent a supported MySQL version/topology from booting or becoming ready. Add an E2E case for the supported MySQL versions/topologies before enabling this in the default CR.
		case cr.Spec.MySQL.AutoConfig.IsEnabled() && cr.Status.MySQL.Version != "":
			params, err = mysql.GetAutoConfigParams(cr, cpu, memory)

pkg/mysql/config.go:175

  • User overrides are compared by exact spelling, but the calculator emits loose_ options and SetGlobalVariable strips that prefix. If a user sets the corresponding unprefixed option, both values survive; the later runtime application iterates a map, so the calculator value can nondeterministically overwrite the user's value. Normalize the loose prefix when checking overrides.
	for name := range params {
		if _, ok := userKeys[name]; ok {
			continue

pkg/mysql/config.go:64

  • The new doc comment is grammatically incomplete; “the onsides” does not describe what the legacy implementation does.
// GetAutoTuneParams is the legacy tuning implementation the onsides

@gkech
gkech requested a balanced review from Copilot August 28, 2026 09:12

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 19 out of 21 changed files in this pull request and generated 2 comments.

Files not reviewed (1)
  • api/v1/zz_generated.deepcopy.go: Generated file
Suppressed comments (1)

deploy/cr.yaml:263

  • Enabling this in the shared default CR breaks existing E2E variants. e2e-tests/functions:765 uses this file as the base, while tests substitute 8.0 images or remove CPU/resources; they retain version: "8.4" and either generate configuration for the wrong server or fail the new admission rules. Keep the shared sample opt-in/commented, or update the E2E helper to synchronize/disable autoconfig and add a dedicated calculator test.
    autoconfig:
      enabled: true
      loadType: someWrites
      version: "8.4"

Comment thread pkg/mysql/config.go Outdated
Comment on lines +187 to +207
if err := checkStorageFits(cr, params); err != nil {
return "", err
}

userKeys, err := userConfigKeys(cr.Spec.MySQL.Configuration)
if err != nil {
return "", errors.Wrap(err, "parse user configuration")
}

// Sort for a stable ConfigMap payload so unchanged resources don't produce
// a churning config hash and needless rollout restarts. Keys are compared
// canonically, so a user's group_replication_x suppresses the calculator's
// loose_group_replication_x rather than leaving both spellings of the same
// variable in the merged configuration.
names := make([]string, 0, len(params))
for name := range params {
if _, ok := userKeys[CanonicalVariableName(name)]; ok {
continue
}
names = append(names, name)
}
Comment on lines +282 to +283
// +kubebuilder:validation:Pattern=`^\d+\.\d+(\.\d+)?$`
Version string `json:"version,omitempty"`
@github-actions github-actions Bot added the tests label Aug 28, 2026
@gkech
gkech marked this pull request as ready for review August 31, 2026 11:30

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

It removes exported APIs and contradicts the documented redo-log mismatch behavior.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Files not reviewed (1)

  • api/v1/zz_generated.deepcopy.go: Generated file
  • Files reviewed: 20/22 changed files
  • Comments generated: 3
  • Review effort level: Balanced

MinSafeAsyncSize = 2
)

// Checks if the provided ClusterType is valid.
return instance, nil
}

// FNVHash computes a hash of the provided byte slice using the FNV-1a algorithm.
Comment thread pkg/mysql/config.go
return err
}

budget := (storage * maxRedoLogPercent / 100) &^ (1024*1024 - 1)
Comment thread cmd/example-gen/pkg/defaults/manual.go Outdated

func mysqlDefaults(spec *apiv1.MySQLSpec) {
podSpecDefaults(&spec.PodSpec, ImageMySQL, resources("2Gi", "", "4Gi", ""), configurationMySQL, 600, envList("BOOTSTRAP_READ_TIMEOUT", "600", "ASYNC_SOURCE_RETRY_COUNT", "3", "ASYNC_SOURCE_CONNECT_RETRY", "60"), envFromList("mysql-env-secret"))
podSpecDefaults(&spec.PodSpec, ImageMySQL, resources("1Gi", "1", "2Gi", "2"), configurationMySQL, 600, envList("BOOTSTRAP_READ_TIMEOUT", "600", "ASYNC_SOURCE_RETRY_COUNT", "3", "ASYNC_SOURCE_CONNECT_RETRY", "60"), envFromList("mysql-env-secret"))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

i don't want to reduce the default memory resources in cr.yaml

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

// recomputed on every pass, so correcting the spec brings the calculated
// configuration back without any further intervention.
autotune := func(reason string) (string, error) {
log.Info("falling back to autotune", "reason", reason)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

do we really want to fallback? with the introduction of calculator, i think we should either configure all or nothing

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

So we want to remove the autotune solution completely?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

i think yes, it should be either calculator or nothing. @hors wdyt?


switch {
case !cr.Spec.MySQL.AutoConfig.IsEnabled():
params, err = mysql.GetAutoTuneParams(cr, memory)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

regardless of the decision above, we should not configure anything if user explicitly disables auto config

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Comment on lines +201 to +204
if mysql.IsLooseVariable(k) {
log.V(1).Info("Skipping unknown loose variable", "variable", k, "pod", pod.Name)
continue
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

why do we need this?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Mirroring MySQL's behaviour, essentially loose variables are ignored if they cannot be recognized. With this DEBUG log we have this visibility. For example we dont want to fail this configuration given that MySQL accepts it perfectly fine.

Comment on lines +1119 to +1126
case cpu == nil:
// Enabled but the user set no CPU request/limit: we cannot size the
// configuration.
params, err = autotune("autoconfig is enabled but no CPU request/limit is set")
case version == "":
// The CRD requires the version whenever autoconfig is enabled, so
// this only happens against an outdated CRD.
params, err = autotune("autoconfig is enabled but mysql.autoconfig.version is not set")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

will it even reach here? I see there is CEL validation that prevents it

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

in general cel should be ok, but I prefer keeping the validation to make it clearer, we were already checking memory on the same flow.

Comment thread api/v1/perconaservermysql_types.go Outdated

// +kubebuilder:validation:XValidation:rule="has(self.image) && size(self.image) > 0",message="mysql.image is required"
// +kubebuilder:validation:XValidation:rule="has(self.size) && self.size > 0",message="mysql.size must be greater than 0"
// +kubebuilder:validation:XValidation:rule="!(has(self.autoconfig) && has(self.autoconfig.enabled) && self.autoconfig.enabled) || (has(self.resources) && ((has(self.resources.limits) && 'cpu' in self.resources.limits) || (has(self.resources.requests) && 'cpu' in self.resources.requests)) && ((has(self.resources.limits) && 'memory' in self.resources.limits) || (has(self.resources.requests) && 'memory' in self.resources.requests)))",message="mysql.resources must set cpu and memory (via limits or requests) when mysql.autoconfig.enabled is true"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

here and in the remaining rules, the first !(has(self.autoconfig) && has(self.autoconfig.enabled) && self.autoconfig.enabled) can be simplified using ?

Suggested change
// +kubebuilder:validation:XValidation:rule="!(has(self.autoconfig) && has(self.autoconfig.enabled) && self.autoconfig.enabled) || (has(self.resources) && ((has(self.resources.limits) && 'cpu' in self.resources.limits) || (has(self.resources.requests) && 'cpu' in self.resources.requests)) && ((has(self.resources.limits) && 'memory' in self.resources.limits) || (has(self.resources.requests) && 'memory' in self.resources.requests)))",message="mysql.resources must set cpu and memory (via limits or requests) when mysql.autoconfig.enabled is true"
// +kubebuilder:validation:XValidation:rule="!(self.?autoconfig.?enabled.orValue(false)) || (has(self.resources) && ((has(self.resources.limits) && 'cpu' in self.resources.limits) || (has(self.resources.requests) && 'cpu' in self.resources.requests)) && ((has(self.resources.limits) && 'memory' in self.resources.limits) || (has(self.resources.requests) && 'memory' in self.resources.requests)))",message="mysql.resources must set cpu and memory (via limits or requests) when mysql.autoconfig.enabled is true"

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Comment thread deploy/cr.yaml Outdated
# resources:
# requests:
# storage: 2Gi
# storage: 4Gi

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

set it to 10 for cr

| yq eval '.spec.orchestrator.enabled=true' - \
| yq eval '.spec.mysql.resources.limits.cpu="1000m"' - \
| yq eval '.spec.mysql.resources.limits.memory="4G"' - \
| yq eval '.spec.mysql.resources.limits.memory="2G"' - \

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

modify for requests and limits for particular tests differently, i.e. default to get cr function

@gkech
gkech requested review from egegunes and mayankshah1607 and a balanced review from Copilot September 3, 2026 09:51

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

Configuration precedence and size-limited emptyDir handling can produce incorrect or unbootable MySQL configurations.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Files not reviewed (1)

  • api/v1/zz_generated.deepcopy.go: Generated file

Suppressed comments (2)

pkg/mysql/config.go:277

  • This behavior contradicts the PR description's stated PVC handling. In the documented 2 GiB-volume example, an oversized calculated redo log is supposed to fail reconciliation with guidance to enlarge the volume or lower memory; this code instead silently rewrites it to 512 MiB and proceeds. Either restore the documented rejection or update the PR contract and user-facing documentation to explicitly describe the 25% cap.
	budget := (storage * maxRedoLogPercent / 100) &^ (1024*1024 - 1)
	if redo <= budget {
		return nil
	}

pkg/mysql/config.go:451

  • The alias winner is derived from section.Keys() after go-ini has already collapsed repeated exact spellings. This loses source order when a spelling reappears: for auto loose_x=5, ConfigMap x=99, then Secret loose_x=100, the key list retains the first loose_x position, so this loop selects x=99 and discards the Secret's later override. The dynamic value then differs from the startup file precedence. Resolve aliases while merging the raw fragments (or otherwise track each assignment's source order) before duplicate keys are collapsed.
	lastByCanonical := make(map[string]string, len(section.Keys()))
	for _, k := range section.Keys() {
		lastByCanonical[CanonicalVariableName(k.Name())] = k.Name()
  • Files reviewed: 24/26 changed files
  • Comments generated: 2
  • Review effort level: Balanced

Comment thread pkg/mysql/config.go
Comment on lines +242 to +253
vs := cr.Spec.MySQL.VolumeSpec
if vs == nil || vs.PersistentVolumeClaim == nil {
return 0
}
res := vs.PersistentVolumeClaim.Resources
if q, ok := res.Requests[corev1.ResourceStorage]; ok {
return q.Value()
}
if q, ok := res.Limits[corev1.ResourceStorage]; ok {
return q.Value()
}
return 0
Comment thread pkg/mysql/config.go
Comment on lines +280 to +283
return errors.Wrapf(ErrInsufficientStorage,
"redo log needs at least %d bytes but mysql.volumeSpec.persistentVolumeClaim provides %d bytes for it; "+
"increase the volume",
int64(minRedoLogBytes), budget)
@JNKPercona

Copy link
Copy Markdown
Collaborator
Test Name Result Time
async-ignore-annotations-8-4 passed 00:06:21
async-global-metadata-8-4 passed 00:14:02
async-upgrade-8-0 failure 00:01:19
async-upgrade-8-4 failure 00:01:18
auto-config-8-4 failure 00:19:12
config-8-4 failure 00:13:00
config-router-8-0 passed 00:07:25
config-router-8-4 passed 00:07:42
custom-users-8-4 passed 00:05:37
demand-backup-8-0 passed 00:19:40
demand-backup-8-4 failure 00:09:05
gr-pitr-minio-8-4 failure 00:14:30
gr-pitr-encrypted-minio-8-4 passed 00:16:47
gr-pitr-one-pod-8-4 passed 00:11:45
async-pitr-minio-8-4 passed 00:26:22
demand-backup-cloud-8-4 passed 00:22:48
demand-backup-retry-8-4 failure 00:12:02
demand-backup-incremental-8-0 passed 00:36:35
demand-backup-incremental-8-4 passed 00:34:50
async-data-at-rest-encryption-8-0 passed 00:14:46
async-data-at-rest-encryption-8-4 failure 00:08:51
gr-cross-cluster-8-0 passed 00:20:09
gr-cross-cluster-8-4 passed 00:19:54
gr-cross-cluster-backup-8-0 failure 00:24:44
gr-cross-cluster-backup-8-4 failure 00:25:08
gr-global-metadata-8-4 passed 00:15:08
gr-data-at-rest-encryption-8-0 passed 00:16:40
gr-data-at-rest-encryption-8-4 passed 00:14:49
gr-demand-backup-8-4 passed 00:12:49
gr-demand-backup-cloud-8-4 passed 00:22:57
gr-demand-backup-haproxy-8-4 passed 00:11:13
gr-demand-backup-incremental-8-0 passed 00:25:28
gr-demand-backup-incremental-8-4 passed 00:24:48
gr-demand-backup-incremental-compressed-8-0 passed 00:12:03
gr-demand-backup-incremental-compressed-8-4 passed 00:11:02
gr-demand-backup-incremental-encrypted-8-0 passed 00:18:26
gr-demand-backup-incremental-encrypted-8-4 passed 00:18:18
gr-finalizer-8-4 passed 00:05:55
gr-haproxy-8-0 passed 00:04:41
gr-haproxy-8-4 passed 00:04:28
gr-ignore-annotations-8-4 passed 00:04:47
gr-init-deploy-8-0 passed 00:10:38
gr-init-deploy-8-4 passed 00:09:43
gr-one-pod-8-4 failure 00:08:22
gr-recreate-8-4 passed 00:17:31
gr-scaling-8-4 passed 00:07:35
gr-scheduled-backup-8-4 passed 00:27:35
gr-scheduled-backup-incremental-8-4 passed 00:36:52
gr-security-context-8-4 passed 00:09:54
gr-self-healing-8-4 passed 00:23:07
gr-tls-cert-manager-8-4 passed 00:11:20
gr-users-8-4 passed 00:07:54
gr-upgrade-8-0 failure 00:01:20
gr-upgrade-8-4 failure 00:01:17
haproxy-8-0 passed 00:08:37
haproxy-8-4 passed 00:08:43
init-deploy-8-0 passed 00:05:57
init-deploy-8-4 passed 00:06:34
limits-8-4 failure 00:03:19
monitoring-8-4 passed 00:18:47
one-pod-8-0 passed 00:06:42
one-pod-8-4 passed 00:06:13
operator-self-healing-8-4 passed 00:11:17
pvc-auto-resize-8-4 passed 00:08:11
pvc-resize-8-4 failure 00:15:20
recreate-8-4 passed 00:12:49
scaling-8-4 passed 00:10:56
scheduled-backup-8-0 passed 00:27:20
scheduled-backup-8-4 passed 00:25:37
scheduled-backup-incremental-8-0 passed 00:40:17
scheduled-backup-incremental-8-4 passed 00:36:52
service-per-pod-8-4 passed 00:06:12
sidecars-8-4 passed 00:04:52
smart-update-8-4 passed 00:10:02
storage-8-4 passed 00:03:56
switch-cluster-type-8-4 passed 00:11:02
telemetry-8-4 passed 00:06:26
tls-cert-manager-8-4 passed 00:12:19
users-8-0 passed 00:08:33
users-8-4 passed 00:07:53
version-service-8-4 passed 00:20:19
Summary Value
Tests Run 81/81
Job Duration 03:07:54
Total Test Time 18:56:13

commit: 74ec96c
image: perconalab/percona-server-mysql-operator:PR-1502-74ec96c9

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants