]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/pg: check acting set change before appending pglog 36896/head
authorXuehan Xu <xxhdx1985126@gmail.com>
Mon, 31 Aug 2020 05:17:48 +0000 (13:17 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Mon, 31 Aug 2020 05:17:48 +0000 (13:17 +0800)
Fixes: https://tracker.ceph.com/issues/47133
Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
src/crimson/osd/pg.cc
src/crimson/osd/pg_backend.cc

index 7821c7b0855dfaca775fec7371e5f040567deb9e..c4b3f5df18af7bf3144f8d70d10c82d4cda09162 100644 (file)
@@ -542,6 +542,10 @@ seastar::future<> PG::submit_transaction(const OpInfo& op_info,
 
   epoch_t map_epoch = get_osdmap_epoch();
 
+  if (__builtin_expect(osd_op_p.at_version.epoch != map_epoch, false)) {
+    throw crimson::common::actingset_changed(is_primary());
+  }
+
   std::vector<pg_log_entry_t> log_entries;
   log_entries.emplace_back(obc->obs.exists ?
                      pg_log_entry_t::MODIFY : pg_log_entry_t::DELETE,
index cd08b87edc872f5f4e35da69d3fe1355e92d85f2..030bf383c540c1f8fe68d4e2b02a869713acc3bf 100644 (file)
@@ -130,9 +130,6 @@ PGBackend::mutate_object(
   epoch_t map_epoch,
   std::vector<pg_log_entry_t>&& log_entries)
 {
-  if (__builtin_expect((bool)peering, false)) {
-    throw crimson::common::actingset_changed(peering->is_primary);
-  }
   logger().trace("mutate_object: num_ops={}", txn.get_num_ops());
   if (obc->obs.exists) {
 #if 0