Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,15 @@ edition = "2024"
authors = ["Balavignesh"]
license = "MIT"
repository = "https://github.com/SBALAVIGNESH123/OmniKV"

[workspace.lints.clippy]
all = { level = "warn", priority = -1 }
pedantic = { level = "warn", priority = -1 }
nursery = { level = "warn", priority = -1 }

[workspace.lints.rust]
dead_code = "warn"
unused_imports = "warn"
unused_mut = "warn"
unused_variables = "warn"
mismatched_lifetime_syntaxes = "warn"
3 changes: 3 additions & 0 deletions crates/omnikv-engine/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ path = "src/lib.rs"
default = []
failpoints = []

[lints]
workspace = true

[dependencies]
memmap2 = "0.9.11"
tokio = { version = "1.52.1", features = ["full", "macros"] }
Expand Down
10 changes: 10 additions & 0 deletions crates/omnikv-engine/benches/omni_bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@
//! cargo bench -p omnikv-engine --bench omni_bench
//! cargo bench -p omnikv-engine --bench omni_bench -- --soak 600 # 10-min soak

#![expect(
clippy::cast_possible_truncation,
clippy::cast_precision_loss,
clippy::cast_sign_loss,
clippy::doc_markdown,
clippy::too_many_lines,
clippy::uninlined_format_args,
reason = "Benchmark harness keeps readable numeric reporting and CLI output; strict clippy findings are tracked separately from production engine code."
)]

use omni_engine::{OmniKV, WriteBatch};
use std::sync::Arc;
use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};
Expand Down
6 changes: 6 additions & 0 deletions crates/omnikv-engine/benches/scan_buffer_pool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@
//! cargo bench -p omnikv-engine --bench scan_buffer_pool
//! cargo bench -p omnikv-engine --bench scan_buffer_pool -- --rows 20000 --rounds 20

#![expect(
clippy::cast_precision_loss,
clippy::doc_markdown,
reason = "Scan benchmark keeps CLI docs and throughput math simple for before/after comparisons."
)]

use omni_engine::{OmniKV, WriteBatch};
use std::time::{Duration, Instant};
use tempfile::TempDir;
Expand Down
7 changes: 7 additions & 0 deletions crates/omnikv-engine/benches/volcano_dispatch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@
//! cargo bench -p omnikv-engine --bench volcano_dispatch
//! cargo bench -p omnikv-engine --bench volcano_dispatch -- --rows 200000 --rounds 5

#![expect(
clippy::cast_precision_loss,
clippy::doc_markdown,
clippy::missing_const_for_fn,
reason = "Dispatch benchmark favors readable throughput math and CLI documentation over style-only rewrites."
)]

use omni_engine::sql::{AggFunc, CmpOp, SelectColumn, SqlValue, WhereExpr};
use omni_engine::sql_exec::Row;
use omni_engine::volcano::{
Expand Down
64 changes: 59 additions & 5 deletions crates/omnikv-engine/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,62 @@
#![allow(dead_code)]
#![allow(unused_imports)]
#![allow(unused_variables)]
#![allow(unused_mut)]
#![allow(mismatched_lifetime_syntaxes)]
#![expect(
dead_code,
unused_imports,
unused_variables,
reason = "Legacy modules still expose staged database features and compatibility shims; issue #64 makes this debt explicit instead of hiding it behind broad allow attributes."
)]
#![expect(
clippy::assigning_clones,
clippy::bool_to_int_with_if,
clippy::branches_sharing_code,
clippy::cast_lossless,
clippy::cast_possible_truncation,
clippy::cast_possible_wrap,
clippy::cast_precision_loss,
clippy::cast_sign_loss,
clippy::collapsible_else_if,
clippy::collection_is_never_read,
clippy::derive_partial_eq_without_eq,
clippy::doc_markdown,
clippy::explicit_iter_loop,
clippy::format_collect,
clippy::format_push_string,
clippy::if_not_else,
clippy::ignored_unit_patterns,
clippy::items_after_statements,
clippy::manual_let_else,
clippy::manual_string_new,
clippy::map_unwrap_or,
clippy::match_same_arms,
clippy::match_wildcard_for_single_variants,
clippy::missing_const_for_fn,
clippy::missing_errors_doc,
clippy::missing_panics_doc,
clippy::must_use_candidate,
clippy::needless_collect,
clippy::needless_continue,
clippy::needless_pass_by_value,
clippy::non_std_lazy_statics,
clippy::option_if_let_else,
clippy::or_fun_call,
clippy::redundant_clone,
clippy::redundant_closure_for_method_calls,
clippy::redundant_else,
clippy::self_only_used_in_recursion,
clippy::semicolon_if_nothing_returned,
clippy::significant_drop_tightening,
clippy::single_char_pattern,
clippy::single_match_else,
clippy::suboptimal_flops,
clippy::too_long_first_doc_paragraph,
clippy::too_many_lines,
clippy::uninlined_format_args,
clippy::unnecessary_wraps,
clippy::unreadable_literal,
clippy::unused_self,
clippy::use_self,
clippy::used_underscore_binding,
reason = "Strict clippy::pedantic and clippy::nursery are now enabled. These legacy findings are documented debt to burn down in focused follow-up PRs while preventing new undocumented lint categories."
)]

