Skip to content

Commit b5901f9

Browse files
authored
Merge pull request ceph#46333 from athanatos/sjust/wip-55705
crimson: generalize journal_seq_t to tolerate different paddr_t types Reviewed-by: Yingxin Cheng <[email protected]> Reviewed-by: Myoungwon Oh <[email protected]>
2 parents 449a1e1 + 249bcfb commit b5901f9

File tree

1 file changed

+19
-25
lines changed

1 file changed

+19
-25
lines changed

src/crimson/os/seastore/seastore_types.h

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -811,34 +811,28 @@ struct journal_seq_t {
811811
} else if (segment_seq < other.segment_seq) {
812812
return -1;
813813
}
814-
if (offset.get_addr_type() == addr_types_t::SEGMENT &&
815-
other.offset.get_addr_type() == addr_types_t::SEGMENT) {
816-
auto &seg_paddr = offset.as_seg_paddr();
817-
auto &o_seg_paddr = other.offset.as_seg_paddr();
818-
if (seg_paddr.get_segment_off() > o_seg_paddr.get_segment_off()) {
819-
return 1;
820-
} else if (seg_paddr.get_segment_off() < o_seg_paddr.get_segment_off()) {
821-
return -1;
822-
}
823-
if (seg_paddr.get_segment_id() > o_seg_paddr.get_segment_id()) {
824-
return 1;
825-
} else if (seg_paddr.get_segment_id() < o_seg_paddr.get_segment_id()) {
826-
return -1;
827-
}
828-
} else if (offset.get_addr_type() == addr_types_t::RANDOM_BLOCK &&
829-
other.offset.get_addr_type() == addr_types_t::RANDOM_BLOCK) {
830-
auto &blk_paddr = offset.as_blk_paddr();
831-
auto &o_blk_paddr = other.offset.as_blk_paddr();
832-
if (blk_paddr.get_block_off() > o_blk_paddr.get_block_off()) {
833-
return 1;
834-
} else if (blk_paddr.get_block_off() < o_blk_paddr.get_block_off()) {
835-
return -1;
814+
using ret_t = std::pair<int64_t, segment_id_t>;
815+
auto to_pair = [](const paddr_t &addr) -> ret_t {
816+
if (addr.get_addr_type() == addr_types_t::SEGMENT) {
817+
auto &seg_addr = addr.as_seg_paddr();
818+
return ret_t(seg_addr.get_segment_off(), seg_addr.get_segment_id());
819+
} else if (addr.get_addr_type() == addr_types_t::RANDOM_BLOCK) {
820+
auto &blk_addr = addr.as_blk_paddr();
821+
return ret_t(blk_addr.get_block_off(), MAX_SEG_ID);
822+
} else {
823+
assert(0 == "impossible");
824+
return ret_t(0, MAX_SEG_ID);
836825
}
837-
} else {
838-
// offset.get_addr_type() != other.get_addr_type()
826+
};
827+
auto left = to_pair(offset);
828+
auto right = to_pair(other.offset);
829+
if (left > right) {
830+
return 1;
831+
} else if (left < right) {
839832
return -1;
833+
} else {
834+
return 0;
840835
}
841-
return 0;
842836
}
843837
};
844838

0 commit comments

Comments
 (0)