Skip to content

feat: adding pipeline options#799

Open
mblos wants to merge 6 commits intomainfrom
pipeline-refactor-configs
Open

feat: adding pipeline options#799
mblos wants to merge 6 commits intomainfrom
pipeline-refactor-configs

Conversation

@mblos
Copy link
Copy Markdown
Collaborator

@mblos mblos commented May 5, 2026

Introduce call-time pipeline options as the foundation for consolidating duplicate pipelines — behavioral variations (lock reservations, record history, pessimistic blocking) become explicit flags instead of separate pipelines

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 5, 2026

Warning

Rate limit exceeded

@mblos has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 45 minutes before requesting another review.

To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing.

⌛ 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: bdddfa91-e91e-440f-913d-f21103eb9b7f

📥 Commits

Reviewing files that changed from the base of the PR and between d298e75 and c2d0fc2.

📒 Files selected for processing (16)
  • api/external/cinder/messages.go
  • api/external/ironcore/messages.go
  • api/external/manila/messages.go
  • api/external/nova/messages.go
  • api/external/pods/messages.go
  • internal/scheduling/lib/filter_weigher_pipeline.go
  • internal/scheduling/lib/filter_weigher_pipeline_request.go
  • internal/scheduling/lib/filter_weigher_pipeline_request_test.go
  • internal/scheduling/lib/filter_weigher_pipeline_test.go
  • internal/scheduling/lib/options.go
  • internal/scheduling/lib/options_test.go
  • internal/scheduling/nova/filter_weigher_pipeline_controller.go
  • internal/scheduling/nova/filter_weigher_pipeline_controller_test.go
  • internal/scheduling/reservations/commitments/reservation_controller.go
  • internal/scheduling/reservations/failover/reservation_scheduling.go
  • internal/scheduling/reservations/scheduler_client.go
📝 Walkthrough

Walkthrough

This PR adds per-call Options to the scheduling pipeline infrastructure, enabling dynamic control of pipeline behavior (read-only mode, reservation locking, history recording, candidate limits) at invocation time rather than only through static configuration. All filter/weigher steps, pipeline implementations, and controllers are updated to accept and propagate these options.

Changes

Scheduling Options Infrastructure and Pipeline Propagation

