diff --git a/config/config.md b/config/config.md
index 7826b897a8..16b6f9fd0a 100644
--- a/config/config.md
+++ b/config/config.md
@@ -12,7 +12,6 @@
| Key | Type | Default | Descriptions |
| --- | -----| ------- | ----------- |
-| `mode` | String | `standalone` | The running mode of the datanode. It can be `standalone` or `distributed`. |
| `default_timezone` | String | Unset | The default timezone of the server. |
| `init_regions_in_background` | Bool | `false` | Initialize all regions in the background during the startup.
By default, it provides services after all regions have been initialized. |
| `init_regions_parallelism` | Integer | `16` | Parallelism of initializing regions. |
@@ -383,7 +382,6 @@
| Key | Type | Default | Descriptions |
| --- | -----| ------- | ----------- |
-| `mode` | String | `standalone` | The running mode of the datanode. It can be `standalone` or `distributed`. |
| `node_id` | Integer | Unset | The datanode identifier and should be unique in the cluster. |
| `require_lease_before_startup` | Bool | `false` | Start services after regions have obtained leases.
It will block the datanode start if it can't receive leases in the heartbeat from metasrv. |
| `init_regions_in_background` | Bool | `false` | Initialize all regions in the background during the startup.
By default, it provides services after all regions have been initialized. |
@@ -553,7 +551,6 @@
| Key | Type | Default | Descriptions |
| --- | -----| ------- | ----------- |
-| `mode` | String | `distributed` | The running mode of the flownode. It can be `standalone` or `distributed`. |
| `node_id` | Integer | Unset | The flownode identifier and should be unique in the cluster. |
| `flow` | -- | -- | flow engine options. |
| `flow.num_workers` | Integer | `0` | The number of flow worker in flownode.
Not setting(or set to 0) this value will use the number of CPU cores divided by 2. |
diff --git a/config/datanode.example.toml b/config/datanode.example.toml
index 392950adfe..60f2d5c88a 100644
--- a/config/datanode.example.toml
+++ b/config/datanode.example.toml
@@ -1,6 +1,3 @@
-## The running mode of the datanode. It can be `standalone` or `distributed`.
-mode = "standalone"
-
## The datanode identifier and should be unique in the cluster.
## @toml2docs:none-default
node_id = 42
diff --git a/config/flownode.example.toml b/config/flownode.example.toml
index 4277f9c005..954daff176 100644
--- a/config/flownode.example.toml
+++ b/config/flownode.example.toml
@@ -1,6 +1,3 @@
-## The running mode of the flownode. It can be `standalone` or `distributed`.
-mode = "distributed"
-
## The flownode identifier and should be unique in the cluster.
## @toml2docs:none-default
node_id = 14
diff --git a/config/standalone.example.toml b/config/standalone.example.toml
index ec1c73fc3e..1a894c2025 100644
--- a/config/standalone.example.toml
+++ b/config/standalone.example.toml
@@ -1,6 +1,3 @@
-## The running mode of the datanode. It can be `standalone` or `distributed`.
-mode = "standalone"
-
## The default timezone of the server.
## @toml2docs:none-default
default_timezone = "UTC"
diff --git a/src/cmd/src/datanode.rs b/src/cmd/src/datanode.rs
index 600f2fbf80..af3674138c 100644
--- a/src/cmd/src/datanode.rs
+++ b/src/cmd/src/datanode.rs
@@ -30,7 +30,7 @@ use datanode::datanode::{Datanode, DatanodeBuilder};
use datanode::service::DatanodeServiceBuilder;
use meta_client::{MetaClientOptions, MetaClientType};
use servers::Mode;
-use snafu::{OptionExt, ResultExt};
+use snafu::{ensure, OptionExt, ResultExt};
use tracing_appender::non_blocking::WorkerGuard;
use crate::error::{
@@ -223,15 +223,14 @@ impl StartCommand {
.get_or_insert_with(MetaClientOptions::default)
.metasrv_addrs
.clone_from(metasrv_addrs);
- opts.mode = Mode::Distributed;
}
- if let (Mode::Distributed, None) = (&opts.mode, &opts.node_id) {
- return MissingConfigSnafu {
- msg: "Missing node id option",
+ ensure!(
+ opts.node_id.is_some(),
+ MissingConfigSnafu {
+ msg: "Missing node id option"
}
- .fail();
- }
+ );
if let Some(data_home) = &self.data_home {
opts.storage.data_home.clone_from(data_home);
@@ -314,7 +313,7 @@ impl StartCommand {
.build(),
);
- let mut datanode = DatanodeBuilder::new(opts.clone(), plugins)
+ let mut datanode = DatanodeBuilder::new(opts.clone(), plugins, Mode::Distributed)
.with_meta_client(meta_client)
.with_kv_backend(meta_backend)
.with_cache_registry(layered_cache_registry)
@@ -336,6 +335,7 @@ impl StartCommand {
#[cfg(test)]
mod tests {
+ use std::assert_matches::assert_matches;
use std::io::Write;
use std::time::Duration;
@@ -343,7 +343,6 @@ mod tests {
use common_test_util::temp_dir::create_named_temp_file;
use datanode::config::{FileConfig, GcsConfig, ObjectStoreConfig, S3Config};
use servers::heartbeat_options::HeartbeatOptions;
- use servers::Mode;
use super::*;
use crate::options::GlobalOptions;
@@ -494,22 +493,6 @@ mod tests {
#[test]
fn test_try_from_cmd() {
- let opt = StartCommand::default()
- .load_options(&GlobalOptions::default())
- .unwrap()
- .component;
- assert_eq!(Mode::Standalone, opt.mode);
-
- let opt = (StartCommand {
- node_id: Some(42),
- metasrv_addrs: Some(vec!["127.0.0.1:3002".to_string()]),
- ..Default::default()
- })
- .load_options(&GlobalOptions::default())
- .unwrap()
- .component;
- assert_eq!(Mode::Distributed, opt.mode);
-
assert!((StartCommand {
metasrv_addrs: Some(vec!["127.0.0.1:3002".to_string()]),
..Default::default()
@@ -528,7 +511,19 @@ mod tests {
#[test]
fn test_load_log_options_from_cli() {
- let cmd = StartCommand::default();
+ let mut cmd = StartCommand::default();
+
+ let result = cmd.load_options(&GlobalOptions {
+ log_dir: Some("./greptimedb_data/test/logs".to_string()),
+ log_level: Some("debug".to_string()),
+
+ #[cfg(feature = "tokio-console")]
+ tokio_console_addr: None,
+ });
+ // Missing node_id.
+ assert_matches!(result, Err(crate::error::Error::MissingConfig { .. }));
+
+ cmd.node_id = Some(42);
let options = cmd
.load_options(&GlobalOptions {
diff --git a/src/cmd/src/flownode.rs b/src/cmd/src/flownode.rs
index fecb4d476d..667fe437d9 100644
--- a/src/cmd/src/flownode.rs
+++ b/src/cmd/src/flownode.rs
@@ -34,8 +34,7 @@ use common_telemetry::logging::TracingOptions;
use common_version::{short_version, version};
use flow::{FlownodeBuilder, FlownodeInstance, FrontendInvoker};
use meta_client::{MetaClientOptions, MetaClientType};
-use servers::Mode;
-use snafu::{OptionExt, ResultExt};
+use snafu::{ensure, OptionExt, ResultExt};
use tracing_appender::non_blocking::WorkerGuard;
use crate::error::{
@@ -203,7 +202,6 @@ impl StartCommand {
.get_or_insert_with(MetaClientOptions::default)
.metasrv_addrs
.clone_from(metasrv_addrs);
- opts.mode = Mode::Distributed;
}
if let Some(http_addr) = &self.http_addr {
@@ -214,12 +212,12 @@ impl StartCommand {
opts.http.timeout = Duration::from_secs(http_timeout);
}
- if let (Mode::Distributed, None) = (&opts.mode, &opts.node_id) {
- return MissingConfigSnafu {
- msg: "Missing node id option",
+ ensure!(
+ opts.node_id.is_some(),
+ MissingConfigSnafu {
+ msg: "Missing node id option"
}
- .fail();
- }
+ );
Ok(())
}
diff --git a/src/cmd/src/standalone.rs b/src/cmd/src/standalone.rs
index 96ac049d64..62e89608b4 100644
--- a/src/cmd/src/standalone.rs
+++ b/src/cmd/src/standalone.rs
@@ -127,7 +127,6 @@ impl SubCommand {
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
#[serde(default)]
pub struct StandaloneOptions {
- pub mode: Mode,
pub enable_telemetry: bool,
pub default_timezone: Option,
pub http: HttpOptions,
@@ -157,7 +156,6 @@ pub struct StandaloneOptions {
impl Default for StandaloneOptions {
fn default() -> Self {
Self {
- mode: Mode::Standalone,
enable_telemetry: true,
default_timezone: None,
http: HttpOptions::default(),
@@ -238,7 +236,6 @@ impl StandaloneOptions {
grpc: cloned_opts.grpc,
init_regions_in_background: cloned_opts.init_regions_in_background,
init_regions_parallelism: cloned_opts.init_regions_parallelism,
- mode: Mode::Standalone,
..Default::default()
}
}
@@ -382,9 +379,6 @@ impl StartCommand {
global_options: &GlobalOptions,
opts: &mut StandaloneOptions,
) -> Result<()> {
- // Should always be standalone mode.
- opts.mode = Mode::Standalone;
-
if let Some(dir) = &global_options.log_dir {
opts.logging.dir.clone_from(dir);
}
@@ -509,7 +503,7 @@ impl StartCommand {
.build(),
);
- let datanode = DatanodeBuilder::new(dn_opts, plugins.clone())
+ let datanode = DatanodeBuilder::new(dn_opts, plugins.clone(), Mode::Standalone)
.with_kv_backend(kv_backend.clone())
.with_cache_registry(layered_cache_registry.clone())
.build()
@@ -1066,7 +1060,6 @@ mod tests {
let options =
StandaloneOptions::load_layered_options(None, "GREPTIMEDB_STANDALONE").unwrap();
let default_options = StandaloneOptions::default();
- assert_eq!(options.mode, default_options.mode);
assert_eq!(options.enable_telemetry, default_options.enable_telemetry);
assert_eq!(options.http, default_options.http);
assert_eq!(options.grpc, default_options.grpc);
diff --git a/src/datanode/src/config.rs b/src/datanode/src/config.rs
index 35b2dea1b6..322f337ba3 100644
--- a/src/datanode/src/config.rs
+++ b/src/datanode/src/config.rs
@@ -31,7 +31,6 @@ use servers::export_metrics::ExportMetricsOption;
use servers::grpc::GrpcOptions;
use servers::heartbeat_options::HeartbeatOptions;
use servers::http::HttpOptions;
-use servers::Mode;
pub const DEFAULT_OBJECT_STORE_CACHE_SIZE: ReadableSize = ReadableSize::gb(5);
@@ -359,7 +358,6 @@ impl Default for ObjectStoreConfig {
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
#[serde(default)]
pub struct DatanodeOptions {
- pub mode: Mode,
pub node_id: Option,
pub require_lease_before_startup: bool,
pub init_regions_in_background: bool,
@@ -395,7 +393,6 @@ impl Default for DatanodeOptions {
#[allow(deprecated)]
fn default() -> Self {
Self {
- mode: Mode::Standalone,
node_id: None,
require_lease_before_startup: false,
init_regions_in_background: false,
diff --git a/src/datanode/src/datanode.rs b/src/datanode/src/datanode.rs
index 82c5f61d14..4c352f9ac1 100644
--- a/src/datanode/src/datanode.rs
+++ b/src/datanode/src/datanode.rs
@@ -157,6 +157,7 @@ impl Datanode {
pub struct DatanodeBuilder {
opts: DatanodeOptions,
+ mode: Mode,
plugins: Plugins,
meta_client: Option,
kv_backend: Option,
@@ -166,9 +167,10 @@ pub struct DatanodeBuilder {
impl DatanodeBuilder {
/// `kv_backend` is optional. If absent, the builder will try to build one
/// by using the given `opts`
- pub fn new(opts: DatanodeOptions, plugins: Plugins) -> Self {
+ pub fn new(opts: DatanodeOptions, plugins: Plugins, mode: Mode) -> Self {
Self {
opts,
+ mode,
plugins,
meta_client: None,
kv_backend: None,
@@ -198,7 +200,7 @@ impl DatanodeBuilder {
}
pub async fn build(mut self) -> Result {
- let mode = &self.opts.mode;
+ let mode = &self.mode;
let node_id = self.opts.node_id.context(MissingNodeIdSnafu)?;
let meta_client = self.meta_client.take();
@@ -629,6 +631,7 @@ mod tests {
use common_meta::kv_backend::memory::MemoryKvBackend;
use common_meta::kv_backend::KvBackendRef;
use mito2::engine::MITO_ENGINE_NAME;
+ use servers::Mode;
use store_api::region_request::RegionRequest;
use store_api::storage::RegionId;
@@ -674,6 +677,7 @@ mod tests {
..Default::default()
},
Plugins::default(),
+ Mode::Standalone,
)
.with_cache_registry(layered_cache_registry);
diff --git a/src/flow/src/adapter.rs b/src/flow/src/adapter.rs
index c623e467a0..784dfd74c8 100644
--- a/src/flow/src/adapter.rs
+++ b/src/flow/src/adapter.rs
@@ -37,7 +37,6 @@ use serde::{Deserialize, Serialize};
use servers::grpc::GrpcOptions;
use servers::heartbeat_options::HeartbeatOptions;
use servers::http::HttpOptions;
-use servers::Mode;
use session::context::QueryContext;
use snafu::{ensure, OptionExt, ResultExt};
use store_api::storage::{ConcreteDataType, RegionId};
@@ -102,7 +101,6 @@ impl Default for FlowConfig {
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(default)]
pub struct FlownodeOptions {
- pub mode: Mode,
pub node_id: Option,
pub flow: FlowConfig,
pub grpc: GrpcOptions,
@@ -116,7 +114,6 @@ pub struct FlownodeOptions {
impl Default for FlownodeOptions {
fn default() -> Self {
Self {
- mode: servers::Mode::Standalone,
node_id: None,
flow: FlowConfig::default(),
grpc: GrpcOptions::default().with_bind_addr("127.0.0.1:3004"),
diff --git a/tests-integration/src/cluster.rs b/tests-integration/src/cluster.rs
index 3755f68665..c1159e18d5 100644
--- a/tests-integration/src/cluster.rs
+++ b/tests-integration/src/cluster.rs
@@ -251,7 +251,6 @@ impl GreptimeDbClusterBuilder {
for i in 0..datanodes {
let datanode_id = i as u64 + 1;
- let mode = Mode::Distributed;
let mut opts = if let Some(store_config) = &self.store_config {
let home_dir = if let Some(home_dir) = &self.shared_home_dir {
home_dir.path().to_str().unwrap().to_string()
@@ -264,7 +263,6 @@ impl GreptimeDbClusterBuilder {
};
create_datanode_opts(
- mode,
store_config.clone(),
vec![],
home_dir,
@@ -272,7 +270,6 @@ impl GreptimeDbClusterBuilder {
)
} else {
let (opts, guard) = create_tmp_dir_and_datanode_opts(
- mode,
StorageType::File,
self.store_providers.clone().unwrap_or_default(),
&format!("{}-dn-{}", self.cluster_name, datanode_id),
@@ -345,7 +342,7 @@ impl GreptimeDbClusterBuilder {
.build(),
);
- let mut datanode = DatanodeBuilder::new(opts, Plugins::default())
+ let mut datanode = DatanodeBuilder::new(opts, Plugins::default(), Mode::Distributed)
.with_kv_backend(meta_backend)
.with_cache_registry(layered_cache_registry)
.with_meta_client(meta_client)
diff --git a/tests-integration/src/standalone.rs b/tests-integration/src/standalone.rs
index 81e3fcca9b..2d6c9bcf97 100644
--- a/tests-integration/src/standalone.rs
+++ b/tests-integration/src/standalone.rs
@@ -144,12 +144,13 @@ impl GreptimeDbStandaloneBuilder {
.build(),
);
- let datanode = DatanodeBuilder::new(opts.datanode_options(), plugins.clone())
- .with_kv_backend(kv_backend.clone())
- .with_cache_registry(layered_cache_registry)
- .build()
- .await
- .unwrap();
+ let datanode =
+ DatanodeBuilder::new(opts.datanode_options(), plugins.clone(), Mode::Standalone)
+ .with_kv_backend(kv_backend.clone())
+ .with_cache_registry(layered_cache_registry)
+ .build()
+ .await
+ .unwrap();
let table_metadata_manager = Arc::new(TableMetadataManager::new(kv_backend.clone()));
table_metadata_manager.init().await.unwrap();
@@ -290,7 +291,6 @@ impl GreptimeDbStandaloneBuilder {
let store_types = self.store_providers.clone().unwrap_or_default();
let (opts, guard) = create_tmp_dir_and_datanode_opts(
- Mode::Standalone,
default_store_type,
store_types,
&self.instance_name,
diff --git a/tests-integration/src/test_util.rs b/tests-integration/src/test_util.rs
index c6682683c8..4b31b941b6 100644
--- a/tests-integration/src/test_util.rs
+++ b/tests-integration/src/test_util.rs
@@ -52,7 +52,6 @@ use servers::query_handler::grpc::ServerGrpcQueryHandlerAdapter;
use servers::query_handler::sql::{ServerSqlQueryHandlerAdapter, SqlQueryHandler};
use servers::server::Server;
use servers::tls::ReloadableTlsServerConfig;
-use servers::Mode;
use session::context::QueryContext;
use crate::standalone::{GreptimeDbStandalone, GreptimeDbStandaloneBuilder};
@@ -301,7 +300,6 @@ impl TestGuard {
}
pub fn create_tmp_dir_and_datanode_opts(
- mode: Mode,
default_store_type: StorageType,
store_provider_types: Vec,
name: &str,
@@ -323,7 +321,7 @@ pub fn create_tmp_dir_and_datanode_opts(
store_providers.push(store);
storage_guards.push(StorageGuard(data_tmp_dir))
}
- let opts = create_datanode_opts(mode, default_store, store_providers, home_dir, wal_config);
+ let opts = create_datanode_opts(default_store, store_providers, home_dir, wal_config);
(
opts,
@@ -335,7 +333,6 @@ pub fn create_tmp_dir_and_datanode_opts(
}
pub(crate) fn create_datanode_opts(
- mode: Mode,
default_store: ObjectStoreConfig,
providers: Vec,
home_dir: String,
@@ -352,7 +349,6 @@ pub(crate) fn create_datanode_opts(
grpc: GrpcOptions::default()
.with_bind_addr(PEER_PLACEHOLDER_ADDR)
.with_server_addr(PEER_PLACEHOLDER_ADDR),
- mode,
wal: wal_config,
..Default::default()
}
diff --git a/tests-integration/tests/http.rs b/tests-integration/tests/http.rs
index cea00cf978..1d4e795c9e 100644
--- a/tests-integration/tests/http.rs
+++ b/tests-integration/tests/http.rs
@@ -951,7 +951,6 @@ providers = []"#,
let expected_toml_str = format!(
r#"
-mode = "standalone"
enable_telemetry = true
init_regions_in_background = false
init_regions_parallelism = 16