Skip to content

Commit b40358e

Browse files
committed
Return an iterator, because that's how it's used
1 parent c56b599 commit b40358e

File tree

3 files changed

+21
-27
lines changed

3 files changed

+21
-27
lines changed

common/src/impacted_blocks.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
use super::*;
44

5-
use std::{iter::FusedIterator, ops::RangeInclusive};
5+
use std::iter::FusedIterator;
66

77
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
88
pub struct ImpactedAddr {
@@ -137,12 +137,11 @@ impl ImpactedBlocks {
137137
self == &ImpactedBlocks::Empty
138138
}
139139

140-
/// Return a range of impacted extents
140+
/// Return an iterator over impacted extents
141141
pub fn extents(
142142
&self,
143143
ddef: &RegionDefinition,
144-
) -> Option<RangeInclusive<u32>> {
145-
// XXX return a range of `ExtentId` once `std::iter::Step` is stable
144+
) -> impl Iterator<Item = ExtentId> {
146145
let blocks_per_extent = ddef.extent_size().value;
147146
match self {
148147
ImpactedBlocks::Empty => None, /* empty range */
@@ -151,6 +150,9 @@ impl ImpactedBlocks {
151150
..=((lst.0 / blocks_per_extent) as u32),
152151
),
153152
}
153+
.into_iter()
154+
.flatten()
155+
.map(ExtentId)
154156
}
155157

156158
pub fn blocks(&self) -> ImpactedBlockIter {

upstairs/src/downstairs.rs

+4-12
Original file line numberDiff line numberDiff line change
@@ -2081,12 +2081,7 @@ impl Downstairs {
20812081
};
20822082
let ddef = self.ddef.as_ref().unwrap();
20832083
let mut future_repair = false;
2084-
for eid in impacted_blocks
2085-
.extents(ddef)
2086-
.into_iter()
2087-
.flatten()
2088-
.map(ExtentId)
2089-
{
2084+
for eid in impacted_blocks.extents(ddef) {
20902085
if eid == *eur.start() {
20912086
future_repair = true;
20922087
} else if eid > *eur.start() && (eid <= *eur.end() || future_repair)
@@ -3511,17 +3506,14 @@ impl Downstairs {
35113506
self.ds_active.get_blocks_for(ds_id)
35123507
}
35133508

3514-
/// Return the extent range covered by the given job
3509+
/// Returns a list of extents covered by the given job
35153510
///
35163511
/// # Panics
35173512
/// If the job is not stored in our `Downstairs`
35183513
#[cfg(test)]
3519-
pub fn get_extents_for(
3520-
&self,
3521-
ds_id: JobId,
3522-
) -> std::ops::RangeInclusive<u32> {
3514+
pub fn get_extents_for(&self, ds_id: JobId) -> Vec<ExtentId> {
35233515
let ddef = self.ddef.as_ref().unwrap();
3524-
self.get_blocks_for(ds_id).extents(ddef).unwrap()
3516+
self.get_blocks_for(ds_id).extents(ddef).collect()
35253517
}
35263518

35273519
#[cfg(test)]

upstairs/src/upstairs.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -3375,9 +3375,9 @@ pub(crate) mod test {
33753375
assert_eq!(jobs.len(), 3);
33763376

33773377
// confirm which extents are impacted (in case make_upstairs changes)
3378-
assert_eq!(ds.get_extents_for(jobs[0]).count(), 1);
3379-
assert_eq!(ds.get_extents_for(jobs[1]).count(), 2);
3380-
assert_eq!(ds.get_extents_for(jobs[2]).count(), 1);
3378+
assert_eq!(ds.get_extents_for(jobs[0]).len(), 1);
3379+
assert_eq!(ds.get_extents_for(jobs[1]).len(), 2);
3380+
assert_eq!(ds.get_extents_for(jobs[2]).len(), 1);
33813381
assert_ne!(ds.get_extents_for(jobs[0]), ds.get_extents_for(jobs[2]));
33823382

33833383
// confirm deps
@@ -3438,11 +3438,11 @@ pub(crate) mod test {
34383438
assert_eq!(jobs.len(), 5);
34393439

34403440
// confirm which extents are impacted (in case make_upstairs changes)
3441-
assert_eq!(ds.get_extents_for(jobs[0]).count(), 1);
3442-
assert_eq!(ds.get_extents_for(jobs[1]).count(), 2);
3443-
assert_eq!(ds.get_extents_for(jobs[2]).count(), 1);
3444-
assert_eq!(ds.get_extents_for(jobs[3]).count(), 2);
3445-
assert_eq!(ds.get_extents_for(jobs[4]).count(), 1);
3441+
assert_eq!(ds.get_extents_for(jobs[0]).len(), 1);
3442+
assert_eq!(ds.get_extents_for(jobs[1]).len(), 2);
3443+
assert_eq!(ds.get_extents_for(jobs[2]).len(), 1);
3444+
assert_eq!(ds.get_extents_for(jobs[3]).len(), 2);
3445+
assert_eq!(ds.get_extents_for(jobs[4]).len(), 1);
34463446

34473447
assert_ne!(ds.get_extents_for(jobs[0]), ds.get_extents_for(jobs[2]));
34483448
assert_ne!(ds.get_extents_for(jobs[4]), ds.get_extents_for(jobs[2]));
@@ -3494,9 +3494,9 @@ pub(crate) mod test {
34943494
assert_eq!(jobs.len(), 3);
34953495

34963496
// confirm which extents are impacted (in case make_upstairs changes)
3497-
assert_eq!(ds.get_extents_for(jobs[0]).count(), 1);
3498-
assert_eq!(ds.get_extents_for(jobs[1]).count(), 1);
3499-
assert_eq!(ds.get_extents_for(jobs[2]).count(), 2);
3497+
assert_eq!(ds.get_extents_for(jobs[0]).len(), 1);
3498+
assert_eq!(ds.get_extents_for(jobs[1]).len(), 1);
3499+
assert_eq!(ds.get_extents_for(jobs[2]).len(), 2);
35003500

35013501
assert_ne!(ds.get_extents_for(jobs[0]), ds.get_extents_for(jobs[1]));
35023502

0 commit comments

Comments
 (0)