Skip to content

fix(shard): dial multipoolers with mTLS when internalTLS is enabled - #626

Merged
niconosenzo merged 2 commits into
multigres:mainfrom
niconosenzo:multipooler-mTLS-dial
Sep 7, 2026
Merged

fix(shard): dial multipoolers with mTLS when internalTLS is enabled#626
niconosenzo merged 2 commits into
multigres:mainfrom
niconosenzo:multipooler-mTLS-dial

Conversation

@niconosenzo

@niconosenzo niconosenzo commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Summary

Fix operator-to-multipooler RPCs for clusters with spec.internalTLS.enabled: true.

The operator now uses a cluster-specific mTLS client when calling Status, GetBackups, and ReloadConfig. Clusters without internal TLS continue using the existing insecure client.

Root cause

InternalTLS clusters configure multipooler as an mTLS gRPC server. However, the shard controller continued using a client configured with insecure.NewCredentials().

Multipooler therefore rejected every operator RPC with a connection reset. This prevented the operator from observing pooler posture and backup state or applying reload-safe configuration changes. Posture remained unknown, PostureConsistent became Unknown, and affected shards remained Progressing.

The posture debounce remains useful for transient observation failures, but it cannot recover from a permanently incompatible transport.

Solution

The MultigresCluster certificate controller now creates a dedicated operator client certificate for every internal-TLS cluster.

The certificate:

  • Is owned by the MultigresCluster and follows its lifecycle.
  • Uses the same resolved issuer as the cluster's server certificates.
  • Is issued for client authentication only.
  • Is stored in the cluster namespace.

The new poolerclient.Resolver:

  • Returns the existing insecure client when internal TLS is disabled.
  • Derives the owning cluster from the shard labels.
  • Reads the cluster-owned operator certificate Secret directly.
  • Caches one TLS MultipoolerClient per cluster.
  • Verifies the exact server identity: multipooler.<cluster>.<namespace>.multigres.internal.
  • Uses standard certificate-chain, hostname, and server-auth verification.
  • Re-reads the Secret periodically and rebuilds the client only when its ResourceVersion changes.
  • Keeps the last working client if a refresh encounters a transient API failure or temporarily malformed rotated Secret.
  • Retains replaced clients briefly so in-flight reconciliations can complete.
  • Allows concurrent reconciliations to continue using the current client while a refresh is in progress.

This removes the need for runtime Certificate creation, issuer-specific certificate names, a separate issuer flag, and a MultigresCluster API lookup during every resolution.

Failure behavior

If the client certificate has not been issued yet, the shard controller:

  • Skips multipooler RPC phases.
  • Publishes topology-derived pod roles.
  • Sets PostureConsistent=Unknown with reason PoolerClientUnavailable.
  • Keeps the shard in Progressing.
  • Emits a PoolerClientUnavailable warning event.
  • Requeues after 10 seconds without controller error backoff.

The existing Healthy/no-primary safety guard remains unchanged.

Security

TLS verification is bound to the shard's exact cluster and namespace. A certificate for another cluster, even when signed by the same issuer, is rejected.

The operator client certificate is cluster-owned, so deletion or certificate reconciliation cleans it up together with the other cluster certificates.

@github-actions

This comment has been minimized.

@niconosenzo
niconosenzo force-pushed the multipooler-mTLS-dial branch from 99e6b3c to fe00b88 Compare September 4, 2026 12:04
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@niconosenzo
niconosenzo force-pushed the multipooler-mTLS-dial branch from e9d660d to dc410aa Compare September 4, 2026 14:39
@github-actions

This comment has been minimized.

@niconosenzo
niconosenzo force-pushed the multipooler-mTLS-dial branch from dc410aa to 0d12ab8 Compare September 4, 2026 16:28
@github-actions

This comment has been minimized.

@niconosenzo

Copy link
Copy Markdown
Contributor Author

/e2e

@github-actions

This comment has been minimized.

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

E2E tests successView run

@github-actions

This comment has been minimized.

@niconosenzo
niconosenzo marked this pull request as ready for review September 7, 2026 08:09
@niconosenzo
niconosenzo requested a review from a team as a code owner September 7, 2026 08:09
@niconosenzo
niconosenzo force-pushed the multipooler-mTLS-dial branch from d541b44 to 629943b Compare September 7, 2026 09:29
@github-actions

This comment has been minimized.

@niconosenzo

Copy link
Copy Markdown
Contributor Author

/e2e

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

E2E tests successView run

@niconosenzo
niconosenzo force-pushed the multipooler-mTLS-dial branch 4 times, most recently from f026f17 to cb626f6 Compare September 7, 2026 10:45
@github-actions

This comment has been minimized.

@niconosenzo

Copy link
Copy Markdown
Contributor Author

/e2e

@niconosenzo
niconosenzo force-pushed the multipooler-mTLS-dial branch from cb626f6 to 6473597 Compare September 7, 2026 10:49
@github-actions

This comment has been minimized.

@niconosenzo

Copy link
Copy Markdown
Contributor Author

/e2e

@github-actions

This comment has been minimized.

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

E2E tests failureView run

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

E2E tests failureView run

Clusters with spec.internalTLS.enabled run multipooler with gRPC mTLS,
but the operator continued dialing with insecure credentials. Status,
GetBackups, and ReloadConfig calls were therefore rejected, leaving
posture UNKNOWN and internal-TLS shards permanently Progressing.

