Skip to content

feat(cell): add first-class TLS support for multigateway via cert-manager#462

Merged
haritabh17 merged 7 commits intomainfrom
haritabh/mul-341-multigateway-tls
Apr 15, 2026
Merged

feat(cell): add first-class TLS support for multigateway via cert-manager#462
haritabh17 merged 7 commits intomainfrom
haritabh/mul-341-multigateway-tls

Conversation

@haritabh17
Copy link
Copy Markdown
Contributor

@haritabh17 haritabh17 commented Apr 13, 2026

Summary

  • Adds certCommonName field to MultigresClusterSpec and CellSpec CRDs
  • Cell controller creates a cert-manager Certificate (using supabase-issuer ClusterIssuer) when certCommonName is set
  • Multigateway deployment conditionally mounts the TLS secret and passes --pg-tls-cert-file / --pg-tls-key-file flags
  • TLS is fully gated on certCommonName — clusters without cert-manager are unaffected

Closes MUL-341

Problem

The multigateway binary supports TLS via --pg-tls-cert-file / --pg-tls-key-file (merged in multigres#659), but the operator wasn't creating certificates or passing these flags. This caused psql sslmode=require to fail with "server does not support SSL" for HA projects (MUL-326).

Solution

When certCommonName is set on the MultigresCluster CR, the cell controller creates a cert-manager Certificate matching the non-HA project convention:

  • Issuer: supabase-issuer (ClusterIssuer)
  • Secret: generated-certs
  • RSA 2048, 44640h duration (5 years)
  • DNS SANs: db.<ref>.<domain> + <ref>.<domain>

The multigateway deployment then mounts the generated-certs secret and passes the TLS flags. This supports all PostgreSQL SSL modes including verify-full.

The platform worker (separate repo) will pass certCommonName in the MultigresCluster CR — a 1-line change on their side.

Test plan

  • TestBuildCertificate — Certificate resource name, DNS SANs, owner reference, issuer, key params
  • TestReconcileCertificate — no-op when empty, creates via SSA, idempotent on repeated calls
  • TestBuildMultiGatewayDeployment_TLS — TLS enabled (volume, mount, args) and disabled (no artifacts)
  • Full test suite passes
  • Deploy to staging with certCommonName: db.<ref>.supabase.red and verify psql sslmode=require

…ager

When MultigresClusterSpec.CertCommonName is set, the cell controller now
creates a cert-manager Certificate (using supabase-issuer ClusterIssuer)
and mounts the resulting TLS secret into multigateway pods with
--pg-tls-cert-file and --pg-tls-key-file flags. This enables
`psql sslmode=require` for HA projects without manual cert patching.

The Certificate spec matches the non-HA project convention (RSA 2048,
44640h duration, generated-certs secret, literalSubject with Supabase
org fields). TLS is fully gated on certCommonName so standalone
multigres clusters without cert-manager continue to work unchanged.

Closes MUL-341

Signed-off-by: Haritabh Gupta <20576107+haritabh17@users.noreply.github.com>
@haritabh17 haritabh17 force-pushed the haritabh/mul-341-multigateway-tls branch from 42f7c15 to c19f170 Compare April 13, 2026 19:24
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

Signed-off-by: Haritabh Gupta <20576107+haritabh17@users.noreply.github.com>
@haritabh17 haritabh17 force-pushed the haritabh/mul-341-multigateway-tls branch from c47f44a to b383d2c Compare April 13, 2026 21:29
@github-actions

This comment has been minimized.

@haritabh17 haritabh17 marked this pull request as ready for review April 13, 2026 21:34
Copy link
Copy Markdown
Contributor

@Verolop Verolop left a comment

Choose a reason for hiding this comment

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

nice work!
Before merging, we need to have one clear owner for certificate lifecycle. Right now the config comes from one scope and the resource is managed from another, which creates ambiguity during updates and deletion paths.

Comment thread pkg/resource-handler/controller/cell/certificate.go Outdated
Comment thread pkg/resource-handler/controller/cell/certificate.go Outdated
Comment thread pkg/resource-handler/controller/cell/certificate_test.go Outdated
haritabh17 added a commit that referenced this pull request Apr 14, 2026
Move the cert-manager Certificate lifecycle from the cell controller to
the MultigresCluster controller so there is exactly one reconciler and
one ownerRef per certificate. Previously, every cell reconciled the same
Certificate, causing ownerRef flapping between cells.

The MultigresCluster now owns the Certificate, which means:
- No multi-owner conflict when multiple cells share the same CN
- Cleanup is deterministic: unsetting certCommonName deletes the
  Certificate (only if owned by this cluster)
- Kubernetes GC properly cascades on cluster deletion

Addresses review feedback on PR #462.

Signed-off-by: Haritabh Gupta <20576107+haritabh17@users.noreply.github.com>
@github-actions

This comment has been minimized.

Move the cert-manager Certificate lifecycle from the cell controller to
the MultigresCluster controller so there is exactly one reconciler and
one ownerRef per certificate. Previously, every cell reconciled the same
Certificate, causing ownerRef flapping between cells.

The MultigresCluster now owns the Certificate, which means:
- No multi-owner conflict when multiple cells share the same CN
- Cleanup is deterministic: unsetting certCommonName deletes the
  Certificate (only if owned by this cluster)
- Kubernetes GC properly cascades on cluster deletion

Addresses review feedback on PR #462.

Signed-off-by: Haritabh Gupta <20576107+haritabh17@users.noreply.github.com>
@haritabh17 haritabh17 force-pushed the haritabh/mul-341-multigateway-tls branch from e158fa2 to 96f7459 Compare April 14, 2026 18:45
@github-actions

This comment has been minimized.

…urrent map panic

The fake client auto-registers unknown unstructured GVKs at runtime,
which mutates the scheme's internal map. When parallel integration tests
share a scheme and reconcileCertificate calls List(), this causes a
concurrent map write panic. Pre-registering the cert-manager Certificate
GVK in setupScheme() prevents the runtime mutation.

Signed-off-by: Haritabh Gupta <20576107+haritabh17@users.noreply.github.com>
@github-actions

This comment has been minimized.

The RBAC marker was in the controller file which controller-gen doesn't
scan (it only scans ./api/... and ./pkg/webhook/...). Moved the marker
to multigrescluster_types.go so it's picked up, and added the delete
verb needed by reconcileCertificate cleanup.

Signed-off-by: Haritabh Gupta <20576107+haritabh17@users.noreply.github.com>
@github-actions

This comment has been minimized.

) error {
logger := log.FromContext(ctx)

if cluster.Spec.CertCommonName != "" {
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.

one last thing: on certCommonName changes, reconcile should also remove the cert from the previous CN. Right now, since the cert name is the CN, the change creates a second Certificate instead of updating the existing one. The old cert is still owned by the same MultigresCluster, and ownerRef GC won’t remove it unless the cluster itself is deleted, so it can stick around and still target secretName: generated-certs.

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.

Ack, extracted deleteOwnedCertificates(ctx, cluster, keepName) which runs before the apply step on every reconcile.

When certCommonName changes, the old Certificate (named after the
previous CN) was left behind, still targeting the same generated-certs
secret. Now reconcileCertificate deletes any Certificates owned by this
cluster whose name doesn't match the current CN before applying the new
one. This covers both CN changes and CN removal.

Signed-off-by: Haritabh Gupta <20576107+haritabh17@users.noreply.github.com>
@github-actions

This comment has been minimized.

- B1: Move CertSecretName to api/v1alpha1 as a single shared constant
  so the Certificate secretName and Deployment volume can't silently
  diverge.
- B2: Replace brittle string-matching in isNoMatchError with
  errors.As(err, &meta.NoKindMatchError{}).
- B3: Check fc.Get errors with t.Fatal in the two-clusters test instead
  of swallowing them (prevents nil-slice panic).
- N1: Update CertCommonName godoc in both CRD types to say "cluster
  controller" instead of "cell controller".

Signed-off-by: Haritabh Gupta <20576107+haritabh17@users.noreply.github.com>
@github-actions
Copy link
Copy Markdown

🔬 Go Test Coverage Report

Summary

Coverage Type Result
Threshold 70%
Previous Test Coverage 76.7%
New Test Coverage 76.8%

Status

✅ PASS

Detail

Show New Coverage
github.com/multigres/multigres-operator/api/v1alpha1/cell_types.go:184:								init					100.0%
github.com/multigres/multigres-operator/api/v1alpha1/celltemplate_types.go:68:							init					100.0%
github.com/multigres/multigres-operator/api/v1alpha1/common_types.go:372:							MergePVCDeletionPolicy			0.0%
github.com/multigres/multigres-operator/api/v1alpha1/common_types.go:404:							MergeBackupConfig			83.3%
github.com/multigres/multigres-operator/api/v1alpha1/coretemplate_types.go:68:							init					100.0%
github.com/multigres/multigres-operator/api/v1alpha1/multigrescluster_types.go:630:						init					100.0%
github.com/multigres/multigres-operator/api/v1alpha1/observability_helpers.go:44:						BuildOTELEnvVars			88.6%
github.com/multigres/multigres-operator/api/v1alpha1/observability_helpers.go:113:						BuildOTELSamplingVolume			0.0%
github.com/multigres/multigres-operator/api/v1alpha1/observability_helpers.go:138:						envOrCRD				100.0%
github.com/multigres/multigres-operator/api/v1alpha1/shard_types.go:307:							init					100.0%
github.com/multigres/multigres-operator/api/v1alpha1/shardtemplate_types.go:82:							init					100.0%
github.com/multigres/multigres-operator/api/v1alpha1/tablegroup_types.go:189:							init					100.0%
github.com/multigres/multigres-operator/api/v1alpha1/toposerver_types.go:245:							init					100.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:14:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:19:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:29:						DeepCopyInto				76.9%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:49:						DeepCopy				80.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:59:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:68:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:78:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:86:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:101:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:111:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:121:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:131:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:147:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:157:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:171:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:181:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:189:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:204:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:214:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:244:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:254:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:266:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:276:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:281:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:291:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:299:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:309:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:317:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:331:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:341:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:349:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:369:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:379:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:389:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:399:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:404:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:414:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:420:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:430:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:438:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:448:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:456:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:470:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:480:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:488:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:508:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:518:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:535:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:545:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:550:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:560:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:577:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:587:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:604:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:614:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:631:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:641:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:651:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:661:						DeepCopyInto				100.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:667:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:677:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:682:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:692:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:697:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:707:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:727:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:737:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:752:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:762:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:772:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:782:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:792:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:802:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:818:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:828:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:837:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:847:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:855:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:869:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:879:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:887:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:954:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:964:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1005:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1015:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1025:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1035:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1040:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1050:						DeepCopyInto				100.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1055:						DeepCopy				80.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1065:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1077:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1087:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1127:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1137:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1142:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1152:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1172:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1182:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1187:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1197:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1202:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1212:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1221:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1231:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1239:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1259:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1269:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1279:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1289:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1312:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1322:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1336:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1346:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1354:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1376:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1386:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1414:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1424:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1488:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1498:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1526:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1536:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1544:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1554:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1562:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1576:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1586:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1594:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1621:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1631:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1661:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1671:						DeepCopyInto				40.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1681:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1691:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1700:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1710:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1718:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1740:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1750:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1764:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1774:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1782:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1835:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1845:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1857:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1867:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1872:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1882:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1891:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1901:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1909:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1923:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1933:						DeepCopyObject				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1941:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1956:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1966:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1978:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1988:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1998:						DeepCopy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2008:						DeepCopyInto				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2013:						DeepCopy				0.0%
github.com/multigres/multigres-operator/cmd/multigres-operator/main.go:76:							init					0.0%
github.com/multigres/multigres-operator/cmd/multigres-operator/main.go:82:							main					0.0%
github.com/multigres/multigres-operator/cmd/multigres-operator/main.go:493:							certsExist				0.0%
github.com/multigres/multigres-operator/pkg/cert/generator.go:51:								WithExtKeyUsages			100.0%
github.com/multigres/multigres-operator/pkg/cert/generator.go:58:								WithOrganization			100.0%
github.com/multigres/multigres-operator/pkg/cert/generator.go:72:								GenerateCA				100.0%
github.com/multigres/multigres-operator/pkg/cert/generator.go:134:								GenerateServerCert			100.0%
github.com/multigres/multigres-operator/pkg/cert/generator.go:205:								ParseCA					100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:94:									componentName				100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:101:								organization				100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:108:								extKeyUsages				100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:125:								NewManager				100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:136:								Bootstrap				100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:151:								Start					100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:179:								reconcilePKI				100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:203:								ensureCA				100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:283:								ensureServerCert			100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:403:								waitForProjection			100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:428:								setOwner				100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:443:								emitEvent				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_cell.go:14:			BuildCell				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_global.go:22:			BuildGlobalTopoServer			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_global.go:83:			BuildMultiAdminDeployment		100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_global.go:200:			BuildMultiAdminService			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_global.go:241:			BuildMultiAdminWebDeployment		100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_global.go:352:			BuildMultiAdminWebService		100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_global.go:410:			BuildMultiGatewayGlobalService		100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_tablegroup.go:14:		BuildTableGroup				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_tablegroup.go:82:		mergeDurabilityPolicy			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_tablegroup.go:92:		buildCellTopologyLabels			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:44:			buildCertificate			91.7%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:94:			reconcileCertificate			70.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:135:			deleteOwnedCertificates			88.2%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:183:			isOwnedBy				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:197:			isNoMatchError				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:52:	Reconcile				96.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:316:	handleDeletion				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:366:	SetupWithManager			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:402:	enqueueRequestsFromTemplate		100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:429:	templateKindFromObject			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:445:	referencesTemplate			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:462:	collectResolvedTemplates		100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:526:	collectTrackingLabels			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_cells.go:17:			reconcileCells				85.4%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_databases.go:17:		reconcileDatabases			87.5%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_global.go:25:			reconcileGlobalComponents		100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_global.go:43:			reconcileGlobalTopoServer		81.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_global.go:104:		reconcileMultiAdmin			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_global.go:161:		globalTopoRef				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_global.go:198:		reconcileMultiAdminWeb			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_topology.go:37:		reconcileTopology			70.5%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_topology.go:129:		openTopoStore				66.7%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_topology.go:142:		isPruningEnabled			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_topology.go:153:		handleTopoUnavailable			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/status.go:22:				extractExternalEndpoint			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/status.go:42:				computeGatewayCondition			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/status.go:79:				computeAdminWebCondition		100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/status.go:113:				updateStatus				98.3%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/builders.go:14:				BuildShard				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/builders.go:74:				calculateTotalReplicas			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/tablegroup_controller.go:37:			Reconcile				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/tablegroup_controller.go:336:			handlePendingDeletion			96.4%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/tablegroup_controller.go:415:			SetupWithManager			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/backuphealth/backuphealth.go:48:					Evaluate				92.9%
github.com/multigres/multigres-operator/pkg/data-handler/backuphealth/backuphealth.go:82:					EvaluateBackups				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/backuphealth/backuphealth.go:147:					ParseTime				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/backuphealth/backuphealth.go:160:					Apply					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/drain/drain.go:37:							ExecuteDrainStateMachine		100.0%
github.com/multigres/multigres-operator/pkg/data-handler/drain/drain.go:257:							UpdateDrainState			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/drain/drain.go:276:							IsPrimaryTerminatingOrMissing		100.0%
github.com/multigres/multigres-operator/pkg/data-handler/drain/drain.go:300:							IsPrimaryDraining			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/drain/drain.go:327:							IsPrimaryNotReady			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/cell.go:17:							RegisterCell				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/cell.go:63:							UnregisterCell				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/database.go:18:							RegisterDatabase			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/database.go:76:							UnregisterDatabase			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/database.go:117:							GetBackupLocation			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/database.go:153:							GetDurabilityPolicy			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:28:							GetPoolerStatus				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:68:							matchPoolerToPod			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:81:							FindPrimaryPooler			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:111:							CollectCells				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:127:							ShardFilter				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:138:							PodMatchesPooler			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:147:							ForceUnregisterPod			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:178:							PrunePoolers				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:221:							poolerMatchesAnyActivePod		100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/store.go:18:							NewStoreFromShard			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/store.go:37:							NewStoreFromCell			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/store.go:57:							NewStoreFromRef				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/store.go:76:							IsTopoUnavailable			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/topology.go:21:							RegisterDatabaseFromSpec		100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/topology.go:111:							RegisterCellFromSpec			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/topology.go:152:							PruneDatabases				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/topology.go:199:							PruneCells				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/topology.go:245:							isNodeExists				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/topology.go:253:							isNoNode				100.0%
github.com/multigres/multigres-operator/pkg/monitoring/metrics.go:112:								init					100.0%
github.com/multigres/multigres-operator/pkg/monitoring/metrics.go:131:								Collectors				100.0%
github.com/multigres/multigres-operator/pkg/monitoring/recorder.go:7:								SetClusterInfo				100.0%
github.com/multigres/multigres-operator/pkg/monitoring/recorder.go:16:								SetClusterTopology			100.0%
github.com/multigres/multigres-operator/pkg/monitoring/recorder.go:22:								SetCellGatewayReplicas			100.0%
github.com/multigres/multigres-operator/pkg/monitoring/recorder.go:28:								SetShardPoolReplicas			100.0%
github.com/multigres/multigres-operator/pkg/monitoring/recorder.go:36:								SetPoolPodsDrifted			100.0%
github.com/multigres/multigres-operator/pkg/monitoring/recorder.go:41:								SetTopoServerReplicas			100.0%
github.com/multigres/multigres-operator/pkg/monitoring/recorder.go:47:								RecordWebhookRequest			100.0%
github.com/multigres/multigres-operator/pkg/monitoring/recorder.go:57:								SetLastBackupAge			100.0%
github.com/multigres/multigres-operator/pkg/monitoring/recorder.go:62:								IncrementDrainOperations		100.0%
github.com/multigres/multigres-operator/pkg/monitoring/recorder.go:67:								SetRollingUpdateInProgress		100.0%
github.com/multigres/multigres-operator/pkg/monitoring/tracing.go:50:								InitTracing				100.0%
github.com/multigres/multigres-operator/pkg/monitoring/tracing.go:92:								StartReconcileSpan			100.0%
github.com/multigres/multigres-operator/pkg/monitoring/tracing.go:108:								StartChildSpan				100.0%
github.com/multigres/multigres-operator/pkg/monitoring/tracing.go:114:								RecordSpanError				100.0%
github.com/multigres/multigres-operator/pkg/monitoring/tracing.go:125:								InjectTraceContext			100.0%
github.com/multigres/multigres-operator/pkg/monitoring/tracing.go:154:								ExtractTraceContext			100.0%
github.com/multigres/multigres-operator/pkg/monitoring/tracing.go:187:								EnrichLoggerWithTrace			100.0%
github.com/multigres/multigres-operator/pkg/resolver/cell.go:15:								ResolveCell				100.0%
github.com/multigres/multigres-operator/pkg/resolver/cell.go:47:								ResolveCellTemplate			100.0%
github.com/multigres/multigres-operator/pkg/resolver/cell.go:87:								mergeCellConfig				100.0%
github.com/multigres/multigres-operator/pkg/resolver/cluster.go:15:								PopulateClusterDefaults			100.0%
github.com/multigres/multigres-operator/pkg/resolver/cluster.go:179:								ResolveGlobalTopo			100.0%
github.com/multigres/multigres-operator/pkg/resolver/cluster.go:242:								ResolveMultiAdmin			100.0%
github.com/multigres/multigres-operator/pkg/resolver/cluster.go:280:								ResolveMultiAdminWeb			100.0%
github.com/multigres/multigres-operator/pkg/resolver/cluster.go:318:								ResolveCoreTemplate			100.0%
github.com/multigres/multigres-operator/pkg/resolver/cluster.go:354:								mergeEtcdSpec				100.0%
github.com/multigres/multigres-operator/pkg/resolver/defaults.go:75:								DefaultResourcesAdmin			100.0%
github.com/multigres/multigres-operator/pkg/resolver/defaults.go:88:								DefaultResourcesEtcd			100.0%
github.com/multigres/multigres-operator/pkg/resolver/defaults.go:101:								DefaultResourcesGateway			100.0%
github.com/multigres/multigres-operator/pkg/resolver/defaults.go:114:								DefaultResourcesOrch			100.0%
github.com/multigres/multigres-operator/pkg/resolver/defaults.go:127:								DefaultResourcesPostgres		100.0%
github.com/multigres/multigres-operator/pkg/resolver/defaults.go:140:								DefaultResourcesPooler			100.0%
github.com/multigres/multigres-operator/pkg/resolver/defaults.go:153:								DefaultResourcesAdminWeb		100.0%
github.com/multigres/multigres-operator/pkg/resolver/resolver.go:21:								NewResolver				100.0%
github.com/multigres/multigres-operator/pkg/resolver/resolver.go:38:								mergeStatelessSpec			100.0%
github.com/multigres/multigres-operator/pkg/resolver/resolver.go:70:								mergePodPlacementSpec			100.0%
github.com/multigres/multigres-operator/pkg/resolver/resolver.go:83:								isResourcesZero				100.0%
github.com/multigres/multigres-operator/pkg/resolver/resolver.go:92:								defaultEtcdSpec				100.0%
github.com/multigres/multigres-operator/pkg/resolver/resolver.go:114:								defaultExternalTopoSpec			100.0%
github.com/multigres/multigres-operator/pkg/resolver/resolver.go:127:								defaultStatelessSpec			100.0%
github.com/multigres/multigres-operator/pkg/resolver/shard.go:17:								ResolveShard				100.0%
github.com/multigres/multigres-operator/pkg/resolver/shard.go:87:								ResolveShardTemplate			100.0%
github.com/multigres/multigres-operator/pkg/resolver/shard.go:122:								mergeShardConfig			100.0%
github.com/multigres/multigres-operator/pkg/resolver/shard.go:213:								mergeMultiOrchSpec			100.0%
github.com/multigres/multigres-operator/pkg/resolver/shard.go:224:								mergePoolSpec				96.2%
github.com/multigres/multigres-operator/pkg/resolver/shard.go:269:								defaultPoolSpec				100.0%
github.com/multigres/multigres-operator/pkg/resolver/shard.go:289:								defaultBackupConfig			100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:29:								ValidateCoreTemplateReference		100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:52:								CoreTemplateExists			100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:72:								ValidateCellTemplateReference		100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:95:								CellTemplateExists			100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:115:								ValidateShardTemplateReference		100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:138:								ShardTemplateExists			100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:164:								ValidateClusterIntegrity		100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:237:								ValidateClusterLogic			99.2%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:611:								hasDefaultStorageClass			100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:628:								getEffectiveEtcdReplicas		100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:649:								ValidatePoolName			100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:671:								validateResourceRequirements		100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:692:								validateCellTopology			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:43:				Reconcile				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:171:				reconcileMultiGatewayDeployment		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:205:				reconcileMultiGatewayService		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:239:				updateStatus				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:337:				setConditions				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:387:				SetupWithManager			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/multigateway.go:44:				BuildMultiGatewayDeploymentName		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/multigateway.go:56:				BuildMultiGatewayServiceName		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/multigateway.go:67:				BuildMultiGatewayDeployment		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/multigateway.go:230:				BuildMultiGatewayService		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/multigateway.go:287:				buildCellNodeSelector			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/placement.go:9:					tolerationsFromPlacement		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/configmap.go:25:					BuildPgHbaConfigMap			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:77:					PgHbaConfigMapName			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:82:					PostgresPasswordSecretName		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:87:					buildSocketDirVolume			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:97:					buildPgHbaVolume			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:118:				buildPgctldContainer			95.5%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:256:				BuildPoolServiceID			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:263:				buildMultiPoolerSidecar			94.4%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:382:				buildMultiOrchContainer			90.9%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:452:				buildPostgresConfigVolume		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:468:				buildPoolVolumes			87.5%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:491:				buildSharedBackupVolume			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:533:				buildPgBackRestCertVolume		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:606:				pgPasswordEnvVar			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:622:				s3EnvVars				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/drain_helpers.go:19:				resolvePodRole				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/drain_helpers.go:35:				countDrainedPods			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/drain_helpers.go:47:				clearDrainAnnotations			0.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/drain_helpers.go:60:				initiateDrain				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/labels.go:10:					buildPoolLabelsWithCell			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/multiorch.go:25:					BuildMultiOrchDeployment		90.9%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/multiorch.go:83:					BuildMultiOrchService			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/multiorch.go:114:					buildMultiOrchNameWithCell		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/multiorch.go:134:					buildMultiOrchLabelsWithCell		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/placement.go:9:					tolerationsFromPlacement		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pdb.go:19:					BuildPoolPodDisruptionBudget		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:34:					BuildPoolPodName			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:52:					BuildPoolPod				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:125:					buildPoolPodSecurityContext		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:139:					buildContainerSecurityContext		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:152:					buildHeadlessServiceName		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:175:					ComputeSpecHash				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:228:					hashContainers				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:265:					sortedKeys				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pvc.go:23:					BuildPoolDataPVCName			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pvc.go:45:					BuildPoolDataPVC			95.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pvc.go:103:					BuildSharedBackupPVCName		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pvc.go:120:					BuildSharedBackupPVC			96.4%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_service.go:23:				BuildPoolHeadlessService		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_service.go:58:				buildPoolHeadlessServiceName		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/ports.go:30:					buildMultiPoolerContainerPorts		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/ports.go:52:					buildPoolHeadlessServicePorts		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/ports.go:77:					buildMultiOrchContainerPorts		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/ports.go:94:					buildMultiOrchServicePorts		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:25:			reconcileDataPlane			45.1%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:127:			reconcilePodRoles			61.5%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:189:			reconcileDrainState			45.8%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:250:			isDrainStale				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:302:			topoStore				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:313:			reconcilePoolerPrune			75.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:357:			hasPrimary				0.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:369:			isPoolerPruningEnabled			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_deletion.go:33:				handleDeletion				90.9%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_deletion.go:109:			handlePendingDeletion			75.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_multiorch.go:15:			reconcileMultiOrchDeployment		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_multiorch.go:50:			reconcileMultiOrchService		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:27:			reconcilePoolPods			97.2%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:136:			createMissingResources			83.3%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:289:			isPodReady				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:306:			isPoolHealthy				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:330:			handleExternalDeletion			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:371:			handleScaleDown				97.8%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:493:			handleRollingUpdates			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:606:			selectPodToDrain			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:663:			syncDrainedLabels			55.6%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:696:			cleanupDrainedPod			95.5%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:766:			deletePodPVC				88.9%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:805:			podNeedsUpdate				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:838:			expandPVCIfNeeded			95.5%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:888:			pvcNeedsFilesystemResize		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:903:			resolvePodIndex				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:20:			reconcilePgHbaConfigMap			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:46:			reconcilePostgresPasswordSecret		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:74:			reconcilePgBackRestCerts		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:127:			reconcileSharedBackupPVC		91.7%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:176:			reconcilePoolPDB			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:203:			reconcilePoolHeadlessService		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/secret.go:23:					BuildPostgresPasswordSecret		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:55:				Reconcile				83.9%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:356:				reconcilePool				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:406:				getMultiOrchCells			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:442:				getPoolCells				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:462:				ShouldDeletePVCOnShardRemoval		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:476:				ShouldDeleteShardLevelPVCOnRemoval	100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:485:				reconcilePVCOwnerRefs			55.3%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:566:				SetupWithManager			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:595:				computePostgresConfigHash		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:620:				enqueueFromPostgresConfigMap		87.5%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/status.go:23:					updateStatus				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/status.go:141:					updatePoolsStatus			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/status.go:235:					updateMultiOrchStatus			96.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/status.go:294:					cellSetToSlice				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/status.go:304:					setConditions				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/storage_class_guard.go:31:			Error					0.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/storage_class_guard.go:35:			isMissingStorageClassDependency		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/storage_class_guard.go:40:			backupFilesystemStorageClassName	80.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/storage_class_guard.go:51:			validateStorageClassExists		77.8%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/storage_class_guard.go:70:			validateBackupStorageClassDependency	76.9%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/storage_class_guard.go:113:			validatePoolStorageClassDependencies	90.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/storage_class_guard.go:170:			setStorageClassCondition		84.6%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/storage/pvc.go:17:					BuildPVCTemplate			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/container_env.go:13:				buildContainerEnv			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/container_env.go:41:				buildPodIdentityEnv			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/container_env.go:66:				buildEtcdConfigEnv			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/container_env.go:120:			buildEtcdClusterPeerList		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/ports.go:23:					buildContainerPorts			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/ports.go:56:					buildHeadlessServicePorts		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/ports.go:86:					buildClientServicePorts			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/service.go:17:				BuildHeadlessService			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/service.go:53:				BuildClientService			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/statefulset.go:38:				BuildStatefulSet			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/statefulset.go:149:				buildVolumeClaimTemplates		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/storage_class_guard.go:33:			Error					0.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/storage_class_guard.go:38:			isMissingStorageClassDependency		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/storage_class_guard.go:44:			validateStorageClassExists		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/storage_class_guard.go:61:			validateEtcdStorageClassDependency	93.3%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/storage_class_guard.go:114:			setStorageClassCondition		84.6%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/toposerver_controller.go:43:			Reconcile				96.7%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/toposerver_controller.go:176:		reconcileStatefulSet			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/toposerver_controller.go:210:		reconcileHeadlessService		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/toposerver_controller.go:244:		reconcileClientService			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/toposerver_controller.go:278:		updateStatus				97.1%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/toposerver_controller.go:393:		setConditions				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/toposerver_controller.go:424:		SetupWithManager			100.0%
github.com/multigres/multigres-operator/pkg/testutil/compare.go:17:								IgnoreMetaRuntimeFields			100.0%
github.com/multigres/multigres-operator/pkg/testutil/compare.go:55:								IgnoreServiceRuntimeFields		100.0%
github.com/multigres/multigres-operator/pkg/testutil/compare.go:75:								IgnoreStatefulSetRuntimeFields		100.0%
github.com/multigres/multigres-operator/pkg/testutil/compare.go:97:								IgnoreDeploymentRuntimeFields		100.0%
github.com/multigres/multigres-operator/pkg/testutil/compare.go:116:								IgnorePodSpecDefaults			100.0%
github.com/multigres/multigres-operator/pkg/testutil/compare.go:148:								IgnorePodSpecDefaultsExceptPullPolicy	100.0%
github.com/multigres/multigres-operator/pkg/testutil/compare.go:179:								IgnoreStatefulSetSpecDefaults		100.0%
github.com/multigres/multigres-operator/pkg/testutil/compare.go:191:								IgnoreDeploymentSpecDefaults		100.0%
github.com/multigres/multigres-operator/pkg/testutil/compare.go:204:								IgnoreProbeDefaults			100.0%
github.com/multigres/multigres-operator/pkg/testutil/compare.go:219:								filterByFieldName			100.0%
github.com/multigres/multigres-operator/pkg/testutil/compare.go:235:								IgnoreObjectMetaCompletely		100.0%
github.com/multigres/multigres-operator/pkg/testutil/compare.go:243:								IgnoreStatus				100.0%
github.com/multigres/multigres-operator/pkg/testutil/compare.go:249:								IgnorePVCRuntimeFields			100.0%
github.com/multigres/multigres-operator/pkg/testutil/compare.go:258:								CompareOptions				100.0%
github.com/multigres/multigres-operator/pkg/testutil/compare.go:267:								CompareSpecOnly				100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:29:								WithKubeconfig				100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:36:								WithCRDPaths				100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:57:								AddUser					100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:62:								getKubeconfigFromUserAdder		100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:87:								SetUpEnvtest				100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:148:								SetUpClient				100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:175:								SetUpManager				100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:206:								StartManager				100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:216:								startManager				100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:254:								SetUpEnvtestManager			100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:270:								createEnvtestEnvironment		100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:285:								startEnvtest				100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:300:								cleanEnvtest				100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:317:								createEnvtestDir			100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:331:								writeKubeconfigFile			100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:341:								generateKubeconfigFile			100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:51:								NewFakeClientWithFailures		100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:61:								Get					100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:75:								List					100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:88:								Create					100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:101:							Update					100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:114:							Patch					100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:128:							Delete					100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:141:							DeleteAllOf				100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:154:							Status					100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:166:							Update					100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:179:							Patch					100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:196:							FailOnObjectName			100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:210:							FailOnKeyName				100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:220:							FailOnNamespacedKeyName			100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:230:							FailOnNamespace				100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:244:							AlwaysFail				100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:252:							FailKeyAfterNCalls			100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:265:							FailObjAfterNCalls			100.0%
github.com/multigres/multigres-operator/pkg/testutil/fake_client.go:278:							FailObjListAfterNCalls			100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:34:							Error					100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:84:							WithExtraResource			100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:92:							WithTimeout				100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:100:							WithCmpOpts				100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:108:							NewResourceWatcher			100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:146:							SetTimeout				100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:152:							ResetTimeout				100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:159:							SetCmpOpts				100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:165:							ResetCmpOpts				100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:175:							Events					100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:188:							EventCh					100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:198:							ForKind					100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:218:							ForName					100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:234:							Count					100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:243:							subscribe				100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:257:							unsubscribe				100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher.go:278:							extractKind				100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher_cache.go:16:						findLatestEvent				100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher_cache.go:34:						findLatestEventFor			100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher_cache.go:57:						checkLatestEventMatches			100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher_deletion.go:22:						Obj					100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher_deletion.go:51:						WaitForDeletion				100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher_deletion.go:70:						waitForSingleDeletion			100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher_listener.go:19:						collectEvents				100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher_listener.go:55:						sendEvent				100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher_match.go:46:						WaitForMatch				100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher_match.go:88:						waitForSingleMatch			100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher_match.go:178:						waitForEvent				100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher_match.go:213:						WaitForEventType			100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher_match.go:261:						addEventHandlerToInformer		100.0%
github.com/multigres/multigres-operator/pkg/testutil/resource_watcher_match.go:285:						watchResource				100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:152:							BuildStandardLabels			100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:163:							AddCellLabel				100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:169:							AddClusterLabel				100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:175:							AddShardLabel				100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:184:							AddDatabaseLabel			100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:193:							AddTableGroupLabel			100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:202:							AddPoolLabel				100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:211:							AddZoneLabel				100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:220:							AddRegionLabel				100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:247:							GetSelectorLabels			100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:261:							MergeLabels				100.0%
github.com/multigres/multigres-operator/pkg/util/name/name.go:103:								Hash					100.0%
github.com/multigres/multigres-operator/pkg/util/name/name.go:146:								JoinWithConstraints			100.0%
github.com/multigres/multigres-operator/pkg/util/name/name.go:209:								isLowercaseLetter			100.0%
github.com/multigres/multigres-operator/pkg/util/name/name.go:213:								isUppercaseLetter			100.0%
github.com/multigres/multigres-operator/pkg/util/name/name.go:217:								isDigit					100.0%
github.com/multigres/multigres-operator/pkg/util/name/name.go:221:								isLowercaseAlphanumeric			100.0%
github.com/multigres/multigres-operator/pkg/util/pvc/retention.go:12:								BuildRetentionPolicy			100.0%
github.com/multigres/multigres-operator/pkg/util/status/conditions.go:9:							SetCondition				100.0%
github.com/multigres/multigres-operator/pkg/util/status/conditions.go:25:							IsConditionTrue				100.0%
github.com/multigres/multigres-operator/pkg/util/status/phase.go:30:								ComputePhase				100.0%
github.com/multigres/multigres-operator/pkg/util/status/phase.go:51:								IsCrashLooping				100.0%
github.com/multigres/multigres-operator/pkg/util/status/phase.go:56:								isContainerCrashLooping			100.0%
github.com/multigres/multigres-operator/pkg/util/status/phase.go:68:								AnyCrashLooping				100.0%
github.com/multigres/multigres-operator/pkg/util/status/phase.go:98:								ComputeWorkloadPhase			100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/defaulter.go:27:							NewMultigresClusterDefaulter		100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/defaulter.go:34:							Default					100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:36:							NewMultigresClusterValidator		100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:41:							ValidateCreate				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:49:							ValidateUpdate				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:68:							ValidateDelete				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:75:							validate				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:127:							validateTemplatesExist			100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:137:							validateLogic				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:148:							validateNoStorageShrink			90.5%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:191:							collectPoolStorageSizes			100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:219:							validateEtcdReplicasImmutable		100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:255:							effectiveEtcdReplicas			100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:284:							NewTemplateValidator			100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:289:							ValidateCreate				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:297:							ValidateUpdate				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:306:							validatePoolNames			100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:323:							ValidateDelete				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:368:							isTemplateInUse				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:432:							NewChildResourceValidator		100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:439:							ValidateCreate				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:447:							ValidateUpdate				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:455:							ValidateDelete				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:462:							validate				100.0%
github.com/multigres/multigres-operator/pkg/webhook/pki.go:44:									PatchWebhookCABundle			100.0%
github.com/multigres/multigres-operator/pkg/webhook/pki.go:51:									patchMutatingWebhook			100.0%
github.com/multigres/multigres-operator/pkg/webhook/pki.go:97:									patchValidatingWebhook			100.0%
github.com/multigres/multigres-operator/pkg/webhook/pki.go:147:									HasCertAnnotation			100.0%
github.com/multigres/multigres-operator/pkg/webhook/pki.go:173:									FindOperatorDeployment			100.0%
github.com/multigres/multigres-operator/pkg/webhook/setup.go:21:								Setup					100.0%
total:																(statements)				76.8%

@haritabh17 haritabh17 requested a review from Verolop April 15, 2026 12:50
Copy link
Copy Markdown
Contributor

@Verolop Verolop left a comment

Choose a reason for hiding this comment

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

LGTM! ✨

@haritabh17 haritabh17 merged commit 9fb42f9 into main Apr 15, 2026
5 checks passed
@haritabh17 haritabh17 deleted the haritabh/mul-341-multigateway-tls branch April 15, 2026 16:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants