Skip to content

refactor: split ProjectQuota CRD into per-AZ CRDs#827

Merged
umswmayj merged 6 commits intomainfrom
quoat_split_crd_on_az
May 11, 2026
Merged

refactor: split ProjectQuota CRD into per-AZ CRDs#827
umswmayj merged 6 commits intomainfrom
quoat_split_crd_on_az

Conversation

@umswmayj
Copy link
Copy Markdown
Collaborator

@umswmayj umswmayj commented May 8, 2026

  • Add AvailabilityZone field to ProjectQuotaSpec
  • Change CRD naming from 'quota-{projectID}' to 'quota-{projectID}-{az}'
  • Status fields (TotalUsage, PaygUsage) are now flat map[string]int64 per AZ
  • Add ProjectQuotaResourceRouter in multicluster routers.go
  • Update QuotaController to manage per-AZ CRDs
  • Update HandleQuota API to create one CRD per project+AZ combination
  • Update usage.go to aggregate across per-AZ CRDs
  • derivePaygUsage is preserved and used in both reconcile paths
  • Re-add Create_EmptyResources and Update_WithNewMetadata test cases
  • Add partial AZ coverage tests (unit + integration)
  • Add total calculation verification tests with multi-resource multi-AZ

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 8, 2026

Review Change Stack

Warning

Rate limit exceeded

@umswmayj has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 40 minutes and 41 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 8e367b52-9703-45dd-8e21-06a7a6f98c37

📥 Commits

Reviewing files that changed from the base of the PR and between 9e91c79 and 4a84f0c.

📒 Files selected for processing (2)
  • api/v1alpha1/project_quota_types.go
  • helm/library/cortex/files/crds/cortex.cloud_projectquotas.yaml
📝 Walkthrough

Walkthrough

This PR refactors ProjectQuota storage from a single CRD per project with embedded per-availability-zone data to one flat CRD per project per availability zone, removes intermediate structs, flattens quota/usage to map[string]int64, updates persistence/reconciliation and usage computation, and adds AZ-aware multicluster routing.

Changes

ProjectQuota Per-Availability-Zone Refactor

Layer / File(s) Summary
CRD Type Definitions and Schema
api/v1alpha1/project_quota_types.go, api/v1alpha1/zz_generated.deepcopy.go
Removed ResourceQuota / ResourceQuotaUsage; added required spec.availabilityZone; changed spec.quotamap[string]int64; changed status.totalUsage/status.paygUsagemap[string]int64; updated deepcopy logic and printer columns.
CRD OpenAPI Schema Manifest
helm/library/cortex/files/crds/cortex.cloud_projectquotas.yaml
CRD schema updated: spec.availabilityZone added/required; spec.quota, status.totalUsage, status.paygUsage simplified to direct maps of int64; added AZ printer column; descriptions updated for AZ-scoped routing.
Quota Persistence API
internal/scheduling/reservations/commitments/api/quota.go, internal/scheduling/reservations/commitments/api/quota_test.go
HandleQuota now upserts/deletes one ProjectQuota CRD per AZ (quota-<projectID>-<az>), converts uint64→int64 with overflow guard, lists by indexed spec.projectID to remove orphan AZ CRDs; tests refactored to seed and verify per-AZ CRDs.
Usage Calculation and Reporting
internal/scheduling/reservations/commitments/usage.go, internal/scheduling/reservations/commitments/api/report_usage_test.go
CalculateUsage lists per-AZ CRDs, builds quotaByResourceAZ map[string]map[string]int64, and passes it to buildUsageResponse; RAM fixed-ratio resolution consults per-AZ quota from that map.
Quota Controller Usage Computation
internal/scheduling/reservations/quota/controller.go
Internal representation refactored to nested maps map[resourceName]map[az]int64; computeTotalUsage, computeCRUsage, and derivePaygUsage updated; added extractAZSlice/expandAZSlice helpers; Reconcile and status persistence adapted to per-AZ slices.
Incremental Delta and Status Updates
internal/scheduling/reservations/quota/controller.go
applyDeltaAndUpdateStatus applies deltas across affected AZ-specific CRDs with conflict retry, recomputes per-AZ PaygUsage, updates LastReconcileAt, and updateProjectQuotaStatusWithRetry persists only the CR’s AZ slice.
Multicluster Resource Routing
pkg/multicluster/routers.go
Registered ProjectQuota GVK in DefaultResourceRouters; added ProjectQuotaResourceRouter.Match to route CRDs to clusters by availabilityZone label matching pq.Spec.AvailabilityZone.
Unit and Integration Tests
internal/scheduling/reservations/quota/*, internal/scheduling/reservations/commitments/*
Tests updated to use nested map[string]map[string]int64 for usage; per-AZ ProjectQuota CRDs seeded via makePQPerAZ; reconcile triggers and verifications updated to target per-AZ CR names and per-resource per-AZ status fields.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • cobaltcore-dev/cortex#822: Modifies quota controller usage and commitment logic (computeTotalUsage, computeCRUsage) related to the reconcilation changes here.
  • cobaltcore-dev/cortex#824: Also modifies pkg/multicluster/routers.go to add ResourceRouter logic; related to the ProjectQuotaResourceRouter added in this PR.
  • cobaltcore-dev/cortex#796: Introduced the original ProjectQuota types (ResourceQuota / ResourceQuotaUsage) that are refactored/removed in this PR.

Suggested reviewers

  • auhlig
  • juliusclausnitzer
  • mblos
  • PhilippMatthes

Poem

🐰 I split the quotas by each zone,
small maps per AZ now stand alone,
No nested trees to chase or fight,
Per-zone CRDs keep each value right,
Hop in, reviewer — give it a light!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 52.17% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: refactoring ProjectQuota CRD from a single project-scoped resource to per-availability-zone resources.
Description check ✅ Passed The description directly relates to the changeset, detailing specific implementation changes across multiple files and areas of the codebase.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch quoat_split_crd_on_az

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
internal/scheduling/reservations/quota/controller.go (1)

1000-1011: ⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

Critical: mapCRToProjectQuota uses the old (non-AZ) name and will never match a ProjectQuota CRD.

After this PR, ProjectQuota CRDs are named quota-<projectID>-<az>, but the mapper still returns "quota-" + cr.Spec.ProjectID. The resulting reconcile request never matches any CRD, so Reconcile() will hit IsNotFound and silently return — meaning CR UsedAmount changes will no longer trigger a PaygUsage recompute on any per-AZ CRD, defeating the whole watch wiring set up in SetupWithManager (lines 632–648).

Since one CommittedResource is scoped to one AZ (cr.Spec.AvailabilityZone), the mapper should target that AZ's CRD directly.

🔧 Proposed fix
 // mapCRToProjectQuota maps a CommittedResource change to the affected ProjectQuota reconcile request.
 func (c *QuotaController) mapCRToProjectQuota(_ context.Context, obj client.Object) []reconcile.Request {
 	cr, ok := obj.(*v1alpha1.CommittedResource)
 	if !ok {
 		return nil
 	}
-	// Map to the ProjectQuota for this project
-	crdName := "quota-" + cr.Spec.ProjectID
+	if cr.Spec.AvailabilityZone == "" {
+		return nil
+	}
+	// Map to the per-AZ ProjectQuota matching this CR's AZ.
+	crdName := "quota-" + cr.Spec.ProjectID + "-" + cr.Spec.AvailabilityZone
 	return []reconcile.Request{
 		{NamespacedName: client.ObjectKey{Name: crdName}},
 	}
 }

Also worth adding test coverage that asserts a CR UsedResources change enqueues a reconcile for the matching per-AZ CRD.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/scheduling/reservations/quota/controller.go` around lines 1000 -
1011, mapCRToProjectQuota currently builds the old non-AZ CRD name
("quota-"+cr.Spec.ProjectID) so its reconcile.Request never matches per-AZ
ProjectQuota CRDs; update the mapper (mapCRToProjectQuota) to cast obj to
*v1alpha1.CommittedResource, read cr.Spec.ProjectID and
cr.Spec.AvailabilityZone, and return a reconcile.Request for the per-AZ name
"quota-<projectID>-<az>" (use the same naming scheme as ProjectQuota CRDs); also
add/adjust unit test(s) to assert that a CommittedResource
UsedResources/UsedAmount change enqueues a reconcile for the matching per-AZ
ProjectQuota CRD.
🧹 Nitpick comments (4)
internal/scheduling/reservations/commitments/api/quota.go (1)

180-194: ⚡ Quick win

Silently swallowed List error during orphan cleanup.

if err := api.client.List(...); err == nil { ... } discards any list error. If listing fails (e.g. cache not synced, transient API error), orphan AZ CRDs are silently left behind with no log line. Even though orphan cleanup is best-effort, it should at least be observable.

🔧 Proposed fix
-	// Delete orphan CRDs for AZs no longer present in the quota push.
-	var pqList v1alpha1.ProjectQuotaList
-	if err := api.client.List(ctx, &pqList, client.MatchingFields{idxProjectQuotaByProjectID: projectID}); err == nil {
-		for i := range pqList.Items {
+	// Delete orphan CRDs for AZs no longer present in the quota push.
+	var pqList v1alpha1.ProjectQuotaList
+	if err := api.client.List(ctx, &pqList, client.MatchingFields{idxProjectQuotaByProjectID: projectID}); err != nil {
+		log.Error(err, "failed to list ProjectQuota CRDs for orphan cleanup", "projectID", projectID)
+	} else {
+		for i := range pqList.Items {
 			pq := &pqList.Items[i]
 			...
 		}
 	}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/scheduling/reservations/commitments/api/quota.go` around lines 180 -
194, The List error from api.client.List(ctx, &pqList,
client.MatchingFields{idxProjectQuotaByProjectID: projectID}) is being ignored;
change the logic in the orphan-cleanup block so errors are logged when List
fails (rather than silently skipping), and only iterate pqList.Items when List
returned nil; specifically, after calling api.client.List(...) check err != nil
and use log.Error(err, ...) to record the failure (including context like
"failed to list ProjectQuota", "projectID", projectID) and return/skip cleanup,
otherwise proceed to iterate pqList.Items and delete orphan ProjectQuota entries
as before.
internal/scheduling/reservations/commitments/usage.go (1)

147-154: ⚡ Quick win

Silent fallback when listing per-AZ ProjectQuota CRDs fails.

The condition if err == nil && len(pqList.Items) > 0 collapses two distinct cases — "list failed" and "no quota pushed yet" — into the same silent path that leaves quotaByResourceAZ nil and reports infinite quota for every AZ. If the field index isn't registered or the API server returns a transient error, callers (Limes) will see infinite quota with no signal in logs.

Recommend logging the error and possibly returning it (since infinite-quota fallback can mask real misconfigurations).

🔧 Proposed fix
-	var pqList v1alpha1.ProjectQuotaList
-	var quotaByResourceAZ map[string]map[string]int64
-	if err := c.client.List(ctx, &pqList, client.MatchingFields{idxProjectQuotaByProjectID: projectID}); err == nil && len(pqList.Items) > 0 {
-		quotaByResourceAZ = buildCombinedQuotaMap(pqList.Items)
-	}
+	var pqList v1alpha1.ProjectQuotaList
+	var quotaByResourceAZ map[string]map[string]int64
+	if err := c.client.List(ctx, &pqList, client.MatchingFields{idxProjectQuotaByProjectID: projectID}); err != nil {
+		log.Error(err, "failed to list ProjectQuota CRDs; falling back to infinite quota", "projectID", projectID)
+	} else if len(pqList.Items) > 0 {
+		quotaByResourceAZ = buildCombinedQuotaMap(pqList.Items)
+	}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/scheduling/reservations/commitments/usage.go` around lines 147 -
154, The current logic silently treats any c.client.List failure the same as an
empty result by only proceeding when err == nil && len(pqList.Items) > 0, which
can hide API/indexing errors and cause infinite-quota fallbacks; change the
handling around c.client.List(ctx, &pqList,
client.MatchingFields{idxProjectQuotaByProjectID: projectID}) so that if err !=
nil you log the error (including err and context like projectID) and
propagate/return it (or at minimum surface it to the caller) instead of leaving
quotaByResourceAZ nil; keep the successful path that calls
buildCombinedQuotaMap(pqList.Items) when err == nil and handle the explicit
empty-list case separately to preserve the intended "no quota pushed yet"
behavior.
internal/scheduling/reservations/commitments/api/quota_test.go (1)

354-388: ⚡ Quick win

Test does not assert orphan AZ cleanup behavior.

The verification loop iterates tc.expectPerAZ and confirms each expected AZ CRD exists with the right values, but it does not assert that AZs no longer in the request were deleted (the orphan-cleanup path in HandleQuota lines 180–194). Consider adding a case that seeds an existing CRD for an AZ not present in the new request and asserts it is gone after the call — that path is otherwise untested.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/scheduling/reservations/commitments/api/quota_test.go` around lines
354 - 388, Add an assertion that verifies orphan AZ CRDs are deleted: in the
test case setup for the scenario exercising HandleQuota (the loop using
tc.expectPerAZ and projectQuotaCRDName), create/seed an extra ProjectQuota CRD
for an AZ that is NOT present in tc.expectPerAZ (use k8sClient.Create with a
v1alpha1.ProjectQuota named via projectQuotaCRDName(tc.projectID, orphanAZ) and
with Spec.ProjectID set to tc.projectID), call the function under test
(HandleQuota), then attempt to GET that orphan CRD and assert it no longer
exists (expect a not-found error, e.g. apierrors.IsNotFound(err)); place this
check alongside the existing verification so the orphan-cleanup path (lines
~180–194 in HandleQuota) is exercised.
internal/scheduling/reservations/quota/integration_test.go (1)

1293-1301: ⚡ Quick win

Remove obsolete project-scoped makePQ helper.

Line 1293 keeps a legacy quota-<project> fixture helper (suppressed with nolint). Since tests are now AZ-scoped, removing it avoids accidental reintroduction of old naming.

Suggested cleanup
-func makePQ(projectID string, lastReconcileAt *metav1.Time) *v1alpha1.ProjectQuota { //nolint:unused
-	return &v1alpha1.ProjectQuota{
-		ObjectMeta: metav1.ObjectMeta{Name: "quota-" + projectID},
-		Spec:       v1alpha1.ProjectQuotaSpec{ProjectID: projectID, DomainID: "domain-1"},
-		Status: v1alpha1.ProjectQuotaStatus{
-			LastReconcileAt: lastReconcileAt,
-		},
-	}
-}
-
 // makePQPerAZ creates a per-AZ ProjectQuota CRD for integration tests.
 func makePQPerAZ(projectID, az string, lastReconcileAt *metav1.Time) *v1alpha1.ProjectQuota { //nolint:unparam
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/scheduling/reservations/quota/integration_test.go` around lines 1293
- 1301, Remove the obsolete project-scoped helper makePQ: delete the makePQ
function (and its nolint comment) from the test file and update any tests
referencing makePQ to use the current AZ-scoped helpers/fixtures instead (search
for makePQ to find usages and replace with the appropriate AZ-scoped factory or
inline fixture creation).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/scheduling/reservations/commitments/api/quota.go`:
- Around line 145-151: The Create error handling in the closure that calls
api.client.Create should not just return when apierrors.IsAlreadyExists is
observed; retry.RetryOnConflict only retries on IsConflict, so change the branch
in the closure (where api.client.Create(ctx, pq) is called) to either perform a
GET+Update flow when apierrors.IsAlreadyExists is returned (fetch the existing
quota, merge/apply changes and Update), or re-wrap/convert the AlreadyExists
into a Conflict so retry.RetryOnConflict will re-run the closure; update the
code paths around api.client.Create, apierrors.IsAlreadyExists and the
retry.RetryOnConflict usage (and adjust HandleQuota callers if needed) so
concurrent creates converge to an update rather than returning the original
createErr.

In `@internal/scheduling/reservations/quota/controller_test.go`:
- Around line 229-231: The test currently verifies AZ exclusion by checking
ramUsage["az-2"] != 0 which falsely passes when the key is missing because map
lookups default to zero; update the assertion to verify the key is absent
instead (e.g., use the comma-ok form to check presence: _, ok :=
ramUsage["az-2"] and assert that ok is false) so the test fails if "az-2" is
present; modify the assertion around the ramUsage lookup in the test (variable
name ramUsage in controller_test.go) accordingly.

In `@internal/scheduling/reservations/quota/integration_test.go`:
- Around line 1080-1124: The current verifyTotalUsage helper only checks AZs
present in the expected map and misses any extra ProjectQuota CRDs written for
the same project; update verifyTotalUsage to also List all v1alpha1.ProjectQuota
objects (use env.client.List into a v1alpha1.ProjectQuotaList), filter those
whose Name has the "quota-"+projectID+"-" prefix, extract the AZ suffix, and if
an AZ is not present in the expected perAZ map but its
ProjectQuota.Status.TotalUsage is non-empty, call env.t.Errorf/fatal to fail the
test; apply the same pattern to the other per-AZ verifier helper in this file
(the one immediately after verifyTotalUsage) so unexpected AZ CRDs with
populated usage are detected.

---

Outside diff comments:
In `@internal/scheduling/reservations/quota/controller.go`:
- Around line 1000-1011: mapCRToProjectQuota currently builds the old non-AZ CRD
name ("quota-"+cr.Spec.ProjectID) so its reconcile.Request never matches per-AZ
ProjectQuota CRDs; update the mapper (mapCRToProjectQuota) to cast obj to
*v1alpha1.CommittedResource, read cr.Spec.ProjectID and
cr.Spec.AvailabilityZone, and return a reconcile.Request for the per-AZ name
"quota-<projectID>-<az>" (use the same naming scheme as ProjectQuota CRDs); also
add/adjust unit test(s) to assert that a CommittedResource
UsedResources/UsedAmount change enqueues a reconcile for the matching per-AZ
ProjectQuota CRD.

---

Nitpick comments:
In `@internal/scheduling/reservations/commitments/api/quota_test.go`:
- Around line 354-388: Add an assertion that verifies orphan AZ CRDs are
deleted: in the test case setup for the scenario exercising HandleQuota (the
loop using tc.expectPerAZ and projectQuotaCRDName), create/seed an extra
ProjectQuota CRD for an AZ that is NOT present in tc.expectPerAZ (use
k8sClient.Create with a v1alpha1.ProjectQuota named via
projectQuotaCRDName(tc.projectID, orphanAZ) and with Spec.ProjectID set to
tc.projectID), call the function under test (HandleQuota), then attempt to GET
that orphan CRD and assert it no longer exists (expect a not-found error, e.g.
apierrors.IsNotFound(err)); place this check alongside the existing verification
so the orphan-cleanup path (lines ~180–194 in HandleQuota) is exercised.

In `@internal/scheduling/reservations/commitments/api/quota.go`:
- Around line 180-194: The List error from api.client.List(ctx, &pqList,
client.MatchingFields{idxProjectQuotaByProjectID: projectID}) is being ignored;
change the logic in the orphan-cleanup block so errors are logged when List
fails (rather than silently skipping), and only iterate pqList.Items when List
returned nil; specifically, after calling api.client.List(...) check err != nil
and use log.Error(err, ...) to record the failure (including context like
"failed to list ProjectQuota", "projectID", projectID) and return/skip cleanup,
otherwise proceed to iterate pqList.Items and delete orphan ProjectQuota entries
as before.

In `@internal/scheduling/reservations/commitments/usage.go`:
- Around line 147-154: The current logic silently treats any c.client.List
failure the same as an empty result by only proceeding when err == nil &&
len(pqList.Items) > 0, which can hide API/indexing errors and cause
infinite-quota fallbacks; change the handling around c.client.List(ctx, &pqList,
client.MatchingFields{idxProjectQuotaByProjectID: projectID}) so that if err !=
nil you log the error (including err and context like projectID) and
propagate/return it (or at minimum surface it to the caller) instead of leaving
quotaByResourceAZ nil; keep the successful path that calls
buildCombinedQuotaMap(pqList.Items) when err == nil and handle the explicit
empty-list case separately to preserve the intended "no quota pushed yet"
behavior.

In `@internal/scheduling/reservations/quota/integration_test.go`:
- Around line 1293-1301: Remove the obsolete project-scoped helper makePQ:
delete the makePQ function (and its nolint comment) from the test file and
update any tests referencing makePQ to use the current AZ-scoped
helpers/fixtures instead (search for makePQ to find usages and replace with the
appropriate AZ-scoped factory or inline fixture creation).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 5a6256f2-8ee2-4457-adb3-1dfcac54d15b

📥 Commits

Reviewing files that changed from the base of the PR and between 7f7fc9f and 6b39c7a.

📒 Files selected for processing (11)
  • api/v1alpha1/project_quota_types.go
  • api/v1alpha1/zz_generated.deepcopy.go
  • helm/library/cortex/files/crds/cortex.cloud_projectquotas.yaml
  • internal/scheduling/reservations/commitments/api/quota.go
  • internal/scheduling/reservations/commitments/api/quota_test.go
  • internal/scheduling/reservations/commitments/api/report_usage_test.go
  • internal/scheduling/reservations/commitments/usage.go
  • internal/scheduling/reservations/quota/controller.go
  • internal/scheduling/reservations/quota/controller_test.go
  • internal/scheduling/reservations/quota/integration_test.go
  • pkg/multicluster/routers.go

Comment thread internal/scheduling/reservations/commitments/api/quota.go
Comment thread internal/scheduling/reservations/quota/controller_test.go Outdated
Comment thread internal/scheduling/reservations/quota/integration_test.go
umswmayj added 3 commits May 8, 2026 15:01
- Add AvailabilityZone field to ProjectQuotaSpec
- Change CRD naming from 'quota-{projectID}' to 'quota-{projectID}-{az}'
- Status fields (TotalUsage, PaygUsage) are now flat map[string]int64 per AZ
- Add ProjectQuotaResourceRouter in multicluster routers.go
- Update QuotaController to manage per-AZ CRDs
- Update HandleQuota API to create one CRD per project+AZ combination
- Update usage.go to aggregate across per-AZ CRDs
- Fix mapCRToProjectQuota to use per-AZ CRD name
- Fix crUsedAmountChangePredicate: CreateFunc now returns true
  so CR creation triggers quota reconcile (PaygUsage recompute)
- derivePaygUsage is preserved and used in both reconcile paths
- Re-add Create_EmptyResources and Update_WithNewMetadata test cases
- Add partial AZ coverage tests (unit + integration)
- Add total calculation verification tests with multi-resource multi-AZ
- Fix crUsedAmountChangePredicate: CreateFunc now returns true
  so creating a CommittedResource triggers PaygUsage recompute
- Fix mapCRToProjectQuota: use per-AZ CRD name (quota-{project}-{az})
  so both create and delete events route to the correct ProjectQuota
- Add DomainName verification to quota_test.go (Create_WithMetadata
  and Update_WithNewMetadata cases now assert DomainName is set)
- quota.go: wrap IsAlreadyExists as conflict error so RetryOnConflict
  re-runs the closure and falls into the Get+Update branch on races
- controller_test.go: assert AZ key absence with comma-ok idiom instead
  of comparing to zero (which passes for missing keys too)
- integration_test.go: add guards in verifyTotalUsage and verifyPaygUsage
  that scan all ProjectQuota CRDs for the project and fail if an unexpected
  AZ CRD has non-empty usage (catches extra writes)
@umswmayj umswmayj force-pushed the quoat_split_crd_on_az branch from 6b39c7a to 822a907 Compare May 8, 2026 15:12
Resolved conflicts:
- pkg/multicluster/routers.go: kept both ProjectQuotaResourceRouter and FlavorGroupCapacityResourceRouter
- internal/scheduling/reservations/commitments/usage.go: kept quotaByResourceAZ (our per-AZ approach) and added config APIConfig parameter from main
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@helm/library/cortex/files/crds/cortex.cloud_projectquotas.yaml`:
- Around line 68-72: The CRD schema for spec.availabilityZone currently only
declares type: string (field availabilityZone) which allows empty strings;
update the schema for availabilityZone (spec.availabilityZone) to disallow empty
values by adding minLength: 1 (or a stricter pattern property if desired) under
the availabilityZone schema so admission rejects "" values and ensures valid
zone names at creation time.
- Around line 94-97: The CRD allows negative values for the quota and usage
maps; update the schemas for the map value definitions (the additionalProperties
blocks used for quota and for usage) to enforce non-negative integers by adding
"minimum: 0" to those additionalProperties objects (they already have "type:
integer" and "format: int64") so map entries cannot be negative; apply the same
change to the second occurrence referenced in the comment.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: d89676ef-4cad-48a4-8ec8-6c9bd363663a

📥 Commits

Reviewing files that changed from the base of the PR and between 6b39c7a and 9e91c79.

📒 Files selected for processing (11)
  • api/v1alpha1/project_quota_types.go
  • api/v1alpha1/zz_generated.deepcopy.go
  • helm/library/cortex/files/crds/cortex.cloud_projectquotas.yaml
  • internal/scheduling/reservations/commitments/api/quota.go
  • internal/scheduling/reservations/commitments/api/quota_test.go
  • internal/scheduling/reservations/commitments/api/report_usage_test.go
  • internal/scheduling/reservations/commitments/usage.go
  • internal/scheduling/reservations/quota/controller.go
  • internal/scheduling/reservations/quota/controller_test.go
  • internal/scheduling/reservations/quota/integration_test.go
  • pkg/multicluster/routers.go
✅ Files skipped from review due to trivial changes (1)
  • api/v1alpha1/zz_generated.deepcopy.go
🚧 Files skipped from review as they are similar to previous changes (9)
  • pkg/multicluster/routers.go
  • internal/scheduling/reservations/commitments/api/report_usage_test.go
  • internal/scheduling/reservations/commitments/usage.go
  • internal/scheduling/reservations/quota/controller_test.go
  • api/v1alpha1/project_quota_types.go
  • internal/scheduling/reservations/commitments/api/quota.go
  • internal/scheduling/reservations/quota/controller.go
  • internal/scheduling/reservations/commitments/api/quota_test.go
  • internal/scheduling/reservations/quota/integration_test.go

Comment thread helm/library/cortex/files/crds/cortex.cloud_projectquotas.yaml
Comment thread helm/library/cortex/files/crds/cortex.cloud_projectquotas.yaml
umswmayj added 2 commits May 11, 2026 06:40
- Add minLength:1 to spec.availabilityZone (prevent empty string)
- Add minimum:0 to quota, paygUsage, totalUsage map values (prevent negatives)
- Add +kubebuilder:validation:MinLength=1 marker to Go type
- Add minLength:1 to spec.availabilityZone CRD schema (prevents empty string)
- Add +kubebuilder:validation:MinLength=1 marker to Go type
- Note: minimum:0 on map values not achievable via controller-gen markers
@umswmayj umswmayj force-pushed the quoat_split_crd_on_az branch from e223d76 to 4a84f0c Compare May 11, 2026 06:48
@github-actions
Copy link
Copy Markdown
Contributor

Test Coverage Report

Test Coverage 📊: 69.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/monitor.go:21:							NewMonitor					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/monitor.go:39:							Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/monitor.go:45:							Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_api.go:37:			NewCinderAPI					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_api.go:45:			Init						81.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_api.go:68:			GetAllStoragePools				73.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_sync.go:27:			Init						83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_sync.go:40:			Sync						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_sync.go:51:			SyncAllStoragePools				53.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_types.go:46:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_types.go:49:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_types.go:52:			UnmarshalJSON					93.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/cinder/cinder_types.go:131:			MarshalJSON					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/controller.go:70:				Reconcile					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/controller.go:272:				predicateIgnoreStatusConditions			100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/controller.go:290:				SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_api.go:35:			NewIdentityAPI					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_api.go:39:			Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_api.go:59:			GetAllDomains					66.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_api.go:83:			GetAllProjects					72.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_sync.go:26:			Init						85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_sync.go:41:			Sync						83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_sync.go:54:			SyncDomains					53.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_sync.go:74:			SyncProjects					53.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_types.go:16:		TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_types.go:19:		Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_types.go:47:		TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/identity/identity_types.go:50:		Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_api.go:45:			NewLimesAPI					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_api.go:50:			Init						81.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_api.go:74:			GetAllCommitments				90.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_api.go:124:			getCommitments					86.4%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_sync.go:28:			Init						83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_sync.go:41:			Sync						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_sync.go:52:			SyncCommitments					63.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_types.go:69:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/limes/limes_types.go:72:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_api.go:41:			NewManilaAPI					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_api.go:46:			Init						81.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_api.go:69:			GetAllStoragePools				75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_sync.go:28:			Init						83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_sync.go:41:			Sync						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_sync.go:52:			SyncAllStoragePools				53.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_types.go:47:			UnmarshalJSON					87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_types.go:137:			MarshalJSON					72.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_types.go:234:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/manila/manila_types.go:237:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:61:				NewNovaAPI					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:66:				Init						62.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:102:				GetAllServers					82.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:170:				GetDeletedServers				82.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:233:				GetAllHypervisors				82.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:295:				GetAllFlavors					68.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:332:				GetAllMigrations				82.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:393:				GetAllAggregates				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:459:				GetAllImages					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:502:				deriveOSType					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:29:				Init						91.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:55:				Sync						54.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:79:				SyncAllServers					57.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:102:			SyncDeletedServers				64.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:132:			SyncAllHypervisors				57.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:156:			SyncAllFlavors					57.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:178:			SyncAllMigrations				57.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:200:			SyncAllImages					66.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:220:			SyncAllAggregates				57.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:37:			UnmarshalJSON					77.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:60:			MarshalJSON					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:80:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:83:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:139:			UnmarshalJSON					45.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:191:			MarshalJSON					84.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:237:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:240:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:273:			UnmarshalJSON					80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:309:			MarshalJSON					85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:341:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:344:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:386:			GetHypervisorType				71.4%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:412:			UnmarshalJSON					54.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:435:			MarshalJSON					55.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:456:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:459:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:483:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:486:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:507:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:510:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:521:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:524:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_api.go:48:		NewPlacementAPI					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_api.go:53:		Init						81.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_api.go:77:		GetAllResourceProviders				66.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_api.go:105:		GetAllTraits					90.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_api.go:155:		getTraits					90.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_api.go:179:		GetAllInventoryUsages				71.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_api.go:229:		getInventoryUsages				77.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_sync.go:28:		Init						87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_sync.go:46:		Sync						71.4%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_sync.go:62:		SyncResourceProviders				53.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_sync.go:83:		SyncTraits					57.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_sync.go:112:		SyncInventoryUsages				57.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_types.go:17:		TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_types.go:20:		Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_types.go:31:		TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_types.go:34:		Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_types.go:74:		TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/placement/placement_types.go:77:		Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/supported_syncers.go:22:			getSupportedSyncer				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/controller.go:57:				Reconcile					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/controller.go:207:				SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/sync.go:32:					newTypedSyncer					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/sync.go:100:					fetch						79.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/sync.go:205:					getSyncWindowStart				81.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/sync.go:245:					sync						68.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/sync.go:295:					Sync						70.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/triggers.go:7:				TriggerMetricAliasSynced			0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/triggers.go:12:				TriggerMetricTypeSynced				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:42:					TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:43:					Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:44:					GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:45:					GetTimestamp					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:46:					GetValue					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:47:					With						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:90:					TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:91:					Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:92:					GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:93:					GetTimestamp					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:94:					GetValue					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:95:					With						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:145:				TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:146:				Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:147:				GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:148:				GetTimestamp					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:149:				GetValue					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:150:				With						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:170:				TableName					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:171:				Indexes						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:172:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:173:				GetTimestamp					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:174:				GetValue					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:175:				With						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:211:				TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:212:				Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:213:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:214:				GetTimestamp					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:215:				GetValue					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:216:				With						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:242:				TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:243:				Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:244:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:245:				GetTimestamp					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:246:				GetValue					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:247:				With						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:282:				TableName					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:285:				Indexes						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:286:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:287:				GetTimestamp					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:288:				GetValue					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/prometheus/types.go:289:				With						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/db.go:51:								FromSecretRef					6.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/db.go:133:								SelectTimed					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/db.go:142:								CreateTable					63.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/db.go:161:								AddTable					66.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/db.go:172:								TableExists					58.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/db.go:201:								ReplaceAll					62.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/db.go:230:								BulkInsert					91.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/monitor.go:21:								newMonitor					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/monitor.go:63:								Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/monitor.go:73:								Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/testing/containers/postgres.go:21:					GetPort						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/testing/containers/postgres.go:25:					Init						70.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/testing/containers/postgres.go:69:					Close						50.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/db/testing/env.go:24:							SetupDBEnv					59.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/controller.go:46:							Reconcile					55.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/controller.go:238:						SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/monitor.go:26:							NewMonitor					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/monitor.go:44:							Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/monitor.go:50:							Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/monitor.go:69:							Init						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/monitor.go:78:							monitorFeatureExtractor				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/monitor.go:97:							Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/base.go:28:						Init						87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/base.go:45:						ExtractSQL					83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/base.go:58:						Extracted					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/flavor_groups.go:50:				HasFixedRamCoreRatio				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/flavor_groups.go:79:				Extract						82.4%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/host_az.go:31:					Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/host_capabilities.go:35:				Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/host_details.go:59:				Extract						87.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/host_pinned_projects.go:45:			Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/host_utilization.go:47:				Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/libvirt_domain_cpu_steal_pct.go:35:		Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/vm_host_residency.go:53:				Extract						85.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/vm_life_span.go:52:				extractHistogramBuckets				89.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/vm_life_span.go:97:				Extract						88.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/vrops_hostsystem_contention_long_term.go:39:	Extract						82.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/vrops_hostsystem_contention_short_term.go:39:	Extract						82.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/vrops_hostsystem_resolver.go:33:			Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/compute/vrops_project_noisiness.go:33:			Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/plugins/storage/storage_pool_cpu_usage.go:35:			Extract						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:42:							Reconcile					77.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:95:							findDependentKnowledge				96.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:142:							triggerKnowledgeReconciliation			100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:175:							enqueueKnowledgeReconciliation			81.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:201:							getResourceType					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:213:							mapDatasourceToKnowledge			100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:234:							mapKnowledgeToKnowledge				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/extractor/trigger.go:255:							SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:53:							Reconcile					42.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:107:							InitAllKPIs					83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:147:							getJointDB					27.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:185:							handleKPIChange					52.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:310:							handleDatasourceChange				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:335:							handleDatasourceCreated				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:345:							handleDatasourceUpdated				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:363:							handleDatasourceDeleted				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:375:							handleKnowledgeChange				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:400:							handleKnowledgeCreated				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:410:							handleKnowledgeUpdated				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:428:							handleKnowledgeDeleted				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/controller.go:438:							SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/logger.go:21:								Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/logger.go:26:								Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/logger.go:32:								Init						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/logger.go:37:								GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/base.go:24:							Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/host_contention.go:28:					GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/host_contention.go:32:					Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/host_contention.go:49:					Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/host_contention.go:54:					Collect						82.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/project_noisiness.go:27:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/project_noisiness.go:31:				Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/project_noisiness.go:43:				Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/project_noisiness.go:47:				Collect						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_commitments.go:30:					GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_commitments.go:34:					Init						85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_commitments.go:81:					Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_commitments.go:89:					convertLimesMemory				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_commitments.go:106:					Collect						89.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_faults.go:35:					GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_faults.go:40:					Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_faults.go:53:					Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_faults.go:57:					Collect						91.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_life_span.go:29:					GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_life_span.go:33:					Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_life_span.go:46:					Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_life_span.go:50:					Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_life_span.go:57:					collectVMBuckets				71.4%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_migration_statistics.go:28:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_migration_statistics.go:32:				Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_migration_statistics.go:45:				Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/vm_migration_statistics.go:49:				Collect						69.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/datasource_state.go:47:				GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/datasource_state.go:52:				Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/datasource_state.go:71:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/datasource_state.go:78:				Collect						90.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/decision_state.go:32:				GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/decision_state.go:35:				Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/decision_state.go:49:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/decision_state.go:52:				Collect						94.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/knowledge_state.go:32:				GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/knowledge_state.go:35:				Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/knowledge_state.go:49:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/knowledge_state.go:52:				Collect						85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/kpi_state.go:32:					GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/kpi_state.go:35:					Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/kpi_state.go:49:					Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/kpi_state.go:52:					Collect						92.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/pipeline_state.go:32:				GetName						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/pipeline_state.go:35:				Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/pipeline_state.go:49:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/deployment/pipeline_state.go:52:				Collect						92.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_host_capacity.go:35:			GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_host_capacity.go:39:			Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_host_capacity.go:58:			Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_host_capacity.go:65:			aggregateReservationsByHost			91.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_host_capacity.go:133:			getHypervisors					85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_host_capacity.go:146:			Collect						91.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_project_utilization.go:54:			GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_project_utilization.go:58:			Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_project_utilization.go:76:			Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_project_utilization.go:81:			Collect						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_project_utilization.go:127:			getKVMHosts					87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_project_utilization.go:142:			queryProjectCapacityUsage			80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/kvm_project_utilization.go:176:			queryProjectInstanceCount			80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:32:					getHostLabels					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:87:					getHostLabels					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:140:					getResourceCapacity				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:157:					getResourceAllocation				83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:171:					getMetricName					75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:190:					isKVMFlavor					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:209:					flavorCPUArchitecture				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:231:					bytesFromUnit					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_host_capacity.go:26:			GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_host_capacity.go:30:			Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_host_capacity.go:47:			Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_host_capacity.go:52:			Collect						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_host_capacity.go:82:			getVMwareHosts					83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_host_capacity.go:101:			getHostUtilizations				84.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:36:		GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:40:		Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:58:		Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:63:		Collect						58.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:85:		getFlavorsByName				85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:98:		getGeneralPurposeCommitments			75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:113:		getGeneralPurposeServers			87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:132:		getHanaInstanceCommitments			75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:146:		getRunningHanaServers				87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:166:		collectGeneralPurpose				75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:224:		collectHana					89.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_commitments.go:289:		getProjectsWithDomains				85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:55:		GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:59:		Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:77:		Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:82:		Collect						66.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:129:		getVMwareHosts					83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:152:		queryProjectCapacityUsage			80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:187:		queryProjectInstanceCount			80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/storage/storage_pool_cpu.go:28:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/storage/storage_pool_cpu.go:32:				Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/storage/storage_pool_cpu.go:49:				Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/storage/storage_pool_cpu.go:54:				Collect						82.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/math/histogram.go:7:							Histogram					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/e2e_checks.go:21:							RunChecks					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/e2e_checks.go:26:							checkCinderSchedulerReturnsValidHosts		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/external_scheduler_api.go:42:					NewAPI						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/external_scheduler_api.go:50:					Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/external_scheduler_api.go:57:					canRunScheduler					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/external_scheduler_api.go:80:					inferPipelineName				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/external_scheduler_api.go:90:					CinderExternalScheduler				68.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/filter_weigher_pipeline_controller.go:48:				PipelineType					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/filter_weigher_pipeline_controller.go:53:				Reconcile					83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/filter_weigher_pipeline_controller.go:73:				ProcessNewDecisionFromAPI			92.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/filter_weigher_pipeline_controller.go:105:				process						80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/filter_weigher_pipeline_controller.go:135:				InitPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/filter_weigher_pipeline_controller.go:148:				SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/history_cleanup.go:30:						HistoryCleanup					76.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/cinder/pipeline_webhook.go:15:						NewPipelineWebhook				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:32:							NewNovaReader					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:37:							GetAllServers					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:47:							GetAllFlavors					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:57:							GetAllHypervisors				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:67:							GetAllMigrations				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:77:							GetAllAggregates				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:88:							GetServerByID					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:102:							GetFlavorByName					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:116:							GetDeletedServerByID				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/postgres.go:33:							NewPostgresReader				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/postgres.go:48:							DB						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/postgres.go:67:							Select						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/activation.go:12:							NoEffect					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/activation.go:15:							Norm						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/activation.go:21:							Apply						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/api_monitor.go:22:							NewSchedulerMonitor				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/api_monitor.go:32:							Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/api_monitor.go:36:							Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/api_monitor.go:50:							Callback					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/api_monitor.go:56:							Respond						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector.go:53:							Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector.go:64:							Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector.go:75:							CheckKnowledges					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:26:						NewDetectorPipelineMonitor			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:46:						SubPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:52:						Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:58:						Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:76:						monitorDetector					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:99:						Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:107:						Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_monitor.go:112:						Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_pipeline.go:33:						Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_pipeline.go:63:						Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_pipeline.go:98:						Combine						97.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/detector_step_opts.go:15:						Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter.go:31:								Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_monitor.go:23:							monitorFilter					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_monitor.go:36:							Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_monitor.go:41:							Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_monitor.go:46:							Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_validation.go:22:						Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_validation.go:28:						Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_validation.go:33:						validateFilter					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_validation.go:38:						Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:45:						InitNewFilterWeigherPipeline			86.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:138:					runFilters					75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:170:					runWeighers					81.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:210:					normalizeInputWeights				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:219:					applyWeights					80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:255:					sortHostsByWeights				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:265:					Run						96.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_monitor.go:36:					NewPipelineMonitor				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_monitor.go:90:					SubPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_monitor.go:97:					observePipelineResult				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_monitor.go:118:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_monitor.go:130:				Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step.go:48:					Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step.go:63:					Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step.go:75:					IncludeAllHostsFromRequest			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step.go:85:					PrepareStats					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step_monitor.go:42:				monitorStep					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step_monitor.go:65:				RunWrapped					48.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step_monitor.go:215:				impact						94.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step_opts.go:15:				Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/history_client.go:32:							joinHostsCapped					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/history_client.go:39:							getName						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/history_client.go:46:							generateExplanation				97.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/history_client.go:136:							CreateOrUpdateHistory				70.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/history_client.go:285:							Delete						80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:38:						InitAllPipelines				93.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:63:						handlePipelineChange				77.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:176:						HandlePipelineCreated				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:190:						HandlePipelineUpdated				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:203:						HandlePipelineDeleted				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:215:						handleKnowledgeChange				71.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:248:						HandleKnowledgeCreated				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:261:						HandleKnowledgeUpdated				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_controller.go:283:						HandleKnowledgeDeleted				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_webhook.go:38:						ValidateCreate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_webhook.go:47:						ValidateUpdate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_webhook.go:56:						ValidateDelete					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_webhook.go:65:						validatePipeline				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/pipeline_webhook.go:149:						SetupWebhookWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/scaling.go:7:								clamp						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/scaling.go:22:								MinMaxScale					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher.go:35:								Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher.go:40:								Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher.go:45:								CheckKnowledges					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_monitor.go:23:							monitorWeigher					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_monitor.go:36:							Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_monitor.go:41:							Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_monitor.go:46:							Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_validation.go:22:						Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_validation.go:28:						Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_validation.go:33:						validateWeigher					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weigher_validation.go:38:						Run						81.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weighing_explainer.go:58:						ExplainWeighing					97.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weighing_explainer.go:202:						explainWithoutMultipliers			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weighing_explainer.go:242:						identifyWeigherSteps				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weighing_explainer.go:283:						recoverMultipliers				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weighing_explainer.go:339:						solveLinearSystem				93.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weighing_explainer.go:402:						computeCounterfactualRanking			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/weighing_explainer.go:423:						sortedMapKeys					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/filter_weigher_pipeline_controller.go:52:				PipelineType					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/filter_weigher_pipeline_controller.go:56:				Reconcile					83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/filter_weigher_pipeline_controller.go:76:				ProcessNewMachine				92.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/filter_weigher_pipeline_controller.go:126:			process						70.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/filter_weigher_pipeline_controller.go:177:			InitPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/filter_weigher_pipeline_controller.go:190:			handleMachine					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/filter_weigher_pipeline_controller.go:222:			SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/pipeline_webhook.go:15:						NewPipelineWebhook				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/plugins/filters/filter_noop.go:21:				Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/plugins/filters/filter_noop.go:25:				Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/plugins/filters/filter_noop.go:34:				Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/machines/plugins/filters/filter_noop.go:44:				init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/e2e_checks.go:34:							RunChecks					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/e2e_checks.go:39:							checkManilaSchedulerReturnsValidHosts		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/external_scheduler_api.go:42:					NewAPI						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/external_scheduler_api.go:50:					Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/external_scheduler_api.go:57:					canRunScheduler					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/external_scheduler_api.go:80:					inferPipelineName				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/external_scheduler_api.go:90:					ManilaExternalScheduler				68.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/filter_weigher_pipeline_controller.go:48:				PipelineType					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/filter_weigher_pipeline_controller.go:53:				Reconcile					83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/filter_weigher_pipeline_controller.go:73:				ProcessNewDecisionFromAPI			92.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/filter_weigher_pipeline_controller.go:105:				process						80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/filter_weigher_pipeline_controller.go:135:				InitPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/filter_weigher_pipeline_controller.go:148:				SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/history_cleanup.go:32:						HistoryCleanup					77.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/pipeline_webhook.go:15:						NewPipelineWebhook				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/plugins/weighers/netapp_cpu_usage_balancing.go:35:			Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/plugins/weighers/netapp_cpu_usage_balancing.go:53:			Init						60.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/plugins/weighers/netapp_cpu_usage_balancing.go:64:			Run						88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/manila/plugins/weighers/netapp_cpu_usage_balancing.go:110:			init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/candidate_gatherer.go:29:						MutateWithAllCandidates				94.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/deschedulings_cleanup.go:24:						Start						82.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/deschedulings_cleanup.go:63:						Reconcile					70.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/deschedulings_cleanup.go:95:						SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/deschedulings_executor.go:45:						Reconcile					68.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/deschedulings_executor.go:256:					SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/detector_cycle_breaker.go:17:						Filter						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/detector_pipeline_controller.go:42:					PipelineType					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/detector_pipeline_controller.go:47:					InitPipeline					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/detector_pipeline_controller.go:65:					CreateDeschedulingsPeriodically			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/detector_pipeline_controller.go:126:					Reconcile					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/detector_pipeline_controller.go:131:					SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/e2e_checks.go:61:							getHypervisors					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/e2e_checks.go:104:							prepare						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/e2e_checks.go:257:							randomRequest					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/e2e_checks.go:330:							checkNovaSchedulerReturnsValidHosts		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/e2e_checks.go:360:							RunChecks					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/external_scheduler_api.go:54:						NewAPI						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/external_scheduler_api.go:63:						Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/external_scheduler_api.go:70:						canRunScheduler					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/external_scheduler_api.go:93:						inferPipelineName				93.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/external_scheduler_api.go:127:					shuffleTopHosts					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/external_scheduler_api.go:153:					limitHostsToRequest				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/external_scheduler_api.go:175:					NovaExternalScheduler				68.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:51:				PipelineType					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:56:				Reconcile					91.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:76:				ProcessNewDecisionFromAPI			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:106:				upsertHistory					81.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:127:				process						82.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:186:				InitPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:199:				SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/history_cleanup.go:30:						HistoryCleanup					79.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/hypervisor_overcommit_controller.go:48:				Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/hypervisor_overcommit_controller.go:82:				Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/hypervisor_overcommit_controller.go:111:				Reconcile					93.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/hypervisor_overcommit_controller.go:178:				handleRemoteHypervisor				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/hypervisor_overcommit_controller.go:207:				predicateRemoteHypervisor			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/hypervisor_overcommit_controller.go:220:				SetupWithManager				23.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/nova_client.go:80:							NewNovaClient					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/nova_client.go:84:							Init						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/nova_client.go:132:							Get						75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/nova_client.go:141:							LiveMigrate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/nova_client.go:152:							GetServerMigrations				70.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/nova_client.go:195:							ListProjectServers				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/pipeline_webhook.go:16:						NewPipelineWebhook				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/detectors/avoid_high_steal_pct.go:26:				Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/detectors/avoid_high_steal_pct.go:39:				Init						80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/detectors/avoid_high_steal_pct.go:49:				Run						86.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/detectors/avoid_high_steal_pct.go:85:				init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_aggregate_metadata.go:22:			Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_aggregate_metadata.go:68:			init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_allowed_projects.go:22:			Run						87.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_allowed_projects.go:54:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_capabilities.go:25:				hvToNovaCapabilities				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_capabilities.go:48:				Run						83.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_capabilities.go:130:				init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_correct_az.go:21:				Run						91.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_correct_az.go:65:				init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_exclude_hosts.go:28:				Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_exclude_hosts.go:30:				Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_exclude_hosts.go:43:				init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_external_customer.go:23:			Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_external_customer.go:36:			Run						94.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_external_customer.go:86:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_accelerators.go:21:			Run						91.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_accelerators.go:55:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_enough_capacity.go:34:			Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_enough_capacity.go:64:			Run						81.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_enough_capacity.go:374:			init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_requested_traits.go:24:			Run						95.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_requested_traits.go:97:			init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_host_instructions.go:21:			Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_host_instructions.go:44:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_instance_group_affinity.go:19:			Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_instance_group_affinity.go:54:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_instance_group_anti_affinity.go:22:		Run						88.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_instance_group_anti_affinity.go:99:		init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_live_migratable.go:22:				checkHasSufficientFeatures			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_live_migratable.go:51:				Run						94.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_live_migratable.go:112:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_requested_destination.go:26:			processRequestedAggregates			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_requested_destination.go:79:			processRequestedHost				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_requested_destination.go:103:			Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_requested_destination.go:128:			init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_status_conditions.go:23:			Run						93.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_status_conditions.go:88:			init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/vm_detection.go:17:						GetResource					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/vm_detection.go:18:						GetReason					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/vm_detection.go:19:						GetHost						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/vm_detection.go:20:						WithReason					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_binpack.go:29:					Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_binpack.go:72:					Run						90.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_binpack.go:141:					calcVMResources					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_binpack.go:154:					init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_evacuation.go:25:			Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_evacuation.go:29:			GetFailoverHostWeight				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_evacuation.go:36:			GetDefaultHostWeight				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_evacuation.go:53:			Run						93.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_evacuation.go:114:			init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_reservation_consolidation.go:29:	Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_reservation_consolidation.go:47:	GetTotalCountWeight				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_reservation_consolidation.go:54:	GetSameSpecPenalty				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_reservation_consolidation.go:81:	Run						94.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_failover_reservation_consolidation.go:160:	init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_instance_group_soft_affinity.go:29:		Run						94.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_instance_group_soft_affinity.go:85:		init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_prefer_smaller_hosts.go:29:			Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_prefer_smaller_hosts.go:60:			Run						92.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/kvm_prefer_smaller_hosts.go:157:			init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_anti_affinity_noisy_projects.go:29:		Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_anti_affinity_noisy_projects.go:44:		Init						80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_anti_affinity_noisy_projects.go:55:		Run						81.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_anti_affinity_noisy_projects.go:93:		init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_long_term_contended_hosts.go:35:	Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_long_term_contended_hosts.go:53:	Init						80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_long_term_contended_hosts.go:64:	Run						88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_long_term_contended_hosts.go:111:	init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_short_term_contended_hosts.go:35:	Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_short_term_contended_hosts.go:53:	Init						80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_short_term_contended_hosts.go:64:	Run						88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_avoid_short_term_contended_hosts.go:111:	init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_binpack.go:32:				Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_binpack.go:75:				Init						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_binpack.go:88:				Run						80.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_binpack.go:165:				calcHostCapacity				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_binpack.go:177:				calcHostAllocation				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_binpack.go:187:				calcVMResources					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/weighers/vmware_binpack.go:200:				init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/filter_weigher_pipeline_controller.go:51:				PipelineType					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/filter_weigher_pipeline_controller.go:55:				Reconcile					83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/filter_weigher_pipeline_controller.go:75:				ProcessNewPod					92.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/filter_weigher_pipeline_controller.go:126:				process						71.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/filter_weigher_pipeline_controller.go:189:				InitPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/filter_weigher_pipeline_controller.go:202:				handlePod					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/filter_weigher_pipeline_controller.go:234:				SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/helpers/resources.go:12:						GetPodResourceRequests				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/helpers/resources.go:31:						AddResourcesInto				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/helpers/resources.go:41:						MaxResourcesInto				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/pipeline_webhook.go:15:						NewPipelineWebhook				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_affinity.go:22:				Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_affinity.go:26:				Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_affinity.go:30:				Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_affinity.go:43:				matchesNodeAffinity				88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_affinity.go:62:				matchesNodeSelectorTerm				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_affinity.go:71:				matchesNodeSelectorRequirement			90.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_affinity.go:124:				init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_available.go:21:				Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_available.go:25:				Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_available.go:29:				Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_available.go:42:				isNodeHealthy					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_available.go:70:				isNodeSchedulable				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_available.go:74:				init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_capacity.go:22:				Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_capacity.go:26:				Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_capacity.go:30:				Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_capacity.go:45:				hasCapacityForPod				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_node_capacity.go:60:				init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_noop.go:21:					Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_noop.go:25:					Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_noop.go:34:					Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_noop.go:44:					init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_taint.go:21:					Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_taint.go:25:					Validate					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_taint.go:29:					Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_taint.go:42:					canScheduleOnNode				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_taint.go:53:					hasToleration					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/filters/filter_taint.go:67:					init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/weighers/binpack.go:21:					Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/weighers/binpack.go:34:					Run						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/weighers/binpack.go:48:					calculateBinpackScore				85.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/pods/plugins/weighers/binpack.go:83:					init						50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/config.go:30:					ApplyDefaults					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/config.go:46:					DefaultConfig					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:40:					NewController					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:49:					Start						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:67:					reconcileAll					87.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:99:					reconcileOne					92.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:244:					probeScheduler					80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:306:					sumCommittedCapacity				94.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:338:					availabilityZones				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:354:					countInstancesInAZ				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/controller.go:368:					crdNameFor					88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/metrics.go:33:					NewMonitor					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/metrics.go:64:					Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/capacity/metrics.go:74:					Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:33:			sortedKeys					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:66:			HandleChangeCommitments				80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:146:			processCommitmentChanges			82.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:371:			watchCRsUntilReady				75.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:466:			rollbackCR					76.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:509:			applyCRSpec					90.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments_metrics.go:14:		recordMetrics					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments_metrics.go:36:		countCommitments				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments_monitor.go:21:		NewChangeCommitmentsAPIMonitor			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments_monitor.go:58:		Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments_monitor.go:66:		Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/handler.go:34:				NewAPI						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/handler.go:39:				NewAPIWithConfig				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/handler.go:52:				Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/handler.go:70:				handleProjectEndpoint				60.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info.go:25:					HandleInfo					96.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info.go:70:					recordInfoMetrics				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info.go:90:					buildServiceInfo				93.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info_monitor.go:19:				NewInfoAPIMonitor				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info_monitor.go:44:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info_monitor.go:50:				Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/quota.go:30:					projectQuotaCRDName				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/quota.go:39:					HandleQuota					75.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/quota.go:207:					quotaError					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/quota.go:213:					recordQuotaMetrics				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/quota_monitor.go:17:				NewQuotaAPIMonitor				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/quota_monitor.go:38:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/quota_monitor.go:44:				Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_capacity.go:22:			HandleReportCapacity				72.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_capacity.go:84:			recordCapacityMetrics				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_capacity_monitor.go:19:		NewReportCapacityAPIMonitor			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_capacity_monitor.go:44:		Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_capacity_monitor.go:50:		Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_usage.go:25:				HandleReportUsage				64.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_usage.go:95:				recordUsageMetrics				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_usage.go:105:				extractProjectIDFromPath			77.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_usage_monitor.go:19:			NewReportUsageAPIMonitor			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_usage_monitor.go:44:			Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/report_usage_monitor.go:50:			Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/capacity.go:25:					NewCapacityCalculator				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/capacity.go:35:					CalculateCapacity				88.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/client.go:43:					NewCommitmentsClient				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/client.go:47:					Init						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/client.go:106:					ListProjects					90.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/client.go:125:					ListCommitmentsByID				79.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/client.go:169:					listCommitments					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:41:		Reconcile					72.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:87:		reconcilePending				65.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:143:		reconcileCommitted				91.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:208:		reconcileCoresHeadroom				88.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:293:		applyReservationState				93.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:320:		checkChildReservationStatus			85.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:366:		setAccepted					88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:386:		reconcileInactive				75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:396:		deleteChildReservations				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:402:		DeleteChildReservations				75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:423:		rollbackToAccepted				84.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:457:		isRejectedForGeneration				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:470:		retryDelay					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:489:		setNotReady					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:496:		setNotReadyRetry				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:504:		patchNotReady					80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:518:		setReadyConditionFalse				90.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:550:		SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:35:					DefaultUsageReconcilerConfig			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:42:					ApplyDefaults					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:82:					DefaultCommittedResourceControllerConfig	0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:90:					ApplyDefaults					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:138:					ResourceConfigForGroup				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:150:					DefaultAPIConfig				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/context.go:20:					WithNewGlobalRequestID				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/context.go:26:					WithGlobalRequestID				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/context.go:33:					LoggerFromContext				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:62:					e2eProjectID					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:74:					e2eAZs						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:89:					CheckCommitmentsInfoEndpoint			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:126:				CheckCommitmentsRoundTrip			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:150:				e2eRoundTripResource				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:248:				CheckCommitmentsMultiFlavorGroupBatch		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:272:				e2eBatchFlavorGroupResource			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:455:				e2eFetchUsageReport				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:479:				e2eLogUsageReport				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:515:				e2eSendChangeCommitments			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:537:				e2eFetchServiceInfo				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:555:				e2eBaseURL					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:563:				RunCommitmentsE2EChecks				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/field_index.go:34:				indexCommittedResourceByUUID			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/field_index.go:59:				indexCommittedResourceByProjectID		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/field_index.go:84:				indexReservationByCommitmentUUID		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/field_index.go:109:				indexProjectQuotaByProjectID			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/messages.go:135:					UnmarshalJSON					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/messages.go:158:					MarshalJSON					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:48:			echoParentGeneration				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:61:			Reconcile					65.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:355:			reconcileAllocations				80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:491:			getPipelineForFlavorGroup			66.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:510:			hypervisorToReservations			84.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:533:			Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:574:			SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_manager.go:42:			NewReservationManager				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_manager.go:63:			ApplyCommitmentState				86.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_manager.go:228:			syncReservationMetadata				82.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_manager.go:277:			newReservation					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:32:					ResourceNameRAM					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:38:					ResourceNameCores				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:44:					ResourceNameInstances				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:51:					GetFlavorGroupNameFromResource			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:78:					GetFlavorGroupAndTypeFromResource		100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:139:					FromCommitment					83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:187:					FromChangeCommitmentTargetState			87.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:258:					FromCommittedResource				93.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:299:					FromReservations				86.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:53:					NewSyncer					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:61:					Init						75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:78:					getCommitmentStates				66.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:198:					SyncReservations				59.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:390:					applyCommittedResourceSpec			82.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:417:					upsertCommittedResource				75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:452:					updateCommittedResourceIfExists			73.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:481:					isTerminalCommitment				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:32:				NewSyncerMonitor				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:83:				RecordError					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:87:				RecordDuration					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:91:				SetLimesCommitmentsActive			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:95:				RecordStaleCRs					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:99:				RecordCommitmentSkipped				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:103:				RecordCRCreates					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:107:				RecordCRUpdates					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:111:				RecordCRDeletes					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:116:				Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer_monitor.go:128:				Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:62:					NewCommitmentStateWithUsage			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:72:					AssignVM					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:83:					HasRemainingCapacity				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:114:					NewUsageCalculator				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:126:					CalculateUsage					87.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:184:					BuildVMAssignmentsFromStatus			87.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:199:					azFlavorGroupKey				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:206:					buildCommitmentCapacityMap			78.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:270:					getProjectVMs					86.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:358:					sortVMsForUsageCalculation			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:377:					sortCommitmentsForAssignment			92.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:406:					assignVMsToCommitments				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:432:					buildCombinedQuotaMap				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:451:					buildUsageResponse				96.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:598:					buildVMAttributes				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:626:					countCommitmentStates				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:643:					NewDBUsageClient				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:647:					getReader					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:678:					ListProjectVMs					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler.go:41:				Reconcile					87.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler.go:203:				writeUsageStatus				93.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler.go:232:				hypervisorToCommittedResources			81.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler.go:271:				SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler.go:332:				Update						92.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler_monitor.go:18:			NewUsageReconcilerMonitor			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler_monitor.go:44:			Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage_reconciler_monitor.go:51:			Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/utils.go:13:					GetMaxSlotIndex					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/utils.go:30:					GetNextSlotIndex				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/utils.go:36:					extractCommitmentUUID				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/context.go:20:						WithGlobalRequestID				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/context.go:26:						WithRequestID					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/context.go:32:						GlobalRequestIDFromContext			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/context.go:43:						RequestIDFromContext				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/config.go:92:					intPtr						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/config.go:97:					ApplyDefaults					87.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/config.go:135:					DefaultConfig					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/context.go:15:					WithNewGlobalRequestID				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/context.go:22:					LoggerFromContext				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:50:					NewFailoverReservationController		100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:72:					Reconcile					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:107:					reconcileValidateAndAcknowledge			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:183:					validateReservation				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:251:					ReconcilePeriodic				71.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:384:					reconcileRemoveInvalidVMFromReservations	96.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:443:					reconcileRemoveNoneligibleVMFromReservations	93.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:503:					reconcileRemoveEmptyReservations		70.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:527:					selectVMsToProcess				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:571:					sortVMsByMemory					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:585:					reconcileCreateAndAssignReservations		78.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:704:					calculateVMsMissingFailover			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:755:					getRequiredFailoverCount			81.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:777:					patchReservationStatus				50.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:811:					SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/controller.go:833:					Start						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:29:					ResourceGroup					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:39:					HypervisorResources				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:49:					resolveVMSpecForScheduling			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:98:					getFailoverAllocations				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:106:					filterFailoverReservations			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:117:					countReservationsForVM				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:130:					addVMToReservation				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:156:					ValidateFailoverReservationResources		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/helpers.go:177:					newFailoverReservation				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/monitor.go:29:					NewFailoverMonitor				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/monitor.go:88:					preInitialize					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/monitor.go:105:					RecordReconciliation				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/monitor.go:121:					Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/monitor.go:137:					Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:39:			IsVMEligibleForReservation			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:64:			CheckVMsStillEligible				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:105:			FindEligibleReservations			93.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:139:			reservationKey					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:144:			newBaseDependencyGraph				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:174:			newDependencyGraph				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:190:			ensureVMInMaps					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:199:			ensureResInMaps					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:206:			addVMToReservation				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:216:			removeVMFromReservation				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:223:			checkAllVMConstraints				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:282:			isVMEligibleForReservation			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_eligibility.go:292:			doesVMFitInReservation				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_scheduling.go:33:			queryHypervisorsFromScheduler			82.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_scheduling.go:114:			tryReuseExistingReservation			83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_scheduling.go:173:			validateVMViaSchedulerEvacuation		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_scheduling.go:254:			scheduleAndBuildNewFailoverReservation		75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:77:					NewDBVMSource					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:82:					ListVMs						78.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:166:					parseExtraSpecs					28.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:181:					truncateString					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:190:					GetVM						86.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:241:					ListVMsOnHypervisors				27.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:285:					buildVMsFromHypervisors				66.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:355:					filterVMsOnKnownHypervisors			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:426:					IsServerActive					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:439:					GetDeletedVMInfo				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:468:					warnUnknownVMsOnHypervisors			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/flavor_groups.go:21:						FindFlavorInGroups				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/flavor_groups.go:39:						Get						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/flavor_groups.go:60:						GetAllFlavorGroups				92.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/monitor.go:32:						NewMonitor					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/monitor.go:47:						Describe					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/monitor.go:53:						Collect						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/config.go:25:						ApplyDefaults					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/config.go:36:						DefaultQuotaControllerConfig			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/context.go:15:						WithNewGlobalRequestID				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/context.go:22:						LoggerFromContext				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:47:					NewQuotaController				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:69:					ReconcilePeriodic				67.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:165:					Reconcile					52.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:253:					computeTotalUsageForProject			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:287:					newUsageDelta					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:294:					addIncrement					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:301:					addDecrement					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:312:					ReconcileHVDiff					85.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:392:					accumulateAddedVM				77.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:450:					isVMNewSinceLastReconcile			64.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:485:					accumulateRemovedVM				70.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:543:					applyDeltaAndUpdateStatus			78.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:632:					SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:652:					SetupHVWatcher					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:673:					Start						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:710:					computeTotalUsage				95.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:757:					groupCRsByProject				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:768:					computeCRUsage					80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:835:					isCRStateIncluded				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:845:					derivePaygUsage					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:875:					extractAZSlice					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:887:					expandAZSlice					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:900:					updateProjectQuotaStatusWithRetry		92.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:930:					vmResourceUnits					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:940:					buildFlavorToGroupMap				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:951:					incrementUsage					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:961:					decrementUsage					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:974:					recordUsageMetrics				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1001:					mapCRToProjectQuota				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1014:					crUsedAmountChangePredicate			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1042:					projectQuotaGenerationChangePredicate		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1050:					hvInstanceChangePredicate			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1066:					Create						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1070:					Update						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1076:					Delete						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/controller.go:1080:					Generic						0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/metrics.go:20:						NewQuotaMetrics					37.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/metrics.go:71:						RecordUsage					80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/metrics.go:81:						RecordReconcileDuration				66.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/quota/metrics.go:89:						RecordReconcileResult				83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/scheduler_client.go:25:					loggerFromContext				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/scheduler_client.go:44:					NewSchedulerClient				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/scheduler_client.go:92:					ScheduleReservation				78.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/scheduler_client.go:203:					getSchedulerHints				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:72:								compileAuthPolicies				0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:106:								compileRoles					94.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:140:								extractBodyField				94.1%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:184:								tokenCacheKey					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:189:								get						100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:204:								put						100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:208:								delete						0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:246:								matchPath					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:256:								matchPolicy					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:265:								authError					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth.go:277:								checkAuth					93.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth_keystone.go:20:							initTokenIntrospector				0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/auth_keystone.go:67:							introspect					84.2%
github.com/cobaltcore-dev/cortex/internal/shim/placement/field_index.go:33:							IndexFields					87.9%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_allocation_candidates.go:35:					HandleListAllocationCandidates			100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_allocations.go:25:						HandleManageAllocations				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_allocations.go:40:						HandleListAllocations				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_allocations.go:58:						HandleUpdateAllocations				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_allocations.go:70:						HandleDeleteAllocations				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_reshaper.go:25:							HandlePostReshaper				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:33:						HandleListResourceClasses			73.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:76:						HandleCreateResourceClass			61.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:129:					handleCreateResourceClassHybrid			0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:169:					HandleShowResourceClass				71.4%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:214:					HandleUpdateResourceClass			76.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:258:					handleUpdateResourceClassHybrid			81.2%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:296:					HandleDeleteResourceClass			78.6%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:342:					handleDeleteResourceClassHybrid			81.2%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:373:					getResourceClasses				75.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:382:					parseResourceClasses				80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:398:					hasResourceClass				80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:408:					writeResourceClassesToConfigMap			81.8%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:429:					addResourceClassToConfigMap			56.4%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_classes.go:496:					removeResourceClassFromConfigMap		66.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_aggregates.go:48:				HandleListResourceProviderAggregates		87.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_aggregates.go:67:				listResourceProviderAggregatesHybrid		100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_aggregates.go:84:				listResourceProviderAggregatesCRD		66.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_aggregates.go:109:				writeAggregatesFromCRD				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_aggregates.go:133:				HandleUpdateResourceProviderAggregates		87.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_aggregates.go:152:				updateResourceProviderAggregatesHybrid		23.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_aggregates.go:210:				updateResourceProviderAggregatesCRD		71.4%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_allocations.go:18:				HandleListResourceProviderAllocations		100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_inventories.go:19:				HandleListResourceProviderInventories		100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_inventories.go:36:				HandleUpdateResourceProviderInventories		100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_inventories.go:52:				HandleDeleteResourceProviderInventories		100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_inventories.go:66:				HandleShowResourceProviderInventory		80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_inventories.go:85:				HandleUpdateResourceProviderInventory		80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_inventories.go:102:				HandleDeleteResourceProviderInventory		80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:42:					HandleListResourceProviderTraits		87.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:61:					listResourceProviderTraitsHybrid		100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:78:					listResourceProviderTraitsCRD			66.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:103:				writeTraitsFromCRD				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:125:				HandleUpdateResourceProviderTraits		87.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:144:				updateResourceProviderTraitsHybrid		23.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:202:				updateResourceProviderTraitsCRD			71.4%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:279:				HandleDeleteResourceProviderTraits		87.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:298:				deleteResourceProviderTraitsHybrid		33.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_traits.go:336:				deleteResourceProviderTraitsCRD			53.1%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_provider_usages.go:18:					HandleListResourceProviderUsages		100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:54:					translateToResourceProvider			100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:114:					HandleCreateResourceProvider			67.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:209:					HandleShowResourceProvider			64.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:279:					HandleUpdateResourceProvider			71.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:375:					HandleDeleteResourceProvider			64.5%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:454:					HandleListResourceProviders			60.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:468:					listResourceProvidersHybrid			88.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:560:					listResourceProvidersCRD			0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:589:					applyHypervisorQueryFilters			100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:616:					filterHypervisorsByUUID				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:630:					filterHypervisorsByName				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:649:					filterHypervisorsByMemberOf			100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:693:					filterHypervisorsByInTree			100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:712:					filterHypervisorsByRequired			100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:736:					matchesTraitExpr				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_resource_providers.go:778:					filterHypervisorsByResources			92.9%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_root.go:49:							HandleGetRoot					58.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_root.go:90:							staticVersionDocument				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_root.go:106:							intersectVersions				80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_root.go:133:							compareVersions					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_root.go:158:							maxVersion					66.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_root.go:165:							minVersion					66.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:40:							HandleListTraits				83.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:112:							HandleShowTrait					71.4%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:154:							HandleUpdateTrait				68.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:198:							handleUpdateTraitHybrid				0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:236:							HandleDeleteTrait				71.4%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:282:							handleDeleteTraitHybrid				0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:313:							getTraits					75.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:322:							parseTraits					80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:338:							hasTrait					80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:348:							writeTraitsToConfigMap				81.8%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:368:							addTraitToConfigMap				56.4%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_traits.go:437:							removeTraitFromConfigMap			66.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/handle_usages.go:22:							HandleListUsages				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:85:								orDefault					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:94:								valid						100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:106:								dispatchPassthroughOnly				80.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:125:								featureModeFromConfOrHeader			100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:232:								validate					91.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:342:								Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:348:								Collect						0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:355:								initHTTPClient					60.6%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:411:								initPlacementServiceClient			0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:450:								Start						0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:496:								Reconcile					0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:502:								handleRemoteHypervisor				0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:510:								predicateRemoteHypervisor			0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:520:								SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:592:								forward						100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:601:								forwardWithHook					72.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim.go:691:								RegisterRoutes					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim_io.go:24:								Read						100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim_io.go:37:								Write						100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim_io.go:61:								WriteHeader					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim_io.go:66:								Write						100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim_io.go:86:								writeJSON					55.6%
github.com/cobaltcore-dev/cortex/internal/shim/placement/shim_io.go:103:							wrapHandler					75.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_resource_classes.go:52:						NewResourceClassSyncer				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_resource_classes.go:70:						Init						70.6%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_resource_classes.go:102:					Run						26.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_resource_classes.go:134:					sync						64.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_traits.go:35:							NewTraitSyncer					100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_traits.go:53:							Init						70.6%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_traits.go:85:							Run						26.7%
github.com/cobaltcore-dev/cortex/internal/shim/placement/syncer_traits.go:117:							sync						64.3%
github.com/cobaltcore-dev/cortex/internal/shim/placement/validation.go:16:							requiredPathParam				100.0%
github.com/cobaltcore-dev/cortex/internal/shim/placement/validation.go:28:							requiredUUIDPathParam				85.7%
total:																(statements)					69.1%

@umswmayj umswmayj merged commit 86af7a6 into main May 11, 2026
8 checks passed
@umswmayj umswmayj deleted the quoat_split_crd_on_az branch May 11, 2026 06:57
umswmayj pushed a commit that referenced this pull request May 11, 2026
PR #827 split the ProjectQuota CRD into per-AZ CRDs and added a
ProjectQuotaResourceRouter in pkg/multicluster/routers.go, but this
router was never registered in the ResourceRouters map in
cmd/manager/main.go. This is the same class of bug that affected
FlavorGroupCapacity (fixed in PR #828) where the router implementation
existed but was not wired into the manager entrypoint.

Without this registration, ProjectQuota CRDs are not routed to the
correct per-AZ clusters in multi-cluster deployments, meaning quota data
would not be synced properly. This commit adds the ProjectQuota GVK and
its corresponding ProjectQuotaResourceRouter to the ResourceRouters map,
following the exact same pattern used by all other registered routers.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: cortex-ai-agents[bot] <279748396+cortex-ai-agents[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
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.

1 participant