Skip to content

Commit f8e4e33

Browse files
authored
Merge pull request ceph#53521 from xxhdx1985126/wip-62857
crimson/osd/replicated_backend: don't put pg's metadata updates in repops Reviewed-by: Samuel Just <[email protected]>
2 parents 0855adb + 9b9eff1 commit f8e4e33

File tree

5 files changed

+49
-28
lines changed

5 files changed

+49
-28
lines changed

src/crimson/osd/pg.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ PG::PG(
104104
pgid.pgid,
105105
pg_shard,
106106
pool,
107+
*this,
107108
coll_ref,
108109
shard_services,
109110
profile,
@@ -757,8 +758,7 @@ PG::submit_transaction(
757758
ceph_assert(!has_reset_since(osd_op_p.at_version.epoch));
758759

759760
peering_state.pre_submit_op(obc->obs.oi.soid, log_entries, osd_op_p.at_version);
760-
peering_state.append_log_with_trim_to_updated(std::move(log_entries), osd_op_p.at_version,
761-
txn, true, false);
761+
peering_state.update_trim_to();
762762

763763
ceph_assert(!log_entries.empty());
764764
ceph_assert(log_entries.rbegin()->version >= projected_last_update);

src/crimson/osd/pg_backend.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "crimson/os/futurized_store.h"
2424
#include "crimson/osd/osd_operation.h"
2525
#include "crimson/osd/object_context_loader.h"
26+
#include "crimson/osd/pg.h"
2627
#include "replicated_backend.h"
2728
#include "replicated_recovery_backend.h"
2829
#include "ec_backend.h"
@@ -43,14 +44,15 @@ std::unique_ptr<PGBackend>
4344
PGBackend::create(pg_t pgid,
4445
const pg_shard_t pg_shard,
4546
const pg_pool_t& pool,
47+
crimson::osd::PG& pg,
4648
crimson::os::CollectionRef coll,
4749
crimson::osd::ShardServices& shard_services,
4850
const ec_profile_t& ec_profile,
4951
DoutPrefixProvider &dpp)
5052
{
5153
switch (pool.type) {
5254
case pg_pool_t::TYPE_REPLICATED:
53-
return std::make_unique<ReplicatedBackend>(pgid, pg_shard,
55+
return std::make_unique<ReplicatedBackend>(pgid, pg_shard, pg,
5456
coll, shard_services,
5557
dpp);
5658
case pg_pool_t::TYPE_ERASURE:

src/crimson/osd/pg_backend.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ class PGBackend
7070
static std::unique_ptr<PGBackend> create(pg_t pgid,
7171
const pg_shard_t pg_shard,
7272
const pg_pool_t& pool,
73+
crimson::osd::PG &pg,
7374
crimson::os::CollectionRef coll,
7475
crimson::osd::ShardServices& shard_services,
7576
const ec_profile_t& ec_profile,

src/crimson/osd/replicated_backend.cc

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,22 @@
88
#include "crimson/common/exception.h"
99
#include "crimson/common/log.h"
1010
#include "crimson/os/futurized_store.h"
11+
#include "crimson/osd/pg.h"
1112
#include "crimson/osd/shard_services.h"
1213
#include "osd/PeeringState.h"
1314

1415
SET_SUBSYS(osd);
1516

1617
ReplicatedBackend::ReplicatedBackend(pg_t pgid,
1718
pg_shard_t whoami,
19+
crimson::osd::PG& pg,
1820
ReplicatedBackend::CollectionRef coll,
1921
crimson::osd::ShardServices& shard_services,
2022
DoutPrefixProvider &dpp)
2123
: PGBackend{whoami.shard, coll, shard_services, dpp},
2224
pgid{pgid},
23-
whoami{whoami}
25+
whoami{whoami},
26+
pg(pg)
2427
{}
2528

2629
ReplicatedBackend::ll_read_ierrorator::future<ceph::bufferlist>
@@ -41,36 +44,14 @@ ReplicatedBackend::_submit_transaction(std::set<pg_shard_t>&& pg_shards,
4144
std::vector<pg_log_entry_t>&& log_entries)
4245
{
4346
LOG_PREFIX(ReplicatedBackend::_submit_transaction);
47+
DEBUGDPP("object {}, {}", dpp, hoid);
4448

4549
const ceph_tid_t tid = shard_services.get_tid();
4650
auto pending_txn =
4751
pending_trans.try_emplace(tid, pg_shards.size(), osd_op_p.at_version).first;
4852
bufferlist encoded_txn;
4953
encode(txn, encoded_txn);
5054

51-
DEBUGDPP("object {}", dpp, hoid);
52-
auto all_completed = interruptor::make_interruptible(
53-
shard_services.get_store().do_transaction(coll, std::move(txn))
54-
).then_interruptible([FNAME, this,
55-
peers=pending_txn->second.weak_from_this()] {
56-
if (!peers) {
57-
// for now, only actingset_changed can cause peers
58-
// to be nullptr
59-
ERRORDPP("peers is null, this should be impossible", dpp);
60-
assert(0 == "impossible");
61-
}
62-
if (--peers->pending == 0) {
63-
peers->all_committed.set_value();
64-
peers->all_committed = {};
65-
return seastar::now();
66-
}
67-
return peers->all_committed.get_shared_future();
68-
}).then_interruptible([pending_txn, this] {
69-
auto acked_peers = std::move(pending_txn->second.acked_peers);
70-
pending_trans.erase(pending_txn);
71-
return seastar::make_ready_future<crimson::osd::acked_peers_t>(std::move(acked_peers));
72-
});
73-
7455
auto sends = std::make_unique<std::vector<seastar::future<>>>();
7556
for (auto pg_shard : pg_shards) {
7657
if (pg_shard != whoami) {
@@ -91,9 +72,43 @@ ReplicatedBackend::_submit_transaction(std::set<pg_shard_t>&& pg_shards,
9172
m->min_last_complete_ondisk = osd_op_p.min_last_complete_ondisk;
9273
m->set_rollback_to(osd_op_p.at_version);
9374
// TODO: set more stuff. e.g., pg_states
94-
sends->emplace_back(shard_services.send_to_osd(pg_shard.osd, std::move(m), map_epoch));
75+
sends->emplace_back(
76+
shard_services.send_to_osd(
77+
pg_shard.osd, std::move(m), map_epoch));
9578
}
9679
}
80+
81+
pg.log_operation(
82+
std::move(log_entries),
83+
osd_op_p.pg_trim_to,
84+
osd_op_p.at_version,
85+
osd_op_p.min_last_complete_ondisk,
86+
true,
87+
txn,
88+
false);
89+
90+
auto all_completed = interruptor::make_interruptible(
91+
shard_services.get_store().do_transaction(coll, std::move(txn))
92+
).then_interruptible([FNAME, this,
93+
peers=pending_txn->second.weak_from_this()] {
94+
if (!peers) {
95+
// for now, only actingset_changed can cause peers
96+
// to be nullptr
97+
ERRORDPP("peers is null, this should be impossible", dpp);
98+
assert(0 == "impossible");
99+
}
100+
if (--peers->pending == 0) {
101+
peers->all_committed.set_value();
102+
peers->all_committed = {};
103+
return seastar::now();
104+
}
105+
return peers->all_committed.get_shared_future();
106+
}).then_interruptible([pending_txn, this] {
107+
auto acked_peers = std::move(pending_txn->second.acked_peers);
108+
pending_trans.erase(pending_txn);
109+
return seastar::make_ready_future<crimson::osd::acked_peers_t>(std::move(acked_peers));
110+
});
111+
97112
auto sends_complete = seastar::when_all_succeed(
98113
sends->begin(), sends->end()
99114
).finally([sends=std::move(sends)] {});

src/crimson/osd/replicated_backend.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@
1414

1515
namespace crimson::osd {
1616
class ShardServices;
17+
class PG;
1718
}
1819

1920
class ReplicatedBackend : public PGBackend
2021
{
2122
public:
2223
ReplicatedBackend(pg_t pgid, pg_shard_t whoami,
24+
crimson::osd::PG& pg,
2325
CollectionRef coll,
2426
crimson::osd::ShardServices& shard_services,
2527
DoutPrefixProvider &dpp);
@@ -55,6 +57,7 @@ class ReplicatedBackend : public PGBackend
5557
};
5658
using pending_transactions_t = std::map<ceph_tid_t, pending_on_t>;
5759
pending_transactions_t pending_trans;
60+
crimson::osd::PG& pg;
5861

5962
seastar::future<> request_committed(
6063
const osd_reqid_t& reqid, const eversion_t& at_version) final;

0 commit comments

Comments
 (0)