pub mod storage {
pub mod core;
Expand Down
7 changes: 4 additions & 3 deletions crates/omnikv-engine/src/query/optimizer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@
//!
//! The optimizer produces a `QueryPlan` tree that the executor walks.

#![allow(dead_code)]

use crate::catalog::Catalog;
use crate::secondary_index::{IndexCatalog, IndexDefinition};
use crate::sql::*;
use crate::sql::{
CmpOp, FromClause, JoinType, OrderByItem, SelectColumn, SqlStatement, SqlValue, WhereExpr,
parse_sql,
};
use std::fmt;
use std::sync::Arc;

Expand Down
6 changes: 2 additions & 4 deletions crates/omnikv-engine/src/query/plan_exec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,10 @@
//! Executes queries using the optimizer's physical plan tree instead of
//! the old hardcoded scan-filter-sort pipeline.

#![allow(dead_code)]

use crate::OmniKV;
use crate::catalog::{Catalog, TableDef};
use crate::optimizer::*;
use crate::sql::*;
use crate::optimizer::{AccessMethod, PlanNode};
use crate::sql::{AggFunc, CmpOp, JoinType, OrderByItem, SelectColumn, WhereExpr};
use crate::sql_exec::Row;
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
Expand Down
5 changes: 4 additions & 1 deletion crates/omnikv-engine/src/query/sql.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@
use crate::catalog::ColumnType;

#[derive(Debug, Clone, PartialEq)]
#[allow(clippy::large_enum_variant)]
#[expect(
clippy::large_enum_variant,
reason = "SQL statement variants intentionally keep owned AST payloads for parser simplicity; boxing the largest variant needs a separate API-impact review."
)]
pub enum SqlStatement {
CreateTable {
name: String,
Expand Down
15 changes: 12 additions & 3 deletions crates/omnikv-engine/src/query/sql_exec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
//! GROUP BY aggregation, and ORDER BY sorting.

use crate::catalog::{Catalog, Column, ColumnType, TableDef};
use crate::sql::*;
use crate::sql::{
AggFunc, CmpOp, FromClause, JoinType, OrderByItem, SelectColumn, SetOpType, SqlColumnDef,
SqlStatement, SqlValue, WhereExpr, WindowFuncType,
};
use crate::{OmniKV, WriteBatch};
use std::collections::HashMap;
use std::sync::Arc;
Expand Down Expand Up @@ -402,7 +405,10 @@ impl SqlExecutor {
.collect()
}

#[allow(clippy::too_many_arguments)]
#[expect(
clippy::too_many_arguments,
reason = "The SELECT executor mirrors SQL clauses explicitly; refactoring into an execution context is planned separately to avoid query semantics churn."
)]
fn exec_select(
&self,
columns: &[SelectColumn],
Expand Down Expand Up @@ -674,7 +680,10 @@ impl SqlExecutor {
})
}

#[allow(clippy::too_many_arguments)]
#[expect(
clippy::too_many_arguments,
reason = "Join execution keeps the parsed join shape explicit; collapsing into a context struct is a later planner cleanup."
)]
fn execute_join(
&self,
left: &[Row],
Expand Down
9 changes: 6 additions & 3 deletions crates/omnikv-engine/src/query/volcano.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,15 @@
//! SeqScanIter::next() ← reads one row at a time from storage
//! ```

#![allow(dead_code)]
#![expect(
dead_code,
reason = "The streaming executor contains staged operator variants used by benchmark and planner work that is not fully wired into the public SQL path yet."
)]