Have the MultigresCluster controller issue a cluster-owned operator
client certificate using the cluster's configured issuer. Resolve and
cache a TLS MultipoolerClient per cluster, using the exact
multipooler.<cluster>.<namespace>.multigres.internal server identity
with standard certificate verification.

Refresh credentials periodically and rebuild clients only when the
Secret changes. Keep the last working client during transient read or
rotation failures, and retain replaced clients briefly so in-flight
RPCs can finish.

When credentials are not initially available, mark posture Unknown,
emit PoolerClientUnavailable, and requeue after 10 seconds without
triggering controller error backoff. Clusters without internal TLS
continue using the shared insecure client.

Signed-off-by: Nicolas Nosenzo <niconosenzo@gmail.com>
@niconosenzo
niconosenzo force-pushed the multipooler-mTLS-dial branch from 6473597 to 364b8a4 Compare September 7, 2026 11:35
@github-actions

This comment has been minimized.

@niconosenzo

Copy link
Copy Markdown
Contributor Author

/e2e

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

E2E tests successView run

@Verolop Verolop 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.

lgtm!

@github-actions

This comment has been minimized.

@niconosenzo
niconosenzo force-pushed the multipooler-mTLS-dial branch from 2b2c5d9 to d466635 Compare September 7, 2026 14:17
@github-actions

This comment has been minimized.

@niconosenzo
niconosenzo force-pushed the multipooler-mTLS-dial branch from d466635 to b953040 Compare September 7, 2026 14:42
metav1.Time serializes at second precision through the fake client, so
compare against a second-truncated fixture. The resolver-failure test
also only drained one event before the second reconcile and then read
the stale PoolEmpty warning; drain the recorder fully and assert on the
PoolerClientUnavailable reason instead.

Signed-off-by: Nicolas Nosenzo <niconosenzo@gmail.com>
@niconosenzo
niconosenzo force-pushed the multipooler-mTLS-dial branch from b953040 to 6694dbd Compare September 7, 2026 14:42
@github-actions

This comment has been minimized.

1 similar comment
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

🔬 Go Test Coverage Report

Summary

Coverage Type Result
Threshold 70%
Previous Test Coverage 76.0%
New Test Coverage 76.5%

Status

✅ PASS

Detail

