]>
Commit | Line | Data |
---|---|---|
f67539c2 TL |
1 | // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- |
2 | // vim: ts=8 sw=2 smarttab | |
3 | ||
4 | #pragma once | |
5 | ||
6 | #include "crimson/osd/backfill_state.h" | |
7 | #include "crimson/osd/pg.h" | |
8 | #include "osd/PeeringState.h" | |
9 | ||
10 | namespace crimson::osd { | |
11 | ||
12 | // PeeringFacade -- main implementation of the BackfillState::PeeringFacade | |
13 | // interface. We have the abstraction to decuple BackfillState from Peering | |
14 | // State, and thus cut depedencies in unit testing. The second implemention | |
15 | // is BackfillFixture::PeeringFacade and sits in test_backfill.cc. | |
16 | struct PeeringFacade final : BackfillState::PeeringFacade { | |
17 | PeeringState& peering_state; | |
18 | ||
19 | hobject_t earliest_backfill() const override { | |
20 | return peering_state.earliest_backfill(); | |
21 | } | |
22 | ||
23 | const std::set<pg_shard_t>& get_backfill_targets() const override { | |
24 | return peering_state.get_backfill_targets(); | |
25 | } | |
26 | ||
27 | const hobject_t& get_peer_last_backfill(pg_shard_t peer) const override { | |
28 | return peering_state.get_peer_info(peer).last_backfill; | |
29 | } | |
30 | ||
31 | const eversion_t& get_last_update() const override { | |
32 | return peering_state.get_info().last_update; | |
33 | } | |
34 | ||
35 | const eversion_t& get_log_tail() const override { | |
36 | return peering_state.get_info().log_tail; | |
37 | } | |
38 | ||
39 | void scan_log_after(eversion_t v, scan_log_func_t f) const override { | |
40 | peering_state.get_pg_log().get_log().scan_log_after(v, std::move(f)); | |
41 | } | |
42 | ||
43 | bool is_backfill_target(pg_shard_t peer) const override { | |
44 | return peering_state.is_backfill_target(peer); | |
45 | } | |
46 | void update_complete_backfill_object_stats(const hobject_t &hoid, | |
47 | const pg_stat_t &stats) override { | |
48 | peering_state.update_complete_backfill_object_stats(hoid, stats); | |
49 | } | |
50 | ||
51 | bool is_backfilling() const override { | |
52 | return peering_state.is_backfilling(); | |
53 | } | |
54 | ||
55 | PeeringFacade(PeeringState& peering_state) | |
56 | : peering_state(peering_state) { | |
57 | } | |
58 | }; | |
59 | ||
60 | // PGFacade -- a facade (in the GoF-defined meaning) simplifying the huge | |
61 | // interface of crimson's PG class. The motivation is to have an inventory | |
62 | // of behaviour that must be provided by a unit test's mock. | |
63 | struct PGFacade final : BackfillState::PGFacade { | |
64 | PG& pg; | |
65 | ||
66 | const eversion_t& get_projected_last_update() const override { | |
67 | return pg.projected_last_update; | |
68 | } | |
69 | ||
70 | PGFacade(PG& pg) : pg(pg) {} | |
71 | }; | |
72 | ||
73 | } // namespace crimson::osd |