use crate::OmniKV;
use crate::catalog::{Catalog, TableDef};
use crate::optimizer::*;
use crate::sql::*;
use crate::optimizer::{AccessMethod, PlanNode};
use crate::sql::{AggFunc, CmpOp, JoinType, OrderByItem, SelectColumn, WhereExpr};
use crate::sql_exec::Row;
use std::collections::HashMap;
use std::sync::Arc;
Expand Down
5 changes: 4 additions & 1 deletion crates/omnikv-engine/src/runtime/dist_txn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -482,7 +482,10 @@ struct PreparedState {
/// The prepared write batch (ready to commit).
batch: WriteBatch,
/// Sequence at which this was prepared (for recovery).
#[allow(dead_code)]
#[expect(
dead_code,
reason = "Prepared sequence is retained for recovery/audit semantics even though the current participant tests do not read it directly yet."
)]
prepare_seq: u64,
/// When this was prepared.
prepared_at: Instant,
Expand Down
9 changes: 4 additions & 5 deletions crates/omnikv-engine/src/storage/core.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
#![allow(dead_code)]
#![allow(unused_imports)]
#![allow(unused_variables)]
#![allow(unused_mut)]
#![allow(mismatched_lifetime_syntaxes)]
#![expect(
dead_code,
reason = "Storage core intentionally carries staged LSM, compaction, transaction, and compatibility paths while the module is being split into smaller production components."
)]

use crate::{metrics_prometheus, wal};
use arc_swap::ArcSwap;
Expand Down
7 changes: 7 additions & 0 deletions crates/omnikv-engine/tests/anomaly_demos.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@
//! Each test sets up a scenario that would cause data corruption under
//! weaker isolation levels, and verifies OmniKV detects and aborts it.

#![expect(
clippy::doc_markdown,
clippy::or_fun_call,
clippy::uninlined_format_args,
reason = "Anomaly demos intentionally read like scenario walkthroughs with generated values and human-facing assertions."
)]

use omni_engine::transaction::TransactionManager;
use omni_engine::{OmniKV, WriteBatch};
use std::sync::Arc;
Expand Down
7 changes: 7 additions & 0 deletions crates/omnikv-engine/tests/api_error_sanitization_tests.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
#![expect(
clippy::doc_markdown,
clippy::match_same_arms,
clippy::uninlined_format_args,
reason = "API sanitization tests keep explicit acceptable outcomes and readable diagnostic strings."
)]

use omni_engine::{OmniError, OmniKV};
use tempfile::tempdir;

Expand Down
9 changes: 9 additions & 0 deletions crates/omnikv-engine/tests/benchmarks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,15 @@
//! - Transaction commit throughput (txn/sec)
//! - Batch write throughput (ops/sec)

#![expect(
clippy::cast_precision_loss,
clippy::cast_sign_loss,
clippy::doc_markdown,
clippy::missing_const_for_fn,
clippy::uninlined_format_args,
reason = "Benchmark smoke tests prioritize stable, readable measurement code; strict clippy findings are documented as benchmark debt."
)]

use omni_engine::sql::{AggFunc, CmpOp, SelectColumn, SqlValue, WhereExpr};
use omni_engine::sql_exec::Row;
use omni_engine::transaction::TransactionManager;
Expand Down
6 changes: 6 additions & 0 deletions crates/omnikv-engine/tests/concurrent_stress.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
//! These tests prove correctness under REAL parallel thread contention —
//! not simulated single-threaded scenarios.

#![expect(
clippy::or_fun_call,
clippy::uninlined_format_args,
reason = "Stress tests favor scenario clarity and repeated generated keys over style-only rewrites."
)]

use omni_engine::transaction::TransactionManager;
use omni_engine::{OmniKV, WriteBatch};
use std::sync::Arc;
Expand Down
6 changes: 5 additions & 1 deletion crates/omnikv-engine/tests/config_tests.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
#![allow(clippy::field_reassign_with_default)]
#![expect(
clippy::field_reassign_with_default,
clippy::redundant_closure_for_method_calls,
reason = "Config tests intentionally mutate defaults one field at a time to isolate validation failures."
)]
use std::sync::Mutex;

use omni_engine::config::{
Expand Down
4 changes: 4 additions & 0 deletions crates/omnikv-engine/tests/crash_consistency.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
#![expect(
clippy::doc_markdown,
reason = "Crash consistency test documentation names engine files and recovery concepts directly for operator readability."
)]
//! Crash-consistency tests — these tests drive the **real OmniKV engine**.
//!
//! Every test:
Expand Down
5 changes: 5 additions & 0 deletions crates/omnikv-engine/tests/debug_compaction.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
#![expect(
clippy::uninlined_format_args,
reason = "Debug reproduction test keeps compact diagnostic formatting."
)]