Show New Coverage
github.com/multigres/multigres-operator/api/v1alpha1/cell_types.go:273:								init						100.0%
github.com/multigres/multigres-operator/api/v1alpha1/celltemplate_types.go:67:							init						100.0%
github.com/multigres/multigres-operator/api/v1alpha1/common_types.go:158:							IsEnabled					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/common_types.go:192:							IsEnabled					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/common_types.go:377:							ComponentCertSecretName				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/common_types.go:384:							ComponentCertCommonName				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/common_types.go:393:							TopoServerCertName				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/common_types.go:403:							TopoServerCertSecretName			0.0%
github.com/multigres/multigres-operator/api/v1alpha1/common_types.go:409:							TopoClientCertName				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/common_types.go:420:							TopoClientCertSecretName			0.0%
github.com/multigres/multigres-operator/api/v1alpha1/common_types.go:574:							MergePVCDeletionPolicy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/common_types.go:605:							MergeDurabilityPolicy				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/common_types.go:614:							MergeBackupConfig				81.8%
github.com/multigres/multigres-operator/api/v1alpha1/coretemplate_types.go:72:							init						100.0%
github.com/multigres/multigres-operator/api/v1alpha1/multigrescluster_types.go:351:						EffectiveCellTemplate				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/multigrescluster_types.go:866:						init						100.0%
github.com/multigres/multigres-operator/api/v1alpha1/observability_helpers.go:37:						BuildOTELEnvVars				100.0%
github.com/multigres/multigres-operator/api/v1alpha1/observability_helpers.go:43:						BuildOTELEnvVarsWithResourceAttributes		91.1%
github.com/multigres/multigres-operator/api/v1alpha1/observability_helpers.go:132:						buildOTELResourceAttributes			92.9%
github.com/multigres/multigres-operator/api/v1alpha1/observability_helpers.go:161:						filterOTELResourceAttributes			85.7%
github.com/multigres/multigres-operator/api/v1alpha1/observability_helpers.go:183:						splitOTELResourceAttributes			100.0%
github.com/multigres/multigres-operator/api/v1alpha1/observability_helpers.go:206:						BuildOTELSamplingVolume				0.0%
github.com/multigres/multigres-operator/api/v1alpha1/observability_helpers.go:231:						envOrCRD					100.0%
github.com/multigres/multigres-operator/api/v1alpha1/shard_types.go:370:							init						100.0%
github.com/multigres/multigres-operator/api/v1alpha1/shardtemplate_types.go:91:							init						100.0%
github.com/multigres/multigres-operator/api/v1alpha1/tablegroup_types.go:218:							init						100.0%
github.com/multigres/multigres-operator/api/v1alpha1/topo_client_tls_helpers.go:48:						TopoClientTLSConfigured				100.0%
github.com/multigres/multigres-operator/api/v1alpha1/topo_client_tls_helpers.go:57:						BuildTopoClientTLSVolume			100.0%
github.com/multigres/multigres-operator/api/v1alpha1/topo_client_tls_helpers.go:95:						TopoClientTLSVolumeMount			0.0%
github.com/multigres/multigres-operator/api/v1alpha1/topo_client_tls_helpers.go:107:						TopoClientTLSArgs				100.0%
github.com/multigres/multigres-operator/api/v1alpha1/toposerver_types.go:273:							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					64.7%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:54:						DeepCopy					80.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:64:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:69:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:79:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:88:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:98:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:106:						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:141:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:151:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:167:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:177:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:191:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:201:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:209:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:224:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:234:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:269:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:279:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:291:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:301:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:306:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:316:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:324:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:334:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:342:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:356:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:366:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:374:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:394:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:404:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:414:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:424:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:429:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:439:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:444:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:454:						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:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:488:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:498:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:506:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:520:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:530:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:538:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:563:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:573:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:590:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:600:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:605:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:615:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:632:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:642:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:659:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:669:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:686:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:696:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:706:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:716:						DeepCopyInto					100.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:722:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:732:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:767:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:777:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:782:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:792:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:797:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:807:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:832:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:842:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:847:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:857:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:865:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:875:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:885:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:895:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:910:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:920:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:935:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:945:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:955:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:965:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:976:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:986:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:995:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1005:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1013:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1027:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1037:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1045:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1138:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1148:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1194:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1204:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1220:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1230:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1240:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1250:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1260:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1270:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1275:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1285:						DeepCopyInto					100.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1290:						DeepCopy					80.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1300:						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:1362:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1372:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1377:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1387:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1396:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1406:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1411:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1421:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1426:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1436:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1456:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1466:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1471:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1481:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1486:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1496:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1505:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1515:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1523:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1543:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1553:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1563:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1573:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1603:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1613:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1627:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1637:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1645:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1674:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1684:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1719:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1729:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1811:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1821:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1861:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1871:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1879:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1889:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1897:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1911:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1921:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1929:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1963:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:1973:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2003:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2013:						DeepCopyInto					40.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2023:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2033:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2042:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2052:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2060:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2082:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2092:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2106:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2116:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2124:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2188:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2198:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2210:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2220:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2225:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2235:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2244:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2254:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2262:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2276:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2286:						DeepCopyObject					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2294:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2325:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2335:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2360:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2370:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2382:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2392:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2402:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2412:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2422:						DeepCopy					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2432:						DeepCopyInto					0.0%
github.com/multigres/multigres-operator/api/v1alpha1/zz_generated.deepcopy.go:2437:						DeepCopy					0.0%
github.com/multigres/multigres-operator/cmd/multigres-gc/main.go:39:								init						0.0%
github.com/multigres/multigres-operator/cmd/multigres-gc/main.go:43:								main						0.0%
github.com/multigres/multigres-operator/cmd/multigres-gc/main.go:125:								registerCleankeepers				0.0%
github.com/multigres/multigres-operator/cmd/multigres-gc/main.go:131:								namespaceOrAll					0.0%
github.com/multigres/multigres-operator/cmd/multigres-operator/main.go:80:							init						0.0%
github.com/multigres/multigres-operator/cmd/multigres-operator/main.go:86:							main						0.0%
github.com/multigres/multigres-operator/cmd/multigres-operator/main.go:551:							certsExist					0.0%
github.com/multigres/multigres-operator/pkg/cert/generator.go:52:								WithExtKeyUsages				100.0%
github.com/multigres/multigres-operator/pkg/cert/generator.go:59:								WithOrganization				100.0%
github.com/multigres/multigres-operator/pkg/cert/generator.go:81:								GenerateCA					88.9%
github.com/multigres/multigres-operator/pkg/cert/generator.go:143:								GenerateServerCert				91.7%
github.com/multigres/multigres-operator/pkg/cert/generator.go:217:								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					96.8%
github.com/multigres/multigres-operator/pkg/cert/manager.go:283:								ensureServerCert				100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:410:								dnsNameSetsEqual				100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:430:								waitForProjection				100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:455:								setOwner					100.0%
github.com/multigres/multigres-operator/pkg/cert/manager.go:470:								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:34:			BuildGlobalTopoServer				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_global.go:97:			BuildMultiadminDeployment			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_global.go:277:			BuildMultiadminService				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_global.go:318:			BuildMultiadminWebDeployment			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_global.go:431:			BuildMultiadminWebService			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_global.go:489:			BuildMultigatewayGlobalService			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_global.go:553:			BuildMultigatewayGlobalReplicaService		100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_global.go:594:			postgresSuperuserOrDefault			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_global.go:607:			AdminNetworkPolicyName				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/builders_global.go:613:			BuildAdminNetworkPolicies			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:95:		buildCellTopologyLabels				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:50:			buildCertificate				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:71:			publicGatewayDNSNames				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:79:			buildInternalCertificates			88.2%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:172:			buildTopoClientCertificate			85.7%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:208:			topologyIsManaged				80.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:224:			issuerName					100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:234:			truncateCommonName				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:238:			buildCertificateFromSpec			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:259:			reconcileCertificate				81.5%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:321:			listCertificates				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/certificate.go:332:			deleteOwnedCertificates				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/images.go:27:				imagesConfig					100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/images.go:62:				resolveImages					96.1%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/images.go:213:				recordFullyPinned				83.3%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/images.go:248:				recordedImages					100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/images.go:276:				diffComponentImages				92.3%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/images.go:300:				recordAppliedImages				88.9%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:80:	Reconcile					93.6%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:368:	ensureClusterFinalizer				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:391:	handleDeletion					71.8%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:498:	SetupWithManager				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:537:	projectRefOrGenerationChangedPredicate		69.2%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:571:	enqueueRequestsFromTemplate			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:598:	templateKindFromObject				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:614:	referencesTemplate				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:631:	collectResolvedTemplates			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go:695:	collectTrackingLabels				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_cells.go:17:			reconcileCells					85.1%
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:29:			reconcileGlobalComponents			88.9%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_global.go:50:			reconcileAdminNetworkPolicies			85.7%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_global.go:93:			reconcileGlobalTopoServer			81.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_global.go:154:		reconcileMultiadmin				95.2%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_global.go:215:		globalTopoRef					100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_global.go:265:		reconcileMultiadminWeb				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_topology.go:48:		reconcileTopology				74.2%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_topology.go:207:		markTopologyConnectFailed			80.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_topology.go:228:		specCellNames					100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_topology.go:236:		cellNamesToKeepInTopology			87.5%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_topology.go:268:		managedLocalTopoServerReady			73.3%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_topology.go:310:		openTopoStore					66.7%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_topology.go:328:		isPruningEnabled				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/multigrescluster/reconcile_topology.go:339:		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:86:				calculateTotalReplicas				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/reconcile_shards.go:20:			stepListChildShards				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/reconcile_shards.go:38:			stepApplyDesiredShards				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/reconcile_shards.go:89:			observedCleanupInProgress			85.7%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/reconcile_shards.go:106:			stepReconcileUndesired				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/reconcile_shards.go:166:			stepRequeueIfPending				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/status.go:19:					stepComputeStatus				97.8%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/status.go:112:				stepPatchStatus					100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/steps.go:48:					Error						100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/steps.go:52:					Unwrap						100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/steps.go:56:					newStepError					100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/steps.go:65:					continueStep					100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/steps.go:69:					doneStep					100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/steps.go:76:					runSteps					100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/steps.go:93:					stepFetchTableGroup				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/steps.go:107:					stepHandlePendingDeletion			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/steps.go:119:					stepShortCircuitDeletion			100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/tablegroup_controller.go:39:			Reconcile					100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/tablegroup_controller.go:92:			withStepErrorHandling				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/tablegroup_controller.go:114:			handlePendingDeletion				96.3%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/tablegroup_controller.go:189:			setShardPendingDeletion				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/tablegroup_controller.go:204:			childShardSelector				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/tablegroup_controller.go:216:			SetupWithManager				100.0%
github.com/multigres/multigres-operator/pkg/cluster-handler/controller/tablegroup/tablegroup_controller.go:238:			projectRefOrGenerationChangedPredicate		72.7%
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:25:							ExecuteDrainStateMachine			84.0%
github.com/multigres/multigres-operator/pkg/data-handler/drain/drain.go:93:							UpdateDrainState				71.4%
github.com/multigres/multigres-operator/pkg/data-handler/poolerclient/resolver.go:48:						ClientFor					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/poolerclient/resolver.go:56:						Static						100.0%
github.com/multigres/multigres-operator/pkg/data-handler/poolerclient/resolver.go:106:						NewOperatorCertResolver				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/poolerclient/resolver.go:135:						ClientFor					84.4%
github.com/multigres/multigres-operator/pkg/data-handler/poolerclient/resolver.go:290:						ensureClusterActive				78.9%
github.com/multigres/multigres-operator/pkg/data-handler/poolerclient/resolver.go:322:						clusterKeyForShard				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/poolerclient/resolver.go:338:						keepExistingOrError				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/poolerclient/resolver.go:371:						ActivateCluster					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/poolerclient/resolver.go:382:						ForgetCluster					86.7%
github.com/multigres/multigres-operator/pkg/data-handler/poolerclient/resolver.go:406:						Close						100.0%
github.com/multigres/multigres-operator/pkg/data-handler/poolerclient/resolver.go:438:						retireClient					90.9%
github.com/multigres/multigres-operator/pkg/data-handler/poolerclient/resolver.go:461:						buildTLSConfig					81.2%
github.com/multigres/multigres-operator/pkg/data-handler/posture/posture.go:42:							Evaluate					95.1%
github.com/multigres/multigres-operator/pkg/data-handler/posture/posture.go:119:						mismatchMessage					66.7%
github.com/multigres/multigres-operator/pkg/data-handler/posture/posture.go:131:						observePosture					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/posture/posture.go:146:						postureString					66.7%
github.com/multigres/multigres-operator/pkg/data-handler/posture/posture.go:161:						matchPod					75.0%
github.com/multigres/multigres-operator/pkg/data-handler/posture/posture.go:170:						isLifecycleShutdown				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/posture/posture.go:176:						Apply						100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/cell.go:20:							RegisterCell					90.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/cell.go:79:							cellMetadataFromTopoRefs			92.9%
github.com/multigres/multigres-operator/pkg/data-handler/topo/cell.go:120:							createOrUpdateCell				92.3%
github.com/multigres/multigres-operator/pkg/data-handler/topo/cell.go:151:							ManagedLocalTopoServerName			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/cell.go:157:							ManagedLocalTopoServerAddress			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/cell.go:162:							UnregisterCell					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/database.go:18:							RegisterDatabase				91.7%
github.com/multigres/multigres-operator/pkg/data-handler/topo/database.go:88:							UnregisterDatabase				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/database.go:129:							GetBackupLocation				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/database.go:169:							GetDurabilityPolicy				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/database.go:180:							buildDurabilityPolicy				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:38:							GetPoolerStatus					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:102:							GetQuarantinedPods				0.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:141:							matchPoolerToPod				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:154:							FindPrimaryPooler				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:188:							PoolerRoutingRole				66.7%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:197:							IsPrimaryPooler					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:202:							CollectCells					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:218:							ShardFilter					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:229:							PodMatchesPooler				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:245:							MarkDeadPoolers					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:311:							isLifecycleShutdown				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:319:							isLifecycleQuarantined				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/pooler.go:327:							poolerMatchesAnyActivePod			100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/store.go:32:							NewStoreFromShard				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/store.go:42:							NewStoreFromCell				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/store.go:53:							NewStoreFromRef					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/store.go:64:							newStore					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/store.go:97:							loadClientTLS					91.2%
github.com/multigres/multigres-operator/pkg/data-handler/topo/store.go:160:							requireKey					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/store.go:173:							IsTopoUnavailable				100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/topology.go:23:							RegisterDatabaseFromSpec			96.8%
github.com/multigres/multigres-operator/pkg/data-handler/topo/topology.go:119:							RegisterCellFromSpec				88.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/topology.go:186:							PruneDatabases					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/topology.go:233:							PruneCells					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/topology.go:279:							isNodeExists					100.0%
github.com/multigres/multigres-operator/pkg/data-handler/topo/topology.go:287:							isNoNode					100.0%
github.com/multigres/multigres-operator/pkg/gc/gc.go:28:									WithDefaults					0.0%
github.com/multigres/multigres-operator/pkg/gc/pvc/pvc.go:38:									New						100.0%
github.com/multigres/multigres-operator/pkg/gc/pvc/pvc.go:46:									Kind						0.0%
github.com/multigres/multigres-operator/pkg/gc/pvc/pvc.go:48:									Clean						84.6%
github.com/multigres/multigres-operator/pkg/gc/pvc/pvc.go:82:									processPVC					89.7%
github.com/multigres/multigres-operator/pkg/gc/pvc/pvc.go:135:									buildSelector					71.4%
github.com/multigres/multigres-operator/pkg/images/images.go:58:								CompiledDefaults				100.0%
github.com/multigres/multigres-operator/pkg/images/images.go:71:								DefaultsFromEnv					100.0%
github.com/multigres/multigres-operator/pkg/images/images.go:105:								Revision					100.0%
github.com/multigres/multigres-operator/pkg/images/images.go:121:								FromSpec					0.0%
github.com/multigres/multigres-operator/pkg/images/images.go:136:								IsComplete					100.0%
github.com/multigres/multigres-operator/pkg/images/images.go:147:								Complete					100.0%
github.com/multigres/multigres-operator/pkg/monitoring/metrics.go:128:								init						100.0%
github.com/multigres/multigres-operator/pkg/monitoring/metrics.go:149:								Collectors					100.0%
github.com/multigres/multigres-operator/pkg/monitoring/metrics.go:171:								RecordReconcileError				0.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/recorder.go:76:								SetShardPostureInconsistent			0.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/postgresconfig/classify.go:31:							RequiresRestart					100.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/hash.go:55:								StampAndSplit					100.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/hash.go:88:								unquoteValue					100.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/hash.go:101:								parseEffectiveConfig				84.6%
github.com/multigres/multigres-operator/pkg/postgresconfig/hash.go:125:								stripInlineComment				100.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/hash.go:147:								hashSettings					100.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/reload_marker.go:31:							reloadMarkerLine				100.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/render.go:67:							Defaults					100.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/render.go:98:							Render						90.9%
github.com/multigres/multigres-operator/pkg/postgresconfig/render.go:118:							writeSortedMap					100.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/render.go:133:							quote						100.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/sizing.go:29:							ApplyResourceSizing				96.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/sizing.go:69:							formatBytes					100.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/sizing.go:84:							clampInt64					100.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/sizing.go:111:							deriveWalSettings				100.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/sizing.go:145:							clampUint64					100.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/validate.go:76:							parseCatalog					90.9%
github.com/multigres/multigres-operator/pkg/postgresconfig/validate.go:101:							Validate					100.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/validate.go:124:							validateGUC					100.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/validate.go:150:							valueMatchesType				90.0%
github.com/multigres/multigres-operator/pkg/postgresconfig/validate.go:175:							isIntegerWithOptionalUnit			93.3%
github.com/multigres/multigres-operator/pkg/resolver/cell.go:17:								ResolveCell					89.5%
github.com/multigres/multigres-operator/pkg/resolver/cell.go:69:								EffectiveCellTemplateName			100.0%
github.com/multigres/multigres-operator/pkg/resolver/cell.go:77:								ResolveCellTemplate				100.0%
github.com/multigres/multigres-operator/pkg/resolver/cell.go:112:								mergeCellConfig					100.0%
github.com/multigres/multigres-operator/pkg/resolver/cell.go:159:								mergeMultigatewaySpec				94.4%
github.com/multigres/multigres-operator/pkg/resolver/cell.go:197:								defaultGatewayBuffer				100.0%
github.com/multigres/multigres-operator/pkg/resolver/cluster.go:16:								PopulateClusterDefaults				100.0%
github.com/multigres/multigres-operator/pkg/resolver/cluster.go:167:								ResolveGlobalTopo				97.1%
github.com/multigres/multigres-operator/pkg/resolver/cluster.go:240:								ResolveMultiadmin				100.0%
github.com/multigres/multigres-operator/pkg/resolver/cluster.go:285:								ResolveMultiadminWeb				100.0%
github.com/multigres/multigres-operator/pkg/resolver/cluster.go:323:								ResolveCoreTemplate				100.0%
github.com/multigres/multigres-operator/pkg/resolver/cluster.go:359:								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:80:								mergeTopoServerPlacementSpec			100.0%
github.com/multigres/multigres-operator/pkg/resolver/resolver.go:93:								isResourcesZero					100.0%
github.com/multigres/multigres-operator/pkg/resolver/resolver.go:102:								defaultEtcdSpec					100.0%
github.com/multigres/multigres-operator/pkg/resolver/resolver.go:124:								defaultExternalTopoSpec				100.0%
github.com/multigres/multigres-operator/pkg/resolver/resolver.go:137:								defaultStatelessSpec				100.0%
github.com/multigres/multigres-operator/pkg/resolver/shard.go:37:								ResolveShard					100.0%
github.com/multigres/multigres-operator/pkg/resolver/shard.go:124:								ResolveShardTemplate				100.0%
github.com/multigres/multigres-operator/pkg/resolver/shard.go:159:								mergeShardConfig				100.0%
github.com/multigres/multigres-operator/pkg/resolver/shard.go:254:								mergePostgresConfig				100.0%
github.com/multigres/multigres-operator/pkg/resolver/shard.go:268:								mergeMultiorchSpec				100.0%
github.com/multigres/multigres-operator/pkg/resolver/shard.go:279:								mergePoolSpec					94.1%
github.com/multigres/multigres-operator/pkg/resolver/shard.go:336:								defaultPoolSpec					100.0%
github.com/multigres/multigres-operator/pkg/resolver/shard.go:351:								defaultBackupConfig				100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:31:								ValidateCoreTemplateReference			100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:54:								CoreTemplateExists				100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:74:								ValidateCellTemplateReference			100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:97:								CellTemplateExists				100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:117:								ValidateShardTemplateReference			100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:140:								ShardTemplateExists				100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:166:								ValidateClusterIntegrity			100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:239:								ValidateClusterLogic				98.5%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:664:								hasDefaultStorageClass				100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:681:								getEffectiveEtcdReplicas			100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:693:								effectiveDatabaseDurabilityPolicy		100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:712:								ValidatePoolName				100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:731:								validatePoolRuntimeIdentity			100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:778:								ValidateResolvedGateways			85.7%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:817:								ValidateGatewayBuffer				100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:829:								ValidateGatewayBufferPartial			0.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:836:								validateGatewayBuffer				82.6%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:902:								ValidateResourceRequirements			100.0%
github.com/multigres/multigres-operator/pkg/resolver/validation.go:923:								validateCellTopology				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:49:				Reconcile					95.4%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:181:				reconcileMultigatewayDeployment			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:215:				reconcileMultigatewayService			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:249:				reconcileLocalTopoServer			85.7%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:305:				localTopoServerReady				80.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:337:				handlePendingDeletion				88.2%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:385:				ensureLocalTopoServerDeleted			75.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:396:				deleteOwnedLocalTopoServerIfExists		75.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:422:				deleteLocalTopoServerIfExists			66.7%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:454:				patchReadyForDeletionCondition			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:478:				patchLocalTopoServerWaitingStatus		88.9%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:519:				updateStatus					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:617:				setConditions					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:667:				SetupWithManager				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/cell_controller.go:688:				projectRefOrGenerationChangedPredicate		63.6%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/local_toposerver.go:16:				BuildLocalTopoServerName			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/local_toposerver.go:20:				hasManagedLocalTopoServer			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/local_toposerver.go:24:				isControlledByCell				83.3%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/local_toposerver.go:39:				BuildLocalTopoServer				90.9%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/multigateway.go:56:				BuildMultigatewayDeploymentName			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/multigateway.go:68:				BuildMultigatewayServiceName			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/multigateway.go:79:				BuildMultigatewayDeployment			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/multigateway.go:360:				BuildMultigatewayService			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/cell/multigateway.go:417:				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:33:					BuildPgHbaConfigMap				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/configmap.go:66:					BuildPostgresExporterQueriesConfigMap		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/configmap.go:95:					BuildPostgresConfigMap				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:155:				PgHbaConfigMapName				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:163:				PostgresConfigMapName				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:170:				PostgresExporterQueriesConfigMapName		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:174:				postgresPasswordSecretRef			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:179:				buildSocketDirVolume				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:189:				buildPgHbaVolume				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:202:				buildPostgresPasswordVolume			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:224:				postgresPasswordVolumeMount			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:232:				initSecretsConfigured				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:237:				postgresInitSecretsRef				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:246:				buildPostgresInitSecretsVolume			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:271:				postgresInitSecretsVolumeMount			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:279:				shardTLSConfigured				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:283:				buildShardTLSVolume				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:300:				shardTLSVolumeMount				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:320:				buildPgctldSidecar				95.7%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:462:				buildPostgresExporterContainer			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:508:				BuildPoolServiceID				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:516:				buildMultipoolerContainer			96.7%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:672:				buildMultiorchContainer				94.7%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:765:				buildRuntimeOTELEnvVars				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:785:				buildPostgresConfigVolume			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:803:				buildPostgresExporterQueriesVolume		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:816:				buildPoolVolumes				92.9%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:857:				buildSharedBackupVolume				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:889:				buildPgBackRestCertVolume			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:962:				buildPgBackRestCipherKeyVolume			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:985:				pgPasswordFileEnvVar				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:992:				pgInitSecretsFileEnvVar				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:1001:				pgUserEnvVar					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:1007:				postgresSuperuserOrDefault			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/containers.go:1016:				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:58:				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:26:					BuildMultiorchDeployment			91.3%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/multiorch.go:109:					BuildMultiorchService				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/multiorch.go:140:					buildMultiorchNameWithCell			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/multiorch.go:160:					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:143:					buildPoolPodSecurityContext			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:176:					buildContainerSecurityContext			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:189:					buildPgctldSecurityContext			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:197:					effectivePgctldIdentity				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:214:					effectiveMultipoolerIdentity			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:234:					buildMultipoolerSecurityContext			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:242:					validatePoolRuntimeIdentity			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:262:					resolvedMultipoolerImage			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:271:					buildHeadlessServiceName			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:294:					ComputeSpecHash					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:347:					hashContainers					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/pool_pod.go:386:					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:119:					BuildSharedBackupPVC				96.3%
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:33:					buildMultipoolerContainerPorts			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/ports.go:55:					buildPoolHeadlessServicePorts			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/ports.go:86:					buildMultiorchContainerPorts			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/ports.go:102:					buildPostgresExporterContainerPorts		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/ports.go:114:					buildMultiorchServicePorts			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/postgres_config.go:44:				renderEffectiveConfig				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/postgres_config.go:74:				reconcilePostgresConfig				77.8%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/postgres_config.go:104:				renderPostgresConfig				80.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/postgres_config.go:139:				shardClusterName				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/postgres_config.go:162:				reduceShardResources				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/postgres_config.go:186:				effectiveResource				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/postgres_config.go:199:				parseStorageBytes				83.3%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/postgres_config.go:213:				postgresConfigRefContent			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/postgres_config.go:236:				applyPostgresConfigMap				71.4%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/postgres_config.go:261:				enqueueFromPostgresConfigMap			87.5%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:30:			reconcileDataPlane				70.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:263:			reconcilePodRoles				88.5%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:337:			reconcilePosture				88.6%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:436:			setPostureUnknownUnlessFalse			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:454:			setBackupUnknownUnlessFalse			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:468:			withDataPlaneRequeue				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:484:			recordPostureObservation			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:505:			reconcileDrainState				45.8%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:565:			isDrainStale					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:614:			topoStore					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:632:			reconcilePoolerPrune				81.2%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:676:			hasPrimary					0.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_data_plane.go:688:			isPoolerPruningEnabled				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_deletion.go:40:				handleDeletion					76.9%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_deletion.go:152:			cleanupShardPVCs				73.3%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_deletion.go:217:			shardPVCShouldBeCleaned				42.9%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_deletion.go:237:			handlePendingDeletion				72.5%
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:29:			reconcilePoolPods				97.2%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:140:			createMissingResources				82.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:309:			isPodReady					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:333:			isPoolHealthy					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:364:			isShardHealthy					95.2%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:415:			handleExternalDeletion				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:456:			handleScaleDown					97.8%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:585:			HasStarted					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:589:			SetStarted					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:594:			handleRollingUpdates				97.7%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:729:			selectPodToDrain				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:786:			syncDrainedLabels				55.6%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:819:			cleanupDrainedPod				95.5%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:895:			cleanupPodPVC					81.5%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:950:			countPoolCellPVCs				81.8%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:985:			podNeedsUpdate					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:1018:			expandPVCIfNeeded				95.5%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:1068:			pvcNeedsFilesystemResize			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_pool_pods.go:1083:			resolvePodIndex					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_quarantine.go:66:			reconcileQuarantineRemediation			88.9%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_quarantine.go:184:			wipeQuarantinedPod				70.8%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_quarantine.go:248:			poolHealthyExcluding				83.3%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:21:			reconcilePgHbaConfigMap				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:48:			reconcilePostgresExporterQueriesConfigMap	71.4%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:73:			reconcilePostgresPasswordSecret			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:81:			postgresPasswordSecretData			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:89:			postgresPasswordSecret				84.6%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:129:			reconcilePostgresInitSecretsSecret		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:205:			reconcilePgBackRestCerts			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:262:			pgBackRestPoolDNSNames				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:278:			reconcileBackupCipherSecret			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:313:			reconcileSharedBackupPVC			91.7%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:360:			reconcilePoolPDB				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reconcile_shared_infra.go:387:			reconcilePoolHeadlessService			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reload.go:47:					reconcileReloadState				84.1%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reload.go:203:					mismatchNames					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reload.go:213:					mismatchDetail					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/reload.go:226:					stampReloadHash					71.4%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:58:				orphanByRemainingCount				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:82:				Reconcile					80.1%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:432:				reconcilePool					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:490:				getMultiorchCells				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:526:				ShouldDeletePVCOnShardRemoval			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:540:				ShouldDeleteShardLevelPVCOnRemoval		100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:549:				reconcilePVCOwnerRefs				55.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/shard_controller.go:636:				SetupWithManager				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/status.go:28:					updateStatus					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/status.go:192:					updatePoolsStatus				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/status.go:322:					updateMultiorchStatus				96.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/status.go:387:					setPostgresConfigStatus				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/status.go:417:					cellSetToSlice					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/shard/status.go:427:					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/certificate.go:22:				BuildServingCertificate				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/certificate.go:55:				servingDNSNames					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/certificate.go:71:				serviceFQDN					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/certificate.go:81:				reconcileCertificate				81.2%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/container_env.go:14:				buildContainerEnv				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/container_env.go:48:				buildPodIdentityEnv				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/container_env.go:70:				clientScheme					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/container_env.go:81:				peerScheme					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/container_env.go:96:				buildEtcdConfigEnv				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/container_env.go:161:			buildEtcdTLSEnv					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/container_env.go:205:			buildEtcdClusterPeerList			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/pdb.go:17:					BuildPodDisruptionBudget			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:54:				BuildStatefulSet				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/statefulset.go:211:				buildVolumeClaimTemplates			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/storage_class_guard.go:41:			Error						0.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/storage_class_guard.go:50:			Error						0.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/storage_class_guard.go:55:			isMissingStorageClassDependency			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/storage_class_guard.go:60:			isStorageClassDependencyError			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/storage_class_guard.go:69:			getStorageClass					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/storage_class_guard.go:87:			validateEtcdStorageClassDependency		91.7%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/storage_class_guard.go:168:			setStorageClassCondition			84.6%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/toposerver_controller.go:44:			Reconcile					84.8%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/toposerver_controller.go:216:		reconcilePodDisruptionBudget			75.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/toposerver_controller.go:249:		reconcileStatefulSet				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/toposerver_controller.go:283:		reconcileHeadlessService			100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/toposerver_controller.go:317:		reconcileClientService				100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/toposerver_controller.go:351:		updateStatus					97.1%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/toposerver_controller.go:466:		setConditions					100.0%
github.com/multigres/multigres-operator/pkg/resource-handler/controller/toposerver/toposerver_controller.go:497:		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:256:								SetUpEnvtestManager				100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:272:								createEnvtestEnvironment			100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:287:								startEnvtest					100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:302:								cleanEnvtest					100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:319:								createEnvtestDir				100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:333:								writeKubeconfigFile				100.0%
github.com/multigres/multigres-operator/pkg/testutil/envtest.go:343:								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/topology/roots.go:23:								NewRoots					83.3%
github.com/multigres/multigres-operator/pkg/topology/roots.go:47:								ClusterRoot					100.0%
github.com/multigres/multigres-operator/pkg/topology/roots.go:55:								KeyPrefix					100.0%
github.com/multigres/multigres-operator/pkg/topology/roots.go:60:								Global						100.0%
github.com/multigres/multigres-operator/pkg/topology/roots.go:65:								Cell						75.0%
github.com/multigres/multigres-operator/pkg/topology/roots.go:73:								encodeSegment					77.8%
github.com/multigres/multigres-operator/pkg/util/certs/certs.go:68:								Build						90.9%
github.com/multigres/multigres-operator/pkg/util/certs/certs.go:113:								TruncateCommonName				100.0%
github.com/multigres/multigres-operator/pkg/util/certs/certs.go:125:								List						57.1%
github.com/multigres/multigres-operator/pkg/util/certs/certs.go:145:								Get						85.7%
github.com/multigres/multigres-operator/pkg/util/certs/certs.go:165:								Delete						77.8%
github.com/multigres/multigres-operator/pkg/util/certs/certs.go:191:								SpecEqual					100.0%
github.com/multigres/multigres-operator/pkg/util/certs/certs.go:197:								FindByName					100.0%
github.com/multigres/multigres-operator/pkg/util/certs/certs.go:210:								OwnedBy						100.0%
github.com/multigres/multigres-operator/pkg/util/certs/certs.go:221:								KeepSets					100.0%
github.com/multigres/multigres-operator/pkg/util/certs/certs.go:241:								Prune						88.9%
github.com/multigres/multigres-operator/pkg/util/certs/certs.go:296:								ApplyOne					66.7%
github.com/multigres/multigres-operator/pkg/util/certs/certs.go:315:								Apply						88.9%
github.com/multigres/multigres-operator/pkg/util/certs/certs.go:344:								IsNoMatchError					0.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:190:							BuildStandardLabels				100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:201:							AddCellLabel					100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:207:							AddClusterLabel					100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:213:							AddShardLabel					100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:222:							AddDatabaseLabel				100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:231:							AddTableGroupLabel				100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:240:							AddPoolLabel					100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:249:							AddZoneIDLabel					100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:258:							AddRegionLabel					100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:285:							GetSelectorLabels				100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/labels.go:299:							MergeLabels					100.0%
github.com/multigres/multigres-operator/pkg/util/metadata/project_ref.go:16:							ResolveProjectRef				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/orphan.go:27:								MarkOrphan					95.5%
github.com/multigres/multigres-operator/pkg/util/pvc/orphan.go:78:								ClearOrphan					87.5%
github.com/multigres/multigres-operator/pkg/util/pvc/orphan.go:98:								HasOrphanLabel					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/conditions.go:35:							IsConditionFalse				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						99.1%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:37:							NewMultigresClusterValidator			100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:42:							ValidateCreate					100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:50:							ValidateUpdate					100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:69:							ValidateDelete					100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:76:							validate					91.7%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:137:							validateTemplatesExist				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:147:							validateLogic					100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:158:							validateNoStorageShrink				90.5%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:202:							validatePostgresConfig				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:229:							collectPoolStorageSizes				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:257:							validateEtcdReplicasImmutable			100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:293:							effectiveEtcdReplicas				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:322:							NewTemplateValidator				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:330:							ValidateCreate					100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:342:							ValidateUpdate					100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:357:							templateSpecUnchanged				100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:370:							validateWrite					100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:385:							validateTemplateContent				94.7%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:429:							validateCellTemplateConsumers			95.8%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:479:							ValidateDelete					95.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:532:							isTemplateInUse					100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:596:							NewChildResourceValidator			100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:603:							ValidateCreate					100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:611:							ValidateUpdate					100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:619:							ValidateDelete					100.0%
github.com/multigres/multigres-operator/pkg/webhook/handlers/validator.go:626:							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.5%

@niconosenzo

Copy link
Copy Markdown
Contributor Author

/e2e

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

E2E tests successView run

@niconosenzo
niconosenzo merged commit f1a1612 into multigres:main Sep 7, 2026
6 checks passed
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