Skip to content

Commit

Permalink
chore(storage): deprecate in-memory state store in e2e scenarios (#3153)
Browse files Browse the repository at this point in the history
* chore(storage): deprecate in-memory state store

Signed-off-by: Bugen Zhao <i@bugenzhao.com>

* unify add_storage_backend

Signed-off-by: Bugen Zhao <i@bugenzhao.com>
  • Loading branch information
BugenZhao authored Jun 13, 2022
1 parent 32aaae0 commit ce23e4a
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 38 deletions.
3 changes: 0 additions & 3 deletions risedev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -373,9 +373,6 @@ template:
# If `user-managed` is true, this service will be started by user with the above config
user-managed: false

# Whether to enable in-memory pure KV state backend
enable-in-memory-kv-state-backend: false

meta-node:
# Meta-node advertise address
address: "127.0.0.1"
Expand Down
1 change: 0 additions & 1 deletion src/risedevtool/src/service_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ pub struct ComputeNodeConfig {
pub provide_jaeger: Option<Vec<JaegerConfig>>,
pub provide_compactor: Option<Vec<CompactorConfig>>,
pub user_managed: bool,
pub enable_in_memory_kv_state_backend: bool,
}

#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
Expand Down
2 changes: 1 addition & 1 deletion src/risedevtool/src/task/compactor_service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ impl CompactorService {

let provide_minio = config.provide_minio.as_ref().unwrap();
let provide_aws_s3 = config.provide_aws_s3.as_ref().unwrap();
add_storage_backend(&config.id, provide_minio, provide_aws_s3, cmd)?;
add_storage_backend(&config.id, provide_minio, provide_aws_s3, false, cmd)?;

let provide_meta_node = config.provide_meta_node.as_ref().unwrap();
add_meta_node(provide_meta_node, cmd)?;
Expand Down
26 changes: 2 additions & 24 deletions src/risedevtool/src/task/compute_node_service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,30 +73,8 @@ impl ComputeNodeService {
let provide_aws_s3 = config.provide_aws_s3.as_ref().unwrap();
let provide_compute_node = config.provide_compute_node.as_ref().unwrap();

let is_shared_backend = match (
config.enable_in_memory_kv_state_backend,
provide_minio.as_slice(),
provide_aws_s3.as_slice(),
) {
(true, [], []) => {
cmd.arg("--state-store").arg("in-memory");
false
}
(true, _, _) => {
return Err(anyhow!(
"When `enable_in_memory_kv_state_backend` is enabled, no minio and aws-s3 should be provided.",
));
}
(false, [], []) => {
cmd.arg("--state-store").arg("hummock+memory");
false
}
(false, provide_minio, provide_aws_s3) => {
add_storage_backend(&config.id, provide_minio, provide_aws_s3, cmd)?;
true
}
};

let is_shared_backend =
add_storage_backend(&config.id, provide_minio, provide_aws_s3, true, cmd)?;
if provide_compute_node.len() > 1 && !is_shared_backend {
return Err(anyhow!(
"should use a shared backend (e.g. MinIO) for multiple compute-node configuration. Consider adding `use: minio` in risedev config."
Expand Down
23 changes: 16 additions & 7 deletions src/risedevtool/src/task/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use anyhow::{anyhow, Result};

use crate::{AwsS3Config, MetaNodeConfig, MinioConfig};

/// Add a meta node to the parameters
/// Add a meta node to the parameters.
pub fn add_meta_node(provide_meta_node: &[MetaNodeConfig], cmd: &mut Command) -> Result<()> {
match provide_meta_node {
[] => {
Expand All @@ -41,16 +41,25 @@ pub fn add_meta_node(provide_meta_node: &[MetaNodeConfig], cmd: &mut Command) ->
Ok(())
}

/// Add a storage backend to the parameters. Returns whether this is a shared backend.
pub fn add_storage_backend(
id: &str,
provide_minio: &[MinioConfig],
provide_aws_s3: &[AwsS3Config],
allow_hummock_in_memory: bool,
cmd: &mut Command,
) -> Result<()> {
match (provide_minio, provide_aws_s3) {
([], []) => return Err(anyhow!(
"{} is not compatible with in-memory state backend. Need to enable either minio or aws-s3.", id
)),
) -> Result<bool> {
let is_shared_backend = match (provide_minio, provide_aws_s3) {
([], []) => {
if allow_hummock_in_memory {
cmd.arg("--state-store").arg("hummock+memory");
false
} else {
return Err(anyhow!(
"{} is not compatible with in-memory state backend. Need to enable either minio or aws-s3.", id
));
}
}
([minio], []) => {
cmd.arg("--state-store").arg(format!(
"hummock+minio://{hummock_user}:{hummock_password}@{minio_addr}:{minio_port}/{hummock_bucket}",
Expand All @@ -76,5 +85,5 @@ pub fn add_storage_backend(
}
};

Ok(())
Ok(is_shared_backend)
}
3 changes: 1 addition & 2 deletions src/storage/src/store_impl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,7 @@ impl StateStoreImpl {
}

"in_memory" | "in-memory" => {
tracing::warn!("in-memory state backend should never be used in benchmarks and production environment.");
StateStoreImpl::shared_in_memory_store(state_store_stats.clone())
panic!("in-memory state backend should never be used in end-to-end environment, use `hummock+memory` instead.")
}

other => unimplemented!("{} state store is not supported", other),
Expand Down

0 comments on commit ce23e4a

Please sign in to comment.