aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2022-06-10 11:20:59 +0200
committerAlex Auvolat <alex@adnab.me>2022-06-10 11:20:59 +0200
commitbc29d77ed3865fcadfc8d99d029851f6d0f2dee1 (patch)
tree686305ca670daf14a03362344b52050049d986f2
parentffe05c3c7d56af05f542ada65a385fecfc15c533 (diff)
downloadgarage-bc29d77ed3865fcadfc8d99d029851f6d0f2dee1.tar.gz
garage-bc29d77ed3865fcadfc8d99d029851f6d0f2dee1.zip
Change object counter table to use full replication
-rw-r--r--src/model/garage.rs10
-rw-r--r--src/model/index_counter.rs8
-rw-r--r--src/model/k2v/item_table.rs3
-rw-r--r--src/model/s3/object_table.rs4
4 files changed, 13 insertions, 12 deletions
diff --git a/src/model/garage.rs b/src/model/garage.rs
index 15769a17..a776789b 100644
--- a/src/model/garage.rs
+++ b/src/model/garage.rs
@@ -52,8 +52,8 @@ pub struct Garage {
/// Table containing S3 objects
pub object_table: Arc<Table<ObjectTable, TableShardedReplication>>,
- /// Counting table containing object counters
- pub object_counter_table: Arc<IndexCounter<Object>>,
+ /// Counting table containing object counters for each bucket
+ pub object_counter_table: Arc<IndexCounter<Object, TableFullReplication>>,
/// Table containing S3 object versions
pub version_table: Arc<Table<VersionTable, TableShardedReplication>>,
/// Table containing S3 block references (not blocks themselves)
@@ -68,7 +68,7 @@ pub struct GarageK2V {
/// Table containing K2V items
pub item_table: Arc<Table<K2VItemTable, TableShardedReplication>>,
/// Indexing table containing K2V item counters
- pub counter_table: Arc<IndexCounter<K2VItem>>,
+ pub counter_table: Arc<IndexCounter<K2VItem, TableShardedReplication>>,
/// K2V RPC handler
pub rpc: Arc<K2VRpcHandler>,
}
@@ -176,7 +176,7 @@ impl Garage {
&db,
);
info!("Initialize key_table_table...");
- let key_table = Table::new(KeyTable, control_rep_param, system.clone(), &db);
+ let key_table = Table::new(KeyTable, control_rep_param.clone(), system.clone(), &db);
// ---- S3 tables ----
info!("Initialize block_ref_table...");
@@ -201,7 +201,7 @@ impl Garage {
);
info!("Initialize object counter table...");
- let object_counter_table = IndexCounter::new(system.clone(), meta_rep_param.clone(), &db);
+ let object_counter_table = IndexCounter::new(system.clone(), control_rep_param, &db);
info!("Initialize object_table...");
#[allow(clippy::redundant_clone)]
diff --git a/src/model/index_counter.rs b/src/model/index_counter.rs
index 36e8172b..a8837e0f 100644
--- a/src/model/index_counter.rs
+++ b/src/model/index_counter.rs
@@ -138,17 +138,17 @@ impl<T: CountedItem> TableSchema for CounterTable<T> {
// ----
-pub struct IndexCounter<T: CountedItem> {
+pub struct IndexCounter<T: CountedItem, R: TableReplication + 'static> {
this_node: Uuid,
local_counter: db::Tree,
propagate_tx: mpsc::UnboundedSender<(T::CP, T::CS, LocalCounterEntry<T>)>,
- pub table: Arc<Table<CounterTable<T>, TableShardedReplication>>,
+ pub table: Arc<Table<CounterTable<T>, R>>,
}
-impl<T: CountedItem> IndexCounter<T> {
+impl<T: CountedItem, R: TableReplication + 'static> IndexCounter<T, R> {
pub fn new(
system: Arc<System>,
- replication: TableShardedReplication,
+ replication: R,
db: &db::Db,
) -> Arc<Self> {
let background = system.background.clone();
diff --git a/src/model/k2v/item_table.rs b/src/model/k2v/item_table.rs
index baa1db4b..0d91f5e9 100644
--- a/src/model/k2v/item_table.rs
+++ b/src/model/k2v/item_table.rs
@@ -6,6 +6,7 @@ use garage_db as db;
use garage_util::data::*;
use garage_table::crdt::*;
+use garage_table::replication::*;
use garage_table::*;
use crate::index_counter::*;
@@ -187,7 +188,7 @@ impl Entry<K2VItemPartition, String> for K2VItem {
}
pub struct K2VItemTable {
- pub(crate) counter_table: Arc<IndexCounter<K2VItem>>,
+ pub(crate) counter_table: Arc<IndexCounter<K2VItem, TableShardedReplication>>,
pub(crate) subscriptions: Arc<SubscriptionManager>,
}
diff --git a/src/model/s3/object_table.rs b/src/model/s3/object_table.rs
index 23cce1d3..b9995d79 100644
--- a/src/model/s3/object_table.rs
+++ b/src/model/s3/object_table.rs
@@ -8,7 +8,7 @@ use garage_util::background::BackgroundRunner;
use garage_util::data::*;
use garage_table::crdt::*;
-use garage_table::replication::TableShardedReplication;
+use garage_table::replication::*;
use garage_table::*;
use crate::index_counter::*;
@@ -223,7 +223,7 @@ impl Crdt for Object {
pub struct ObjectTable {
pub background: Arc<BackgroundRunner>,
pub version_table: Arc<Table<VersionTable, TableShardedReplication>>,
- pub object_counter_table: Arc<IndexCounter<Object>>,
+ pub object_counter_table: Arc<IndexCounter<Object, TableFullReplication>>,
}
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]