diff --git a/oximeter/db/src/client/dbwrite.rs b/oximeter/db/src/client/dbwrite.rs index 17bc2c9db8..dadecb6a7e 100644 --- a/oximeter/db/src/client/dbwrite.rs +++ b/oximeter/db/src/client/dbwrite.rs @@ -63,7 +63,7 @@ impl DbWrite for Client { debug!(self.log, "initializing ClickHouse database"); self.run_many_sql_statements(include_str!(concat!( env!("CARGO_MANIFEST_DIR"), - "/schema/replicated/db-init-test.sql" + "/schema/replicated/db-init.sql" ))) .await } @@ -99,6 +99,27 @@ impl DbWrite for Client { } } +/// Allow initializing a minimal subset of db tables for replicated cluster +/// testing +#[async_trait::async_trait] +pub trait TestDbWrite { + /// Initialize the replicated telemetry database, creating a subset of tables. + async fn init_test_minimal_replicated_db(&self) -> Result<(), Error>; +} + +#[async_trait::async_trait] +impl TestDbWrite for Client { + /// Initialize the replicated telemetry database, creating tables as needed. + async fn init_test_minimal_replicated_db(&self) -> Result<(), Error> { + debug!(self.log, "initializing ClickHouse database"); + self.run_many_sql_statements(include_str!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/schema/replicated/db-init-test.sql" + ))) + .await + } +} + impl Client { // Unroll each sample into its consituent rows, after verifying the schema. // diff --git a/oximeter/db/src/client/mod.rs b/oximeter/db/src/client/mod.rs index 767c5224e7..2a8efb833b 100644 --- a/oximeter/db/src/client/mod.rs +++ b/oximeter/db/src/client/mod.rs @@ -14,6 +14,7 @@ pub(crate) mod query_summary; mod sql; pub use self::dbwrite::DbWrite; +pub use self::dbwrite::TestDbWrite; use crate::client::query_summary::QuerySummary; use crate::model; use crate::query; diff --git a/oximeter/db/src/lib.rs b/oximeter/db/src/lib.rs index 8c1693e192..218a753b15 100644 --- a/oximeter/db/src/lib.rs +++ b/oximeter/db/src/lib.rs @@ -49,6 +49,7 @@ pub use client::query_summary::QuerySummary; pub use client::Client; pub use client::DbWrite; pub use client::RawSql; +pub use client::TestDbWrite; pub use model::OXIMETER_VERSION; #[derive(Debug, Error)] diff --git a/oximeter/db/tests/integration_test.rs b/oximeter/db/tests/integration_test.rs index 82b1ee1b72..a658578d2b 100644 --- a/oximeter/db/tests/integration_test.rs +++ b/oximeter/db/tests/integration_test.rs @@ -8,7 +8,7 @@ use dropshot::test_util::log_prefix_for_test; use omicron_test_utils::dev::poll; use omicron_test_utils::dev::test_setup_log; use oximeter::test_util; -use oximeter_db::{Client, DbWrite, OxqlResult, Sample}; +use oximeter_db::{Client, DbWrite, OxqlResult, Sample, TestDbWrite}; use std::default::Default; use std::time::Duration; @@ -67,7 +67,10 @@ async fn test_cluster() -> anyhow::Result<()> { println!("deploy setup time = {:?}", end - start); let start = tokio::time::Instant::now(); - client1.init_replicated_db().await.context("failed to initialize db")?; + client1 + .init_test_minimal_replicated_db() + .await + .context("failed to initialize db")?; let end = tokio::time::Instant::now(); println!("init replicated db time = {:?}", end - start); @@ -124,7 +127,10 @@ async fn test_cluster() -> anyhow::Result<()> { // We need to initiate copying from existing replicated tables by creating // the DB and those tables on the new node. - client3.init_replicated_db().await.expect("failed to initialized db"); + client3 + .init_test_minimal_replicated_db() + .await + .expect("failed to initialized db"); // Wait for all the data to be copied to node 3 let start = tokio::time::Instant::now();