aboutsummaryrefslogtreecommitdiff
path: root/src/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/server.rs')
-rw-r--r--src/server.rs44
1 files changed, 37 insertions, 7 deletions
diff --git a/src/server.rs b/src/server.rs
index 6b4b5b6b..979d76f9 100644
--- a/src/server.rs
+++ b/src/server.rs
@@ -13,13 +13,16 @@ use crate::error::Error;
use crate::membership::System;
use crate::rpc_server::RpcServer;
use crate::table::*;
+use crate::table_fullcopy::*;
use crate::table_sharded::*;
use crate::block::*;
use crate::block_ref_table::*;
+use crate::bucket_table::*;
use crate::object_table::*;
use crate::version_table::*;
+use crate::admin_rpc::*;
use crate::api_server;
#[derive(Deserialize, Debug, Clone)]
@@ -38,12 +41,25 @@ pub struct Config {
#[serde(default = "default_replication_factor")]
pub meta_replication_factor: usize,
+ #[serde(default = "default_epidemic_factor")]
+ pub meta_epidemic_factor: usize,
+
#[serde(default = "default_replication_factor")]
pub data_replication_factor: usize,
pub rpc_tls: Option<TlsConfig>,
}
+fn default_block_size() -> usize {
+ 1048576
+}
+fn default_replication_factor() -> usize {
+ 3
+}
+fn default_epidemic_factor() -> usize {
+ 3
+}
+
#[derive(Deserialize, Debug, Clone)]
pub struct TlsConfig {
pub ca_cert: String,
@@ -57,6 +73,7 @@ pub struct Garage {
pub system: Arc<System>,
pub block_manager: Arc<BlockManager>,
+ pub bucket_table: Arc<Table<BucketTable, TableFullReplication>>,
pub object_table: Arc<Table<ObjectTable, TableShardedReplication>>,
pub version_table: Arc<Table<VersionTable, TableShardedReplication>>,
pub block_ref_table: Arc<Table<BlockRefTable, TableShardedReplication>>,
@@ -89,6 +106,11 @@ impl Garage {
read_quorum: (system.config.meta_replication_factor + 1) / 2,
};
+ let control_rep_param = TableFullReplication::new(
+ system.config.meta_epidemic_factor,
+ (system.config.meta_epidemic_factor + 1) / 2,
+ );
+
println!("Initialize block_ref_table...");
let block_ref_table = Table::new(
BlockRefTable {
@@ -131,17 +153,32 @@ impl Garage {
)
.await;
+ println!("Initialize bucket_table...");
+ let bucket_table = Table::new(
+ BucketTable,
+ control_rep_param.clone(),
+ system.clone(),
+ &db,
+ "bucket".to_string(),
+ rpc_server,
+ )
+ .await;
+
println!("Initialize Garage...");
let garage = Arc::new(Self {
db,
system: system.clone(),
block_manager,
background,
+ bucket_table,
object_table,
version_table,
block_ref_table,
});
+ println!("Crate admin RPC handler...");
+ AdminRpcHandler::new(garage.clone()).register_handler(rpc_server);
+
println!("Start block manager background thread...");
garage.block_manager.garage.swap(Some(garage.clone()));
garage.block_manager.clone().spawn_background_worker().await;
@@ -150,13 +187,6 @@ impl Garage {
}
}
-fn default_block_size() -> usize {
- 1048576
-}
-fn default_replication_factor() -> usize {
- 3
-}
-
fn read_config(config_file: PathBuf) -> Result<Config, Error> {
let mut file = std::fs::OpenOptions::new()
.read(true)