use omni_engine::{OmniKV, WriteBatch};
#[test]
fn test_debug_compaction() {
Expand Down
5 changes: 5 additions & 0 deletions crates/omnikv-engine/tests/debug_compaction_200.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
#![expect(
clippy::uninlined_format_args,
reason = "Debug reproduction test keeps compact diagnostic formatting."
)]

use omni_engine::{OmniKV, WriteBatch};
#[test]
fn test_debug_compaction_200() {
Expand Down
5 changes: 5 additions & 0 deletions crates/omnikv-engine/tests/debug_reopen.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
#![expect(
clippy::uninlined_format_args,
reason = "Debug reproduction test keeps compact diagnostic formatting."
)]

use omni_engine::{OmniKV, WriteBatch};
#[test]
fn test_debug_reopen() {
Expand Down
7 changes: 7 additions & 0 deletions crates/omnikv-engine/tests/durability_evidence.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
#![expect(
clippy::cast_possible_truncation,
clippy::cast_sign_loss,
clippy::doc_markdown,
clippy::uninlined_format_args,
reason = "Durability evidence tests use generated crash-case data and compact diagnostic output to keep failure scenarios auditable."
)]
Comment on lines +1 to +7

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== File list ==\n'
git ls-files crates/omnikv-engine/tests

printf '\n== Lint attribute locations ==\n'
rg -n '#!\[expect|#\[expect' crates/omnikv-engine/tests

printf '\n== Relevant file excerpts ==\n'
for f in \
  crates/omnikv-engine/tests/durability_evidence.rs \
  crates/omnikv-engine/tests/debug_compaction.rs \
  crates/omnikv-engine/tests/debug_compaction_200.rs \
  crates/omnikv-engine/tests/debug_reopen.rs \
  crates/omnikv-engine/tests/operations.rs \
  crates/omnikv-engine/tests/ops_maturity.rs \
  crates/omnikv-engine/tests/panic_policy_audit.rs
do
  printf '\n--- %s ---\n' "$f"
  sed -n '1,220p' "$f"
done

Repository: SBALAVIGNESH123/OmniKV

Length of output: 32228


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== Rust lint-expect docs from installed toolchain ==\n'
rustc -W help | rg -n 'expect|lint'

Repository: SBALAVIGNESH123/OmniKV

Length of output: 461


🌐 Web query:

Rust #[expect] lint attribute multiple occurrences same scope suppresses all occurrences documentation

💡 Result:

In Rust, the #[expect(...)] attribute creates a specific expectation for a lint. Each occurrence of an #[expect] attribute creates its own, independent lint expectation [1][2]. When you use multiple #[expect] attributes for the same lint in the same scope, they do not collectively suppress all instances of that lint; rather, each individual #[expect] attribute requires its own corresponding lint emission to be "fulfilled" [1][2]. Key aspects of this behavior include: 1. Independent Fulfillment: Each #[expect] attribute maintains its own state [1][2]. If you apply #[expect(lint_a)] twice in the same scope, the compiler expects lint_a to be emitted twice [1][2]. If the lint is only emitted once, one of the expectations will remain unfulfilled [1][2]. 2. Unfulfilled Expectations: If an expectation is not met because the expected lint is not triggered, the compiler emits the unfulfilled_lint_expectations diagnostic at the location of the #[expect] attribute [1][3]. 3. Multiple Lints: If a single #[expect] attribute contains multiple lints (e.g., #[expect(lint_a, lint_b)]), it creates separate expectations for each lint [1][2]. Each of these must be fulfilled individually [1][2]. 4. Lint Groups: If you expect a lint group (e.g., #[expect(unused)]), the expectation is fulfilled if at least one lint within that group is emitted [1][2]. In summary, because each #[expect] attribute creates a unique expectation, providing multiple attributes for the same lint essentially requires that lint to be triggered multiple times to satisfy all expectations [1][2]. If the code does not trigger the lint as many times as you have expectations, you will receive warnings for the unfulfilled expectations [1][3].

Citations:


🌐 Web query:

site:doc.rust-lang.org #[expect] lint occurrences scope

💡 Result:

