Skip to content

Commit 469522d

Browse files
authored
Temporarily disable region snapshot replacement (#6728)
Until read-only region reference counting is implemented, region snapshot replacement should be disabled - it is currently the only thing that creates read-only regions.
1 parent f0b8048 commit 469522d

File tree

5 files changed

+89
-16
lines changed

5 files changed

+89
-16
lines changed

nexus/src/app/background/init.rs

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -778,7 +778,8 @@ impl BackgroundTasksInitializer {
778778
"detect if region snapshots need replacement and begin the \
779779
process",
780780
period: config.region_snapshot_replacement_start.period_secs,
781-
task_impl: Box::new(RegionSnapshotReplacementDetector::new(
781+
// XXX temporarily disabled, see oxidecomputer/omicron#6353
782+
task_impl: Box::new(RegionSnapshotReplacementDetector::disabled(
782783
datastore.clone(),
783784
sagas.clone(),
784785
)),
@@ -794,10 +795,13 @@ impl BackgroundTasksInitializer {
794795
period: config
795796
.region_snapshot_replacement_garbage_collection
796797
.period_secs,
797-
task_impl: Box::new(RegionSnapshotReplacementGarbageCollect::new(
798-
datastore.clone(),
799-
sagas.clone(),
800-
)),
798+
// XXX temporarily disabled, see oxidecomputer/omicron#6353
799+
task_impl: Box::new(
800+
RegionSnapshotReplacementGarbageCollect::disabled(
801+
datastore.clone(),
802+
sagas.clone(),
803+
),
804+
),
801805
opctx: opctx.child(BTreeMap::new()),
802806
watchers: vec![],
803807
activator: task_region_snapshot_replacement_garbage_collection,
@@ -809,10 +813,13 @@ impl BackgroundTasksInitializer {
809813
"detect what volumes were affected by a region snapshot \
810814
replacement, and run the step saga for them",
811815
period: config.region_snapshot_replacement_step.period_secs,
812-
task_impl: Box::new(RegionSnapshotReplacementFindAffected::new(
813-
datastore.clone(),
814-
sagas.clone(),
815-
)),
816+
// XXX temporarily disabled, see oxidecomputer/omicron#6353
817+
task_impl: Box::new(
818+
RegionSnapshotReplacementFindAffected::disabled(
819+
datastore.clone(),
820+
sagas.clone(),
821+
),
822+
),
816823
opctx: opctx.child(BTreeMap::new()),
817824
watchers: vec![],
818825
activator: task_region_snapshot_replacement_step,
@@ -824,9 +831,10 @@ impl BackgroundTasksInitializer {
824831
"complete a region snapshot replacement if all the steps are \
825832
done",
826833
period: config.region_snapshot_replacement_finish.period_secs,
827-
task_impl: Box::new(RegionSnapshotReplacementFinishDetector::new(
828-
datastore,
829-
)),
834+
// XXX temporarily disabled, see oxidecomputer/omicron#6353
835+
task_impl: Box::new(
836+
RegionSnapshotReplacementFinishDetector::disabled(datastore),
837+
),
830838
opctx: opctx.child(BTreeMap::new()),
831839
watchers: vec![],
832840
activator: task_region_snapshot_replacement_finish,

nexus/src/app/background/tasks/region_snapshot_replacement_finish.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,17 @@ use std::sync::Arc;
1919

2020
pub struct RegionSnapshotReplacementFinishDetector {
2121
datastore: Arc<DataStore>,
22+
disabled: bool,
2223
}
2324

2425
impl RegionSnapshotReplacementFinishDetector {
26+
#[allow(dead_code)]
2527
pub fn new(datastore: Arc<DataStore>) -> Self {
26-
RegionSnapshotReplacementFinishDetector { datastore }
28+
RegionSnapshotReplacementFinishDetector { datastore, disabled: false }
29+
}
30+
31+
pub fn disabled(datastore: Arc<DataStore>) -> Self {
32+
RegionSnapshotReplacementFinishDetector { datastore, disabled: true }
2733
}
2834

2935
async fn transition_requests_to_done(
@@ -153,6 +159,10 @@ impl BackgroundTask for RegionSnapshotReplacementFinishDetector {
153159
async move {
154160
let mut status = RegionSnapshotReplacementFinishStatus::default();
155161

162+
if self.disabled {
163+
return json!(status);
164+
}
165+
156166
self.transition_requests_to_done(opctx, &mut status).await;
157167

158168
json!(status)

nexus/src/app/background/tasks/region_snapshot_replacement_garbage_collect.rs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,28 @@ use std::sync::Arc;
2222
pub struct RegionSnapshotReplacementGarbageCollect {
2323
datastore: Arc<DataStore>,
2424
sagas: Arc<dyn StartSaga>,
25+
disabled: bool,
2526
}
2627

2728
impl RegionSnapshotReplacementGarbageCollect {
29+
#[allow(dead_code)]
2830
pub fn new(datastore: Arc<DataStore>, sagas: Arc<dyn StartSaga>) -> Self {
29-
RegionSnapshotReplacementGarbageCollect { datastore, sagas }
31+
RegionSnapshotReplacementGarbageCollect {
32+
datastore,
33+
sagas,
34+
disabled: false,
35+
}
36+
}
37+
38+
pub fn disabled(
39+
datastore: Arc<DataStore>,
40+
sagas: Arc<dyn StartSaga>,
41+
) -> Self {
42+
RegionSnapshotReplacementGarbageCollect {
43+
datastore,
44+
sagas,
45+
disabled: true,
46+
}
3047
}
3148

3249
async fn send_garbage_collect_request(
@@ -135,6 +152,10 @@ impl BackgroundTask for RegionSnapshotReplacementGarbageCollect {
135152
let mut status =
136153
RegionSnapshotReplacementGarbageCollectStatus::default();
137154

155+
if self.disabled {
156+
return json!(status);
157+
}
158+
138159
self.clean_up_region_snapshot_replacement_volumes(
139160
opctx,
140161
&mut status,

nexus/src/app/background/tasks/region_snapshot_replacement_start.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,20 @@ use std::sync::Arc;
2929
pub struct RegionSnapshotReplacementDetector {
3030
datastore: Arc<DataStore>,
3131
sagas: Arc<dyn StartSaga>,
32+
disabled: bool,
3233
}
3334

3435
impl RegionSnapshotReplacementDetector {
36+
#[allow(dead_code)]
3537
pub fn new(datastore: Arc<DataStore>, sagas: Arc<dyn StartSaga>) -> Self {
36-
RegionSnapshotReplacementDetector { datastore, sagas }
38+
RegionSnapshotReplacementDetector { datastore, sagas, disabled: false }
39+
}
40+
41+
pub fn disabled(
42+
datastore: Arc<DataStore>,
43+
sagas: Arc<dyn StartSaga>,
44+
) -> Self {
45+
RegionSnapshotReplacementDetector { datastore, sagas, disabled: true }
3746
}
3847

3948
async fn send_start_request(
@@ -237,6 +246,10 @@ impl BackgroundTask for RegionSnapshotReplacementDetector {
237246
async {
238247
let mut status = RegionSnapshotReplacementStartStatus::default();
239248

249+
if self.disabled {
250+
return json!(status);
251+
}
252+
240253
self.create_requests_for_region_snapshots_on_expunged_disks(
241254
opctx,
242255
&mut status,

nexus/src/app/background/tasks/region_snapshot_replacement_step.rs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,28 @@ use std::sync::Arc;
4242
pub struct RegionSnapshotReplacementFindAffected {
4343
datastore: Arc<DataStore>,
4444
sagas: Arc<dyn StartSaga>,
45+
disabled: bool,
4546
}
4647

4748
impl RegionSnapshotReplacementFindAffected {
49+
#[allow(dead_code)]
4850
pub fn new(datastore: Arc<DataStore>, sagas: Arc<dyn StartSaga>) -> Self {
49-
RegionSnapshotReplacementFindAffected { datastore, sagas }
51+
RegionSnapshotReplacementFindAffected {
52+
datastore,
53+
sagas,
54+
disabled: false,
55+
}
56+
}
57+
58+
pub fn disabled(
59+
datastore: Arc<DataStore>,
60+
sagas: Arc<dyn StartSaga>,
61+
) -> Self {
62+
RegionSnapshotReplacementFindAffected {
63+
datastore,
64+
sagas,
65+
disabled: true,
66+
}
5067
}
5168

5269
async fn send_start_request(
@@ -435,6 +452,10 @@ impl BackgroundTask for RegionSnapshotReplacementFindAffected {
435452
async move {
436453
let mut status = RegionSnapshotReplacementStepStatus::default();
437454

455+
if self.disabled {
456+
return json!(status);
457+
}
458+
438459
// Importantly, clean old steps up before finding affected volumes!
439460
// Otherwise, will continue to find the snapshot in volumes to
440461
// delete, and will continue to see conflicts in next function.

0 commit comments

Comments
 (0)