Skip to content

Commit a894f3d

Browse files
feat: trigger storage pool refresh on buddy group and target deletions (#40)
1 parent d3b1819 commit a894f3d

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

mgmtd/src/bee_msg/target.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use super::*;
22
use crate::db::target::TargetCapacities;
33
use crate::types::ResolveEntityId;
44
use rusqlite::Transaction;
5+
use shared::bee_msg::storage_pool::RefreshStoragePools;
56
use shared::bee_msg::target::*;
67
use std::time::Duration;
78

@@ -170,7 +171,8 @@ impl HandleWithResponse for MapTargets {
170171

171172
let target_ids = self.target_ids.keys().copied().collect::<Vec<_>>();
172173

173-
ctx.db
174+
let updated = ctx
175+
.db
174176
.write_tx(move |tx| {
175177
// Check node Id exists
176178
let node = LegacyId {
@@ -181,8 +183,9 @@ impl HandleWithResponse for MapTargets {
181183
// Check all target Ids exist
182184
db::target::validate_ids(tx, &target_ids, NodeTypeServer::Storage)?;
183185
// Due to the check above, this must always match all the given ids
184-
db::target::update_storage_node_mappings(tx, &target_ids, node.num_id())?;
185-
Ok(())
186+
let updated =
187+
db::target::update_storage_node_mappings(tx, &target_ids, node.num_id())?;
188+
Ok(updated)
186189
})
187190
.await?;
188191

@@ -205,6 +208,16 @@ impl HandleWithResponse for MapTargets {
205208
)
206209
.await;
207210

211+
// Map targets alter pool membership, so trigger an immediate pool refresh
212+
if updated > 0 {
213+
notify_nodes(
214+
ctx,
215+
&[NodeType::Meta, NodeType::Storage],
216+
&RefreshStoragePools { ack_id: "".into() },
217+
)
218+
.await;
219+
}
220+
208221
// Storage server expects a separate status code for each target map requested. We, however,
209222
// do a all-or-nothing approach. If e.g. one target id doesn't exist (which is an
210223
// exceptional error and should usually not happen anyway), we fail the whole

mgmtd/src/grpc/buddy_group.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use shared::bee_msg::buddy_group::{
77
GetStorageResyncStatsResp, RemoveBuddyGroup, RemoveBuddyGroupResp, SetLastBuddyCommOverride,
88
SetMetadataMirroring, SetMetadataMirroringResp, SetMirrorBuddyGroup,
99
};
10+
use shared::bee_msg::storage_pool::RefreshStoragePools;
1011
use shared::bee_msg::target::{RefreshTargetStates, SetTargetConsistencyStatesResp};
1112
use tokio::time::{Duration, Instant, sleep};
1213

@@ -144,6 +145,16 @@ pub(crate) async fn create(
144145
)
145146
.await;
146147

148+
// Storage buddy groups alter pool membership, so trigger an immediate pool refresh
149+
if node_type == NodeTypeServer::Storage {
150+
notify_nodes(
151+
&ctx,
152+
&[NodeType::Meta, NodeType::Storage],
153+
&RefreshStoragePools { ack_id: "".into() },
154+
)
155+
.await;
156+
}
157+
147158
Ok(pm::CreateBuddyGroupResponse {
148159
group: Some(group.into()),
149160
})
@@ -220,6 +231,14 @@ Primary result: {:?}, Secondary result: {:?}",
220231

221232
if execute {
222233
log::info!("Buddy group deleted: {group}");
234+
235+
// Storage buddy groups alter pool membership, so trigger an immediate pool refresh
236+
notify_nodes(
237+
&ctx,
238+
&[NodeType::Meta, NodeType::Storage],
239+
&RefreshStoragePools { ack_id: "".into() },
240+
)
241+
.await;
223242
}
224243

225244
Ok(pm::DeleteBuddyGroupResponse {

mgmtd/src/grpc/target.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use super::*;
22
use crate::cap_pool::{CapPoolCalculator, CapacityInfo};
33
use shared::bee_msg::OpsErr;
44
use shared::bee_msg::misc::RefreshCapacityPools;
5+
use shared::bee_msg::storage_pool::RefreshStoragePools;
56
use shared::bee_msg::target::{
67
RefreshTargetStates, SetTargetConsistencyStates, SetTargetConsistencyStatesResp,
78
};
@@ -215,6 +216,14 @@ pub(crate) async fn delete(
215216
&RefreshCapacityPools { ack_id: "".into() },
216217
)
217218
.await;
219+
220+
// Storage targets deletion alter pool membership, so trigger an immediate pool refresh
221+
notify_nodes(
222+
&ctx,
223+
&[NodeType::Meta, NodeType::Storage],
224+
&RefreshStoragePools { ack_id: "".into() },
225+
)
226+
.await;
218227
}
219228

220229
let target = Some(target.into());

0 commit comments

Comments
 (0)