In Rust, the #[expect(lint_name)] attribute functions as a lint level that suppresses a specific lint emission while simultaneously requiring that the lint actually be triggered within the associated scope [1][2][3]. Key details regarding its scope and behavior: 1. Scope: The #[expect] attribute applies to the entity it is attached to (e.g., a function, block, or statement), similar to other lint attributes like #[allow] or #[deny] [2][3]. It creates a lint expectation specifically for that location [3][4]. 2. Fulfillment: The expectation is considered fulfilled if the specified lint would have been emitted at that exact location (i.e., if it would have been triggered under a #[warn(lint_name)] setting) [3][4]. 3. Unfulfilled Expectations: If the expected lint is not triggered within the scope where the attribute is applied, the compiler emits the unfulfilled_lint_expectations lint [2][3][5]. This serves as a safeguard to ensure that you are not suppressing lints that are no longer relevant to your code [2]. 4. Interaction with Other Levels: If the lint level is modified within the same scope using other attributes like #[allow] or #[warn], the lint emission is handled according to those attributes, and the expectation typically remains unfulfilled [3][4]. 5. Independence: If an #[expect] attribute contains multiple lints, each lint is evaluated independently [3][4]. For lint groups, the expectation is fulfilled if at least one lint within that group is triggered [3][4]. Essentially, #[expect] is a safer alternative to #[allow] for scenarios where you want to suppress a warning but want to be alerted if the underlying issue being suppressed is no longer present [2][6].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

tmp="$(mktemp --suffix=.rs)"
cat >"$tmp" <<'RS'
#![deny(unused_variables)]
#![expect(unused_variables)]

fn main() {
    let a = 1;
    let b = 2;
}
RS

rustc "$tmp" -Z unstable-options --pretty=expanded 2>/dev/null || true
rustc "$tmp" 2>&1 || true
rm -f "$tmp"

Repository: SBALAVIGNESH123/OmniKV

Length of output: 407


Scope these #![expect] attributes to the specific tests. File-level expectations still suppress the listed lints anywhere else in the integration-test crate, so a new occurrence in the same file can slip past the gate as long as one existing occurrence remains. Move each expectation onto the affected function or block in crates/omnikv-engine/tests/durability_evidence.rs, debug_compaction.rs, debug_compaction_200.rs, debug_reopen.rs, operations.rs, ops_maturity.rs, and panic_policy_audit.rs.

📍 Affects 7 files
  • crates/omnikv-engine/tests/durability_evidence.rs#L1-L7 (this comment)
  • crates/omnikv-engine/tests/debug_compaction.rs#L1-L5
  • crates/omnikv-engine/tests/debug_compaction_200.rs#L1-L5
  • crates/omnikv-engine/tests/debug_reopen.rs#L1-L5
  • crates/omnikv-engine/tests/operations.rs#L1-L7
  • crates/omnikv-engine/tests/ops_maturity.rs#L6-L12
  • crates/omnikv-engine/tests/panic_policy_audit.rs#L6-L14
🤖 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 `@crates/omnikv-engine/tests/durability_evidence.rs` around lines 1 - 7, Move
each file-level #![expect] lint declaration onto the specific test function or
local block that triggers it, preserving the existing lint list and reason.
Apply this in crates/omnikv-engine/tests/durability_evidence.rs (lines 1-7),
debug_compaction.rs (lines 1-5), debug_compaction_200.rs (lines 1-5),
debug_reopen.rs (lines 1-5), operations.rs (lines 1-7), ops_maturity.rs (lines
6-12), and panic_policy_audit.rs (lines 6-14); remove the crate-level
expectations so unrelated occurrences remain linted.

/// Phase 3 — Durability Evidence Test Suite
///
/// These tests prove OmniKV survives real failure scenarios:
Expand Down
7 changes: 7 additions & 0 deletions crates/omnikv-engine/tests/operations.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
#![expect(
clippy::doc_markdown,
clippy::redundant_clone,
clippy::stable_sort_primitive,
clippy::uninlined_format_args,
reason = "Operations tests keep scenario setup readable and deterministic; strict style findings are documented separately from correctness checks."
)]
// ═══════════════════════════════════════════════════════════════════════════
// Operations & Edge Case Tests — Gaps #32 through #47
// ═══════════════════════════════════════════════════════════════════════════
Expand Down
7 changes: 7 additions & 0 deletions crates/omnikv-engine/tests/ops_maturity.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@
//! Tests for configuration, diagnostics, metrics, health, rate limiting,
//! group commit, graceful shutdown, and crash recovery.

#![expect(
clippy::float_cmp,
clippy::significant_drop_tightening,
clippy::uninlined_format_args,
reason = "Operational maturity tests keep lock/diagnostic scopes explicit and scenario output readable."
)]

use omni_engine::hardening::{GroupCommitEngine, RateLimiter};
use omni_engine::metrics_prometheus;
use omni_engine::ops::{DiagnosticReport, LogFormat, OmniConfig};
Expand Down
Loading