]> git.proxmox.com Git - ceph.git/blame - ceph/src/crimson/osd/backfill_facades.h
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / crimson / osd / backfill_facades.h
CommitLineData
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
10namespace 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.
16struct 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.
63struct 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