Layer / File(s) Summary
Options Definition & Validation
internal/scheduling/lib/options.go
Introduces Options struct with fields for ReadOnly, LockReservations, AssumeEmptyHosts, IgnoredReservationTypes, MaxCandidates, RecordHistory, CreateInflight. Adds Validate() method enforcing mutual exclusivity (e.g., ReadOnly forbids RecordHistory/CreateInflight).
Pipeline Interface & Core Implementation
internal/scheduling/lib/filter_weigher_pipeline.go, internal/scheduling/lib/filter_weigher_pipeline_step.go
Pipeline interface and concrete implementation updated to accept Options parameter in Run methods. RunFilters and runWeighers propagate options to each step. Run validates options and applies MaxCandidates trimming on result hosts.
Step Wrapper Updates
internal/scheduling/lib/filter_weigher_pipeline_step_monitor.go, internal/scheduling/lib/filter_monitor.go, internal/scheduling/lib/weigher_monitor.go, internal/scheduling/lib/filter_validation.go, internal/scheduling/lib/weigher_validation.go
Monitor and validation wrappers updated to accept and forward Options through to wrapped filter/weigher steps.
Library Tests
internal/scheduling/lib/*_test.go
Test helpers (mockFilter, mockWeigher) and test invocations updated to pass Options{} or Options values. New test TestPipeline_MaxCandidates validates candidate-limiting behavior.
Nova Controller Logic
internal/scheduling/nova/filter_weigher_pipeline_controller.go
Controller switches from unconditional sync.Mutex to sync.RWMutex. New peekReadOnly helper determines if a Decision should use read-only pipeline execution. New buildOptions method constructs per-call Options from request intent (history recording, reservation locking). History upsert moved into process guarded by opts.RecordHistory. Reconcile and ProcessNewDecisionFromAPI now select RLock vs Lock based on peek behavior.
Nova Filter/Weigher Steps
internal/scheduling/nova/plugins/filters/*.go, internal/scheduling/nova/plugins/weighers/*.go
All Nova filters (aggregate metadata, allowed projects, capabilities, correct AZ, exclude hosts, external customer, etc.) and weighers (KVM binpack, failover evacuation, instance group soft affinity, etc.) updated to accept opts lib.Options parameter. Logic bodies unchanged except filter_has_enough_capacity which now checks both s.Options.IgnoredReservationTypes and opts.IgnoredReservationTypes when deciding whether to ignore a reservation type.
Nova Tests
internal/scheduling/nova/plugins/*_test.go, internal/scheduling/nova/filter_weigher_pipeline_controller_test.go
All test files add lib import and update step invocations to pass lib.Options{}. Nova controller tests updated: "pipeline not configured" error message changed; history creation expectations flipped for failing scenarios. New TestFilterWeigherPipelineController_PeekReadOnly validates read-only peek logic across nil/invalid NovaRaw, unknown pipeline, and valid cases.
Machines, Manila, Pods Controllers & Steps
internal/scheduling/machines/*, internal/scheduling/manila/*, internal/scheduling/pods/*
All pipeline controllers updated to call pipeline.Run(request, lib.Options{}). All filter/weigher steps updated to accept opts lib.Options parameter. Machines NoopFilter changes receiver from pointer to value. All test files add lib import and pass lib.Options{} to step invocations.
Reservation Scheduling Client
internal/scheduling/reservations/scheduler_client.go, internal/scheduling/reservations/commitments/reservation_controller.go
ScheduleReservationRequest gains new Options lib.Options field with comments indicating intent-derived future wiring. Commitment controller now constructs Options{ReadOnly: false, LockReservations: true, MaxCandidates: 1, RecordHistory: false, CreateInflight: false} when building reservation schedule requests.

Sequence Diagram(s)

sequenceDiagram
    participant Controller as Pipeline Controller
    participant Pipeline as FilterWeigherPipeline
    participant Filters as Filters
    participant Weighers as Weighers

    Controller->>Controller: Peek or build Options<br/>(e.g., ReadOnly, LockReservations,<br/>RecordHistory, MaxCandidates)
    Controller->>Pipeline: Run(request, opts)
    Pipeline->>Pipeline: opts.Validate()
    Pipeline->>Filters: runFilters(request, opts)
    Filters->>Filters: For each filter: filter.Run(..., opts)
    Filters-->>Pipeline: filtered request
    Pipeline->>Weighers: runWeighers(request, opts)
    Weighers->>Weighers: For each weigher: weigher.Run(..., opts)
    Weighers-->>Pipeline: weighted activations
    Pipeline->>Pipeline: Trim by opts.MaxCandidates
    Pipeline->>Pipeline: Conditional history upsert<br/>(if RecordHistory)
    Pipeline-->>Controller: result + error
    Controller->>Controller: Handle result based on<br/>ReadOnly/RecordHistory flags
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • cobaltcore-dev/cortex#605: Adds IgnoredReservationTypes to filter options; this PR wires per-call options through so filters can consult call-time values via opts.IgnoredReservationTypes.
  • cobaltcore-dev/cortex#607: Modifies ScheduleReservationRequest struct in scheduling/reservations; this PR adds the Options field to that struct and builds options in the commitment controller.
  • cobaltcore-dev/cortex#754: Adds the KVMFailoverReservationConsolidation weigher step; this PR updates that step's Run signature to accept per-call Options.

Suggested reviewers

  • auhlig
  • juliusclausnitzer
  • umswmayj
  • SoWieMarkus

Poem

🐰 Options now flow through the pipeline so free,
Per-call configuration, no more fixed decree!
Read-only peeks, reservation locks in sight,
Candidate trimming makes scheduling just right.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 13.89% 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 'feat: adding pipeline options' directly and clearly describes the main change—introducing call-time pipeline options to configure per-pipeline-run behavior.
Description check ✅ Passed The description accurately relates to the changeset, explaining that pipeline options are being introduced to consolidate duplicate pipelines by making behavioral variations (lock reservations, record history) explicit flags.
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 pipeline-refactor-configs

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.

@mblos mblos marked this pull request as ready for review May 5, 2026 13:45
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: 6

🧹 Nitpick comments (6)
internal/scheduling/lib/weigher_test.go (1)

37-42: ⚡ Quick win

Let the mock callback receive opts for option-propagation assertions

Line [37] adds opts, but Line [41] drops it. Passing opts through RunFunc makes this mock usable for validating the new per-call options behavior.

🧪 Suggested refactor
 type mockWeigher[RequestType FilterWeigherPipelineRequest] struct {
 	InitFunc     func(ctx context.Context, client client.Client, step v1alpha1.WeigherSpec) error
 	ValidateFunc func(ctx context.Context, params v1alpha1.Parameters) error
-	RunFunc      func(traceLog *slog.Logger, request RequestType) (*FilterWeigherPipelineStepResult, error)
+	RunFunc      func(traceLog *slog.Logger, request RequestType, opts Options) (*FilterWeigherPipelineStepResult, error)
 }
@@
 func (m *mockWeigher[RequestType]) Run(traceLog *slog.Logger, request RequestType, opts Options) (*FilterWeigherPipelineStepResult, error) {
 	if m.RunFunc == nil {
 		return &FilterWeigherPipelineStepResult{}, nil
 	}
-	return m.RunFunc(traceLog, request)
+	return m.RunFunc(traceLog, request, opts)
 }
🤖 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/lib/weigher_test.go` around lines 37 - 42, The mock Run
method for mockWeigher currently accepts opts but doesn't pass it to the
configured callback, so update mockWeigher.Run to call m.RunFunc with (traceLog,
request, opts) instead of (traceLog, request) and ensure the RunFunc signature
(and any test assignments) match the three-argument form; this allows test
callbacks on RunFunc to assert per-call Options propagation for
FilterWeigherPipelineStepResult handling.
internal/scheduling/lib/filter_test.go (1)

19-19: ⚡ Quick win

RunFunc callback drops opts — tests via this mock cannot observe options-dependent behavior.

RunFunc is typed without opts (line 19), so the Run wrapper silently discards the incoming Options before calling it. As filters grow opts-aware logic, any tests exercising those branches via RunFunc will be blind to the options value.

♻️ Proposed fix
-RunFunc func(traceLog *slog.Logger, request RequestType) (*FilterWeigherPipelineStepResult, error)
+RunFunc func(traceLog *slog.Logger, request RequestType, opts Options) (*FilterWeigherPipelineStepResult, error)
 func (m *mockFilter[RequestType]) Run(traceLog *slog.Logger, request RequestType, opts Options) (*FilterWeigherPipelineStepResult, error) {
     if m.RunFunc == nil {
         return &FilterWeigherPipelineStepResult{}, nil
     }
-    return m.RunFunc(traceLog, request)
+    return m.RunFunc(traceLog, request, opts)
 }

Also applies to: 34-38

🤖 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/lib/filter_test.go` at line 19, The mock's RunFunc
callback signature currently omits the Options parameter so the Run wrapper
discards options; update the RunFunc type to accept an opts *Options (or
Options) parameter (e.g., change RunFunc func(traceLog *slog.Logger, request
RequestType, opts Options) (*FilterWeigherPipelineStepResult, error)), then
update the Run method to forward its incoming opts to RunFunc and adjust any
test mocks that set RunFunc to accept and assert on opts (also update other mock
occurrences referenced around the Run wrapper). Ensure references to RunFunc,
Run, Options, RequestType, and FilterWeigherPipelineStepResult are updated
consistently.
internal/scheduling/lib/filter_weigher_pipeline_test.go (1)

415-423: ⚡ Quick win

Use slices.Contains for host membership check.

Replace the manual loop with slices.Contains(result.OrderedHosts, host) to align with repo conventions.

As per coding guidelines: "Use slices.Contains to check if an element is part of a slice".

🤖 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/lib/filter_weigher_pipeline_test.go` around lines 415 -
423, Replace the manual membership loop that checks hosts in result.OrderedHosts
with slices.Contains(result.OrderedHosts, host) to follow repo conventions;
update the import block to include the standard library "slices" package and
remove the now-unnecessary found/loop code (references:
result.AggregatedOutWeights and result.OrderedHosts).
internal/scheduling/nova/filter_weigher_pipeline_controller.go (2)

215-227: ⚡ Quick win

Consider invoking opts.Validate() before returning.

Per internal/scheduling/lib/options.go, Options.Validate() enforces mutual exclusivity (ReadOnly vs RecordHistory/CreateInflight). Right now, no caller in this controller validates the constructed Options, so an inconsistent combination (once ReadOnly starts being set — see the related comment) would silently propagate to pipeline.Run. Calling Validate() here (or once at the start of process) would make misconfigurations fail fast, ideally with a clear status condition.

🤖 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/nova/filter_weigher_pipeline_controller.go` around lines
215 - 227, The buildOptions function currently constructs lib.Options but never
calls Options.Validate(), so invalid combinations (e.g., ReadOnly vs
RecordHistory/CreateInflight) can propagate; update
FilterWeigherPipelineController.buildOptions to call opts.Validate() after
construction and handle the returned error (e.g., propagate it to the caller or
convert it into a failed pipeline status in the calling process method),
ensuring you reference lib.Options and its Validate() method and adjust callers
of buildOptions (or process) to surface the validation error rather than
allowing an invalid opts to reach pipeline.Run.

56-83: 💤 Low value

Re-fetch on the exclusive path is good; document why the RLock path doesn't.

Re-fetching after Lock() on Lines 70-72 is sensible because the cached decision may be stale by the time the writer wins the lock. The RLock branch intentionally doesn't re-fetch (multiple readers proceed in parallel and all observe the cached state), which is fine — but a one-liner explaining that asymmetry would save the next reader a thought-experiment. No behavior concern.

🤖 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/nova/filter_weigher_pipeline_controller.go` around lines
56 - 83, Add a short explanatory comment in Reconcile next to the RLock branch
(around the call to c.processMu.RLock() / c.processMu.RUnlock()) stating that
readers intentionally do not re-fetch the Decision after acquiring the read lock
because multiple concurrent readers should observe the same cached state and
re-fetching would be unnecessary/expensive; keep the existing re-fetch only on
the exclusive Lock path (used when peekReadOnly(decision) is false) to ensure
writers see a consistent, up-to-date object.
internal/scheduling/lib/filter_weigher_pipeline.go (1)

305-311: ⚡ Quick win

Avoid quadratic containment checks when trimming candidates.

Line 309 currently does slices.Contains(hosts, host) inside a loop over outWeights. Building a small set of kept hosts avoids O(n²) behavior on larger host lists.

♻️ Proposed optimization
 if opts.MaxCandidates > 0 && len(hosts) > opts.MaxCandidates {
 	hosts = hosts[:opts.MaxCandidates]
 	// Drop trimmed hosts from outWeights so AggregatedOutWeights stays consistent.
+	kept := make(map[string]struct{}, len(hosts))
+	for _, host := range hosts {
+		kept[host] = struct{}{}
+	}
 	for host := range outWeights {
-		if !slices.Contains(hosts, host) {
+		if _, ok := kept[host]; !ok {
 			delete(outWeights, host)
 		}
 	}
 }
🤖 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/lib/filter_weigher_pipeline.go` around lines 305 - 311,
When trimming hosts into opts.MaxCandidates, avoid the quadratic check by first
constructing a small lookup set of the kept hosts (e.g. kept :=
map[string]struct{} and populate it from hosts[:opts.MaxCandidates]) and then
iterate over outWeights deleting entries where the host key is not present in
that set; replace slices.Contains(hosts, host) with a constant-time map lookup.
Update references around hosts, outWeights and the trimming block in
filter_weigher_pipeline.go accordingly.
🤖 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/lib/options.go`:
- Around line 40-45: The validation currently returns error messages that start
with uppercase letters; update the error strings returned when o.ReadOnly &&
o.RecordHistory and when o.ReadOnly && o.CreateInflight to start with lowercase
(e.g. change "ReadOnly and RecordHistory are mutually exclusive: ..." to
"readOnly and recordHistory are mutually exclusive: ..." or similar lowercase
wording) in the function that checks o.ReadOnly, o.RecordHistory and
o.CreateInflight so they satisfy the lint rule; keep the same descriptive text
but make the first character lowercase for both error.New(...) calls.

In `@internal/scheduling/machines/filter_weigher_pipeline_controller.go`:
- Line 147: process() currently calls pipeline.Run(request, lib.Options{}) which
always passes a zero-value lib.Options and thus drops flags like RecordHistory;
to fix, retrieve the pipeline config from c.PipelineConfigs using
decision.Spec.PipelineRef.Name (accessible via the embedded
BasePipelineController), construct an Options struct (similar to
buildOptions(request, pipelineConf) used in Nova) that at minimum sets
RecordHistory = pipelineConf.Spec.CreateHistory (and copies any other relevant
pipeline-level flags), and pass that Options into pipeline.Run instead of
lib.Options{} so history recording and other flags are honored.

In `@internal/scheduling/manila/filter_weigher_pipeline_controller.go`:
- Line 124: process() currently calls pipeline.Run(request, lib.Options{}) which
forces opts.RecordHistory=false and diverges from the Nova controller pattern;
fix by retrieving the matching pipelineConf from c.PipelineConfigs (using the
request/pipeline identifier present in process()) and build options the same way
buildOptions(request, pipelineConf) does so that opts.RecordHistory =
pipelineConf.Spec.CreateHistory before calling pipeline.Run; alternatively,
change process() to accept an opts lib.Options parameter propagated from callers
and pass that opts into pipeline.Run instead of lib.Options{}—update all call
sites accordingly.

In `@internal/scheduling/nova/filter_weigher_pipeline_controller.go`:
- Around line 40-42: buildOptions never sets Options.ReadOnly, so peekReadOnly
and the RLock paths are dead; change buildOptions to set opts.ReadOnly = true
when the run will not mutate state (e.g., when RecordHistory, CreateInflight and
LockReservations are all false) so peekReadOnly(decision) can return true and
the RLock branches in Reconcile and ProcessNewDecisionFromAPI become reachable;
update buildOptions (the function that constructs Options), reference
Options.ReadOnly, peekReadOnly, and processMu, and run/update any affected
tests.
- Around line 199-212: peekReadOnly reads c.PipelineConfigs without
synchronization and races with
HandlePipelineCreated/HandlePipelineUpdated/HandlePipelineDeleted; fix by
acquiring the controller's read lock around accesses to the map (use
c.processMu.RLock() / defer c.processMu.RUnlock()) in peekReadOnly (surround the
lookup of c.PipelineConfigs[decision.Spec.PipelineRef.Name] and any subsequent
use until you return), ensuring all early returns still release the lock;
alternatively, if you prefer map-level sync in BasePipelineController, ensure
mutations in HandlePipelineCreated/Updated/Deleted take the same lock, but the
simplest change is adding RLock/RUnlock in peekReadOnly around the map access
and before calling buildOptions.

In `@internal/scheduling/reservations/scheduler_client.go`:
- Around line 82-85: ScheduleReservation currently ignores the Options field
declared on the request (Options in the struct) because ScheduleReservation
builds externalSchedulerRequest without copying LockReservations/MaxCandidates
from req.Options, so caller-set LockReservations/MaxCandidates (e.g., in
reservation_controller.go) are effectively no-ops; add a prominent TODO comment
at the top of the ScheduleReservation function stating that Options are not
propagated to the externalSchedulerRequest today, list the specific fields
dropped (LockReservations, MaxCandidates), reference reservation_controller.go
and externalSchedulerRequest, and include a tracking issue or TODO ID (e.g.,
TODO: propagate Options once direct-call path exists — TRACK-XXXX) so future
changes know to either copy req.Options into externalSchedulerRequest or wire a
direct Go call.

---

Nitpick comments:
In `@internal/scheduling/lib/filter_test.go`:
- Line 19: The mock's RunFunc callback signature currently omits the Options
parameter so the Run wrapper discards options; update the RunFunc type to accept
an opts *Options (or Options) parameter (e.g., change RunFunc func(traceLog
*slog.Logger, request RequestType, opts Options)
(*FilterWeigherPipelineStepResult, error)), then update the Run method to
forward its incoming opts to RunFunc and adjust any test mocks that set RunFunc
to accept and assert on opts (also update other mock occurrences referenced
around the Run wrapper). Ensure references to RunFunc, Run, Options,
RequestType, and FilterWeigherPipelineStepResult are updated consistently.

In `@internal/scheduling/lib/filter_weigher_pipeline_test.go`:
- Around line 415-423: Replace the manual membership loop that checks hosts in
result.OrderedHosts with slices.Contains(result.OrderedHosts, host) to follow
repo conventions; update the import block to include the standard library
"slices" package and remove the now-unnecessary found/loop code (references:
result.AggregatedOutWeights and result.OrderedHosts).

In `@internal/scheduling/lib/filter_weigher_pipeline.go`:
- Around line 305-311: When trimming hosts into opts.MaxCandidates, avoid the
quadratic check by first constructing a small lookup set of the kept hosts (e.g.
kept := map[string]struct{} and populate it from hosts[:opts.MaxCandidates]) and
then iterate over outWeights deleting entries where the host key is not present
in that set; replace slices.Contains(hosts, host) with a constant-time map
lookup. Update references around hosts, outWeights and the trimming block in
filter_weigher_pipeline.go accordingly.

In `@internal/scheduling/lib/weigher_test.go`:
- Around line 37-42: The mock Run method for mockWeigher currently accepts opts
but doesn't pass it to the configured callback, so update mockWeigher.Run to
call m.RunFunc with (traceLog, request, opts) instead of (traceLog, request) and
ensure the RunFunc signature (and any test assignments) match the three-argument
form; this allows test callbacks on RunFunc to assert per-call Options
propagation for FilterWeigherPipelineStepResult handling.

In `@internal/scheduling/nova/filter_weigher_pipeline_controller.go`:
- Around line 215-227: The buildOptions function currently constructs
lib.Options but never calls Options.Validate(), so invalid combinations (e.g.,
ReadOnly vs RecordHistory/CreateInflight) can propagate; update
FilterWeigherPipelineController.buildOptions to call opts.Validate() after
construction and handle the returned error (e.g., propagate it to the caller or
convert it into a failed pipeline status in the calling process method),
ensuring you reference lib.Options and its Validate() method and adjust callers
of buildOptions (or process) to surface the validation error rather than
allowing an invalid opts to reach pipeline.Run.
- Around line 56-83: Add a short explanatory comment in Reconcile next to the
RLock branch (around the call to c.processMu.RLock() / c.processMu.RUnlock())
stating that readers intentionally do not re-fetch the Decision after acquiring
the read lock because multiple concurrent readers should observe the same cached
state and re-fetching would be unnecessary/expensive; keep the existing re-fetch
only on the exclusive Lock path (used when peekReadOnly(decision) is false) to
ensure writers see a consistent, up-to-date object.
🪄 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: 7d607a9c-4902-493e-b539-38709b8ba3a9

📥 Commits

Reviewing files that changed from the base of the PR and between b4f040a and d298e75.

📒 Files selected for processing (90)
  • internal/scheduling/cinder/filter_weigher_pipeline_controller.go
  • internal/scheduling/lib/filter_monitor.go
  • internal/scheduling/lib/filter_monitor_test.go
  • internal/scheduling/lib/filter_test.go
  • internal/scheduling/lib/filter_validation.go
  • internal/scheduling/lib/filter_validation_test.go
  • internal/scheduling/lib/filter_weigher_pipeline.go
  • internal/scheduling/lib/filter_weigher_pipeline_step.go
  • internal/scheduling/lib/filter_weigher_pipeline_step_monitor.go
  • internal/scheduling/lib/filter_weigher_pipeline_step_monitor_test.go
  • internal/scheduling/lib/filter_weigher_pipeline_test.go
  • internal/scheduling/lib/options.go
  • internal/scheduling/lib/weigher_monitor.go
  • internal/scheduling/lib/weigher_monitor_test.go
  • internal/scheduling/lib/weigher_test.go
  • internal/scheduling/lib/weigher_validation.go
  • internal/scheduling/lib/weigher_validation_test.go
  • internal/scheduling/machines/filter_weigher_pipeline_controller.go
  • internal/scheduling/machines/filter_weigher_pipeline_controller_test.go
  • internal/scheduling/machines/plugins/filters/filter_noop.go
  • internal/scheduling/machines/plugins/filters/filter_noop_test.go
  • internal/scheduling/manila/filter_weigher_pipeline_controller.go
  • internal/scheduling/manila/plugins/weighers/netapp_cpu_usage_balancing.go
  • internal/scheduling/manila/plugins/weighers/netapp_cpu_usage_balancing_test.go
  • internal/scheduling/nova/filter_weigher_pipeline_controller.go
  • internal/scheduling/nova/filter_weigher_pipeline_controller_test.go
  • internal/scheduling/nova/plugins/filters/filter_aggregate_metadata.go
  • internal/scheduling/nova/plugins/filters/filter_aggregate_metadata_test.go
  • internal/scheduling/nova/plugins/filters/filter_allowed_projects.go
  • internal/scheduling/nova/plugins/filters/filter_allowed_projects_test.go
  • internal/scheduling/nova/plugins/filters/filter_capabilities.go
  • internal/scheduling/nova/plugins/filters/filter_capabilities_test.go
  • internal/scheduling/nova/plugins/filters/filter_correct_az.go
  • internal/scheduling/nova/plugins/filters/filter_correct_az_test.go
  • internal/scheduling/nova/plugins/filters/filter_exclude_hosts.go
  • internal/scheduling/nova/plugins/filters/filter_exclude_hosts_test.go
  • internal/scheduling/nova/plugins/filters/filter_external_customer.go
  • internal/scheduling/nova/plugins/filters/filter_external_customer_test.go
  • internal/scheduling/nova/plugins/filters/filter_has_accelerators.go
  • internal/scheduling/nova/plugins/filters/filter_has_accelerators_test.go
  • internal/scheduling/nova/plugins/filters/filter_has_enough_capacity.go
  • internal/scheduling/nova/plugins/filters/filter_has_enough_capacity_test.go
  • internal/scheduling/nova/plugins/filters/filter_has_requested_traits.go
  • internal/scheduling/nova/plugins/filters/filter_has_requested_traits_test.go
  • internal/scheduling/nova/plugins/filters/filter_host_instructions.go
  • internal/scheduling/nova/plugins/filters/filter_host_instructions_test.go
  • internal/scheduling/nova/plugins/filters/filter_instance_group_affinity.go
  • internal/scheduling/nova/plugins/filters/filter_instance_group_affinity_test.go
  • internal/scheduling/nova/plugins/filters/filter_instance_group_anti_affinity.go
  • internal/scheduling/nova/plugins/filters/filter_instance_group_anti_affinity_test.go
  • internal/scheduling/nova/plugins/filters/filter_live_migratable.go
  • internal/scheduling/nova/plugins/filters/filter_live_migratable_test.go
  • internal/scheduling/nova/plugins/filters/filter_requested_destination.go
  • internal/scheduling/nova/plugins/filters/filter_requested_destination_test.go
  • internal/scheduling/nova/plugins/filters/filter_status_conditions.go
  • internal/scheduling/nova/plugins/filters/filter_status_conditions_test.go
  • internal/scheduling/nova/plugins/weighers/kvm_binpack.go
  • internal/scheduling/nova/plugins/weighers/kvm_binpack_test.go
  • internal/scheduling/nova/plugins/weighers/kvm_failover_evacuation.go
  • internal/scheduling/nova/plugins/weighers/kvm_failover_evacuation_test.go
  • internal/scheduling/nova/plugins/weighers/kvm_failover_reservation_consolidation.go
  • internal/scheduling/nova/plugins/weighers/kvm_failover_reservation_consolidation_test.go
  • internal/scheduling/nova/plugins/weighers/kvm_instance_group_soft_affinity.go
  • internal/scheduling/nova/plugins/weighers/kvm_instance_group_soft_affinity_test.go
  • internal/scheduling/nova/plugins/weighers/kvm_prefer_smaller_hosts.go
  • internal/scheduling/nova/plugins/weighers/kvm_prefer_smaller_hosts_test.go
  • internal/scheduling/nova/plugins/weighers/vmware_anti_affinity_noisy_projects.go
  • internal/scheduling/nova/plugins/weighers/vmware_anti_affinity_noisy_projects_test.go
  • internal/scheduling/nova/plugins/weighers/vmware_avoid_long_term_contended_hosts.go
  • internal/scheduling/nova/plugins/weighers/vmware_avoid_long_term_contended_hosts_test.go
  • internal/scheduling/nova/plugins/weighers/vmware_avoid_short_term_contended_hosts.go
  • internal/scheduling/nova/plugins/weighers/vmware_avoid_short_term_contended_hosts_test.go
  • internal/scheduling/nova/plugins/weighers/vmware_binpack.go
  • internal/scheduling/nova/plugins/weighers/vmware_binpack_test.go
  • internal/scheduling/pods/filter_weigher_pipeline_controller.go
  • internal/scheduling/pods/filter_weigher_pipeline_controller_test.go
  • internal/scheduling/pods/plugins/filters/filter_node_affinity.go
  • internal/scheduling/pods/plugins/filters/filter_node_affinity_test.go
  • internal/scheduling/pods/plugins/filters/filter_node_available.go
  • internal/scheduling/pods/plugins/filters/filter_node_available_test.go
  • internal/scheduling/pods/plugins/filters/filter_node_capacity.go
  • internal/scheduling/pods/plugins/filters/filter_node_capacity_test.go
  • internal/scheduling/pods/plugins/filters/filter_noop.go
  • internal/scheduling/pods/plugins/filters/filter_noop_test.go
  • internal/scheduling/pods/plugins/filters/filter_taint.go
  • internal/scheduling/pods/plugins/filters/filter_taint_test.go
  • internal/scheduling/pods/plugins/weighers/binpack.go
  • internal/scheduling/pods/plugins/weighers/binpack_test.go
  • internal/scheduling/reservations/commitments/reservation_controller.go
  • internal/scheduling/reservations/scheduler_client.go

Comment on lines +40 to +45
if o.ReadOnly && o.RecordHistory {
return errors.New("ReadOnly and RecordHistory are mutually exclusive: read-only runs must not mutate state")
}
if o.ReadOnly && o.CreateInflight {
return errors.New("ReadOnly and CreateInflight are mutually exclusive: read-only runs must not mutate state")
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Use lowercase error messages to satisfy linting

At Line [41] and Line [44], error strings start with uppercase words. This can fail lint checks in this repo.

🔧 Suggested patch
-		return errors.New("ReadOnly and RecordHistory are mutually exclusive: read-only runs must not mutate state")
+		return errors.New("readonly and record history are mutually exclusive: read-only runs must not mutate state")
 	}
 	if o.ReadOnly && o.CreateInflight {
-		return errors.New("ReadOnly and CreateInflight are mutually exclusive: read-only runs must not mutate state")
+		return errors.New("readonly and create inflight are mutually exclusive: read-only runs must not mutate state")
 	}

As per coding guidelines: "Error messages should always be lowercase to conform to linting rules".

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if o.ReadOnly && o.RecordHistory {
return errors.New("ReadOnly and RecordHistory are mutually exclusive: read-only runs must not mutate state")
}
if o.ReadOnly && o.CreateInflight {
return errors.New("ReadOnly and CreateInflight are mutually exclusive: read-only runs must not mutate state")
}
if o.ReadOnly && o.RecordHistory {
return errors.New("readonly and record history are mutually exclusive: read-only runs must not mutate state")
}
if o.ReadOnly && o.CreateInflight {
return errors.New("readonly and create inflight are mutually exclusive: read-only runs must not mutate state")
}
🤖 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/lib/options.go` around lines 40 - 45, The validation
currently returns error messages that start with uppercase letters; update the
error strings returned when o.ReadOnly && o.RecordHistory and when o.ReadOnly &&
o.CreateInflight to start with lowercase (e.g. change "ReadOnly and
RecordHistory are mutually exclusive: ..." to "readOnly and recordHistory are
mutually exclusive: ..." or similar lowercase wording) in the function that
checks o.ReadOnly, o.RecordHistory and o.CreateInflight so they satisfy the lint
rule; keep the same descriptive text but make the first character lowercase for
both error.New(...) calls.

// Execute the scheduling pipeline.
request := ironcore.MachinePipelineRequest{Pools: pools.Items}
result, err := pipeline.Run(request)
result, err := pipeline.Run(request, lib.Options{})
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

process() passes empty lib.Options{}, silently dropping RecordHistory and other pipeline-level flags.

Unlike the Nova controller — which calls buildOptions(request, pipelineConf) to set at minimum RecordHistory: pipelineConf.Spec.CreateHistoryprocess() here has no access to pipelineConf and always passes a zero-value Options{}. If the pipeline already consumes opts.RecordHistory, history recording will be disabled even when pipelineConf.Spec.CreateHistory is true.

c.PipelineConfigs[decision.Spec.PipelineRef.Name] is reachable inside process() (via the embedded BasePipelineController), so a buildOptions()-style helper can be added here without restructuring the call chain.

💡 Suggested approach
+func (c *FilterWeigherPipelineController) buildOptions(pipelineConf v1alpha1.Pipeline) lib.Options {
+	return lib.Options{
+		RecordHistory: pipelineConf.Spec.CreateHistory,
+	}
+}

 func (c *FilterWeigherPipelineController) process(ctx context.Context, decision *v1alpha1.Decision) error {
 	...
 	pipeline, ok := c.Pipelines[decision.Spec.PipelineRef.Name]
 	if !ok { ... }
+	pipelineConf, ok := c.PipelineConfigs[decision.Spec.PipelineRef.Name]
+	if !ok {
+		return errors.New("pipeline config not found")
+	}
 	...
-	result, err := pipeline.Run(request, lib.Options{})
+	result, err := pipeline.Run(request, c.buildOptions(pipelineConf))
🤖 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/machines/filter_weigher_pipeline_controller.go` at line
147, process() currently calls pipeline.Run(request, lib.Options{}) which always
passes a zero-value lib.Options and thus drops flags like RecordHistory; to fix,
retrieve the pipeline config from c.PipelineConfigs using
decision.Spec.PipelineRef.Name (accessible via the embedded
BasePipelineController), construct an Options struct (similar to
buildOptions(request, pipelineConf) used in Nova) that at minimum sets
RecordHistory = pipelineConf.Spec.CreateHistory (and copies any other relevant
pipeline-level flags), and pass that Options into pipeline.Run instead of
lib.Options{} so history recording and other flags are honored.

Comment thread internal/scheduling/manila/filter_weigher_pipeline_controller.go Outdated
Comment thread internal/scheduling/nova/filter_weigher_pipeline_controller.go
Comment thread internal/scheduling/nova/filter_weigher_pipeline_controller.go Outdated
Comment thread internal/scheduling/reservations/scheduler_client.go Outdated
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

Test Coverage Report

Test Coverage 📊: 69.2%
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:54:				NewNovaAPI					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:59:				Init						81.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:85:				GetAllServers					82.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:153:				GetDeletedServers				82.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:216:				GetAllHypervisors				82.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:278:				GetAllFlavors					68.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:315:				GetAllMigrations				82.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_api.go:376:				GetAllAggregates				0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:29:				Init						90.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:53:				Sync						50.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:75:				SyncAllServers					57.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:98:				SyncDeletedServers				64.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:128:			SyncAllHypervisors				57.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:152:			SyncAllFlavors					57.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:174:			SyncAllMigrations				57.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_sync.go:196:			SyncAllAggregates				57.1%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:36:			UnmarshalJSON					77.8%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:59:			MarshalJSON					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:79:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:82:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:134:			UnmarshalJSON					52.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:173:			MarshalJSON					88.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:210:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:213:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:246:			UnmarshalJSON					80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:282:			MarshalJSON					85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:314:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:317:			Indexes						100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:359:			GetHypervisorType				71.4%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:385:			UnmarshalJSON					54.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:408:			MarshalJSON					55.6%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:429:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:432:			Indexes						100.0%
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:480:			TableName					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/datasources/plugins/openstack/nova/nova_types.go:483:			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/flavor_running_vms.go:37:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/flavor_running_vms.go:41:				Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/flavor_running_vms.go:60:				Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/flavor_running_vms.go:64:				Collect						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/host_running_vms.go:42:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/host_running_vms.go:46:				Init						75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/host_running_vms.go:69:				Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/host_running_vms.go:73:				Collect						66.7%
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/resource_capacity_kvm.go:29:				getResourceCapacity				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/resource_capacity_kvm.go:46:				getResourceAllocation				83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/resource_capacity_kvm.go:58:				getLabels					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/resource_capacity_kvm.go:91:				getBuildingBlock				75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/resource_capacity_kvm.go:112:				GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/resource_capacity_kvm.go:116:				Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/resource_capacity_kvm.go:158:				Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/resource_capacity_kvm.go:165:				aggregateReservationsByHost			91.9%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/resource_capacity_kvm.go:233:				getHypervisors					85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/resource_capacity_kvm.go:246:				Collect						91.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/resource_capacity_kvm.go:331:				emitTotal					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/compute/resource_capacity_kvm.go:349:				emitUsage					100.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/shared.go:28:					getHostLabels					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:68:					getMetricName					75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:87:					isKVMFlavor					100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:106:					flavorCPUArchitecture				100.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/shared.go:128:					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_utilization.go:51:		GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:55:		Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:73:		Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:78:		Collect						63.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:136:		getVMwareHosts					83.3%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:159:		queryProjectCapacityUsage			80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_project_utilization.go:191:		queryProjectInstanceCount			80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_resource_commitments.go:35:		GetName						0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_resource_commitments.go:39:		Init						80.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_resource_commitments.go:57:		Describe					0.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_resource_commitments.go:62:		Collect						62.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_resource_commitments.go:78:		getFlavorsByName				85.7%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_resource_commitments.go:91:		getGeneralPurposeCommitments			75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_resource_commitments.go:106:		getGeneralPurposeServers			87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_resource_commitments.go:125:		getHanaInstanceCommitments			75.0%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_resource_commitments.go:139:		getRunningHanaServers				87.5%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_resource_commitments.go:159:		collectGeneralPurpose				74.2%
github.com/cobaltcore-dev/cortex/internal/knowledge/kpis/plugins/infrastructure/vmware_resource_commitments.go:216:		collectHana					88.9%
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:29:							NewNovaReader					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:34:							GetAllServers					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:44:							GetAllFlavors					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:54:							GetAllHypervisors				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:64:							GetAllMigrations				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:74:							GetAllAggregates				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:85:							GetServerByID					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/external/nova.go:99:							GetFlavorByName					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:46:						InitNewFilterWeigherPipeline			86.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:139:					runFilters					75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:172:					runWeighers					81.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:213:					normalizeInputWeights				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:222:					applyWeights					80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:258:					sortHostsByWeights				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline.go:268:					Run						94.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:50:					Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step.go:65:					Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step.go:77:					IncludeAllHostsFromRequest			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/filter_weigher_pipeline_step.go:87:					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:216:				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				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/history_client.go:132:							CreateOrUpdateHistory				70.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/history_client.go:281:							Delete						80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/lib/options.go:41:								Validate					100.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/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					76.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:86:				ProcessNewDecisionFromAPI			80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:114:				upsertHistory					81.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:135:				process						84.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:202:				peekReadOnly					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:213:				InitPipeline					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/filter_weigher_pipeline_controller.go:226:				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:44:				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:30:			Validate					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_enough_capacity.go:60:			Run						81.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/nova/plugins/filters/filter_has_enough_capacity.go:361:			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:55:			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:100:		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:113:			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/commitments/api/change_commitments.go:32:			sortedKeys					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:58:			HandleChangeCommitments				78.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:131:			processCommitmentChanges			85.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:330:			watchCRsUntilReady				85.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:398:			rollbackCR					72.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/change_commitments.go:435:			applyCRSpec					94.4%
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:33:				NewAPI						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/handler.go:38:				NewAPIWithConfig				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/handler.go:50:				Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/handler.go:67:				handleProjectEndpoint				60.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info.go:29:					HandleInfo					96.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info.go:81:					recordInfoMetrics				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/api/info.go:101:					buildServiceInfo				90.9%
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:19:					HandleQuota					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:22:					NewCapacityCalculator				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/capacity.go:30:					CalculateCapacity				94.1%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/capacity.go:85:					copyAZCapacity					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/capacity.go:99:					calculateAZCapacity				100.0%
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:35:		Reconcile					81.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:82:		reconcilePending				60.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:117:		reconcileCommitted				88.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:157:		applyReservationState				93.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:184:		checkChildReservationStatus			85.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:230:		setAccepted					88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:249:		reconcileInactive				75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:257:		reconcileDeletion				71.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:271:		deleteChildReservations				75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:290:		rollbackToAccepted				72.2%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:318:		setNotReady					80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/committed_resource_controller.go:334:		SetupWithManager				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:87:					ResourceConfigForGroup				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/config.go:99:					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:51:					CheckCommitmentsInfoEndpoint			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:88:					CheckCommitmentsRoundTrip			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:118:				e2eRoundTripResource				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:203:				e2eCheckUsageAPI				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:224:				e2eSendChangeCommitments			0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:246:				e2eFetchServiceInfo				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:264:				e2eBaseURL					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/e2e_checks.go:272:				RunCommitmentsE2EChecks				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/field_index.go:20:				IndexFields					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:49:			echoParentGeneration				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:62:			Reconcile					65.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:365:			reconcileAllocations				80.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:501:			getPipelineForFlavorGroup			66.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:520:			hypervisorToReservations			84.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:543:			Init						100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_controller.go:584:			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:223:			syncReservationMetadata				82.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/reservation_manager.go:271:			newReservation					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:33:					ResourceNameRAM					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:39:					ResourceNameCores				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:45:					ResourceNameInstances				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:52:					GetFlavorGroupNameFromResource			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:110:					FromCommitment					83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:159:					FromChangeCommitmentTargetState			90.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:227:					FromCommittedResource				91.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/state.go:258:					FromReservations				95.5%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:47:					NewSyncer					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:55:					Init						75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:72:					getCommitmentStates				66.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:193:					SyncReservations				59.8%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:385:					applyCommittedResourceSpec			83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:411:					upsertCommittedResource				88.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:430:					updateCommittedResourceIfExists			83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/syncer.go:451:					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:59:					NewCommitmentStateWithUsage			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:69:					AssignVM					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:79:					HasRemainingCapacity				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:108:					NewUsageCalculator				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:116:					CalculateUsage					83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:166:					azFlavorGroupKey				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:172:					buildCommitmentCapacityMap			83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:239:					getProjectVMs					87.9%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:330:					sortVMsForUsageCalculation			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:349:					sortCommitmentsForAssignment			92.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:377:					assignVMsToCommitments				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:422:					buildUsageResponse				96.4%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:555:					buildVMAttributes				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:582:					countCommitmentStates				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:599:					NewDBUsageClient				0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:603:					getReader					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/commitments/usage.go:633:					ListProjectVMs					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:34:			queryHypervisorsFromScheduler			82.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_scheduling.go:115:			tryReuseExistingReservation			83.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_scheduling.go:174:			validateVMViaSchedulerEvacuation		0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/reservation_scheduling.go:255:			scheduleAndBuildNewFailoverReservation		75.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:58:					NewDBVMSource					100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:63:					ListVMs						78.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:146:					parseExtraSpecs					28.6%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:161:					truncateString					0.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:170:					GetVM						86.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:220:					ListVMsOnHypervisors				27.3%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:264:					buildVMsFromHypervisors				66.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:333:					filterVMsOnKnownHypervisors			100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/failover/vm_source.go:402:					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						85.7%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/flavor_groups.go:60:						GetAllFlavorGroups				85.7%
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/scheduler_client.go:26:					loggerFromContext				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/scheduler_client.go:45:					NewSchedulerClient				100.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/scheduler_client.go:93:					ScheduleReservation				73.0%
github.com/cobaltcore-dev/cortex/internal/scheduling/reservations/scheduler_client.go:205:					getSchedulerHints				66.7%
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.2%

Copy link
Copy Markdown
Member

@PhilippMatthes PhilippMatthes left a comment

Choose a reason for hiding this comment

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

I like the idea of extending the external scheduler request(s) with an options struct. However, we should go over the fields exposed by this struct once again. I am not sure about putting it under internal/scheduling/lib as we have lots of fields that will only be used by the Nova integration of cortex. So, why not put the options struct under the nova external scheduler request struct? In that way, you don't need to extend the lib interface and conform all other packages.

// Run the filter and observe its execution.
func (fm *FilterMonitor[RequestType]) Run(traceLog *slog.Logger, request RequestType) (*FilterWeigherPipelineStepResult, error) {
return fm.monitor.RunWrapped(traceLog, request, fm.filter)
func (fm *FilterMonitor[RequestType]) Run(traceLog *slog.Logger, request RequestType, opts Options) (*FilterWeigherPipelineStepResult, error) {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

request RequestType is constrained by type FilterWeigherPipelineRequest interface which now carries the new GetOptions() method. So we should remove all additional opts Options parameters.

// Run filters first to reduce the number of hosts.
// Any weights assigned to filtered out hosts are ignored.
filteredRequest, filterStepResults := p.runFilters(traceLog, request)
filteredRequest, filterStepResults := p.runFilters(traceLog, request, opts)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Please revert this change. Scheduler steps can get the options from the provided request.

}
}
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Please provide logging here so we see what's going on.

// which are static and set when the pipeline is initialized.
//
// Consumed by steps: ReadOnly, LockReservations, AssumeEmptyHosts, IgnoredReservationTypes.
// Consumed by the controller after pipeline.Run(): RecordHistory, CreateInflight.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

These two code comment lines are likely to be obsolete once the controller or step logic changes. We should consider removing them.

type Options struct {
// ReadOnly means the pipeline run does not modify shared scheduling state (reservations,
// history, inflight records). Concurrent read-only runs are safe under a shared read lock.
// Note: the controller may still write the Decision status after Run() regardless of this flag.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This seems inconsistent. Shouldn't we draw the line here? Read-only requests create or modify NO resources and are purely to calculate host candidates for constraints.

ReadOnly bool
// LockReservations prevents reservation unlocking, e.g. in the capacity filter.
// Set when finding hosts for new reservations (failover, CR) to see true available capacity.
LockReservations bool
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Should this be more generic such as Kind which is a typed enum? In this case, the capacity filter would just check for req.GetOptions().Kind == KindFailoverReservation to control which logic is executed. We could also add a kind KindCapacityScan for limes etc. -- this is nicely extensible and well-defined. In this case, the ReadOnly, AssumeEmptyHosts, and CreateInFlight flags could also be removed.

// AssumeEmptyHosts treats all hosts as having no running VMs.
AssumeEmptyHosts bool
// IgnoredReservationTypes lists reservation types the capacity filter skips entirely.
IgnoredReservationTypes []v1alpha1.ReservationType
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Should we make this a substruct such as type ReservationOptions struct?

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants