]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: fix no exit() call for PeeringState::Deleting state 38902/head
authorIgor Fedotov <ifedotov@suse.com>
Wed, 30 Dec 2020 20:41:37 +0000 (23:41 +0300)
committerIgor Fedotov <ifedotov@suse.com>
Thu, 14 Jan 2021 13:30:54 +0000 (16:30 +0300)
Signed-off-by: Igor Fedotov <ifedotov@suse.com>
src/crimson/osd/pg.cc
src/crimson/osd/pg.h
src/osd/PG.cc
src/osd/PG.h
src/osd/PeeringState.cc
src/osd/PeeringState.h

index e9dd078de6c9163dc18899df4d582272dbba2c02..0f01c160783d280851bd25ee6bb69be22486345e 100644 (file)
@@ -308,12 +308,12 @@ void PG::prepare_write(pg_info_t &info,
   }
 }
 
-ghobject_t PG::do_delete_work(ceph::os::Transaction &t,
-  ghobject_t _next)
+std::pair<ghobject_t, bool>
+PG::do_delete_work(ceph::os::Transaction &t, ghobject_t _next)
 {
   // TODO
   shard_services.dec_pg_num();
-  return _next;
+  return {_next, false};
 }
 
 void PG::scrub_requested(scrub_level_t scrub_level, scrub_type_t scrub_type)
index 88d39fde9ad4365946556db61b9b77161b061702..34676ee7a1098877ed558cb95406a9707d65dbf1 100644 (file)
@@ -328,8 +328,8 @@ public:
   void on_removal(ceph::os::Transaction &t) final {
     // TODO
   }
-  ghobject_t do_delete_work(ceph::os::Transaction &t,
-    ghobject_t _next) final;
+  std::pair<ghobject_t, bool>
+  do_delete_work(ceph::os::Transaction &t, ghobject_t _next) final;
 
   // merge/split not ready
   void clear_ready_to_merge() final {}
index 972a5482841a7b8f7ebb93cc86e44e349ef4536f..19b9cc4956ba8749676892cbbdd05460e147102f 100644 (file)
@@ -2606,8 +2606,9 @@ void PG::C_DeleteMore::complete(int r) {
   delete this;
 }
 
-ghobject_t PG::do_delete_work(ObjectStore::Transaction &t,
-                        ghobject_t _next)
+std::pair<ghobject_t, bool> PG::do_delete_work(
+  ObjectStore::Transaction &t,
+  ghobject_t _next)
 {
   dout(10) << __func__ << dendl;
 
@@ -2633,7 +2634,7 @@ ghobject_t PG::do_delete_work(ObjectStore::Transaction &t,
       osd->sleep_timer.add_event_at(delete_schedule_time,
                                    delete_requeue_callback);
       dout(20) << __func__ << " Delete scheduled at " << delete_schedule_time << dendl;
-      return _next;
+      return std::make_pair(_next, true);
     }
   }
 
@@ -2689,6 +2690,7 @@ ghobject_t PG::do_delete_work(ObjectStore::Transaction &t,
     t.remove(coll, oid);
     ++num;
   }
+  bool running = true;
   if (num) {
     dout(20) << __func__ << " deleting " << num << " objects" << dendl;
     Context *fin = new C_DeleteMore(this, get_osdmap_epoch());
@@ -2725,10 +2727,10 @@ ghobject_t PG::do_delete_work(ObjectStore::Transaction &t,
       // exit() methods don't run when that happens.
       osd->local_reserver.cancel_reservation(info.pgid);
 
-      osd->logger->dec(l_osd_pg_removing);
+      running = false;
     }
   }
-  return next;
+  return {next, running};
 }
 
 int PG::pg_stat_adjust(osd_stat_t *ns)
index a2403cc07d551fe757bfe7951061b02c6d954edc..23aea62ba8b73f95305c7e4f41b0ce44e854d3ef 100644 (file)
@@ -485,7 +485,7 @@ public:
     return std::make_unique<PG::PGLogEntryHandler>(this, &t);
   }
 
-  ghobject_t do_delete_work(ObjectStore::Transaction &t,
+  std::pair<ghobject_t, bool> do_delete_work(ObjectStore::Transaction &t,
     ghobject_t _next) override;
 
   void clear_ready_to_merge() override;
index 80208f1e7725b65e30be3ab5d37cc5de0244a160..85c352303e365c6e23bf49f72a6cc2082108d8df 100644 (file)
@@ -6700,8 +6700,6 @@ PeeringState::Deleting::Deleting(my_context ctx)
   : my_base(ctx),
     NamedState(context< PeeringMachine >().state_history, "Started/ToDelete/Deleting")
 {
-  start = ceph::mono_clock::now();
-
   context< PeeringMachine >().log_enter(state_name);
 
   DECLARE_LOCALS;
@@ -6724,9 +6722,11 @@ boost::statechart::result PeeringState::Deleting::react(
   const DeleteSome& evt)
 {
   DECLARE_LOCALS;
-  next = pl->do_delete_work(context<PeeringMachine>().get_cur_transaction(),
+  std::pair<ghobject_t, bool> p;
+  p = pl->do_delete_work(context<PeeringMachine>().get_cur_transaction(),
     next);
-  return discard_event();
+  next = p.first;
+  return p.second ? discard_event() : terminate();
 }
 
 void PeeringState::Deleting::exit()
@@ -6735,9 +6735,6 @@ void PeeringState::Deleting::exit()
   DECLARE_LOCALS;
   ps->deleting = false;
   pl->cancel_local_background_io_reservation();
-  psdout(20) << "Deleting::" << __func__ << this <<" finished in "
-           << ceph::mono_clock::now() - start
-           << dendl;
 }
 
 /*--------GetInfo---------*/
index 98b8fc561c9ab342d18182d8749cb8cfff2e8157..1ae5073d1f37236624aca4938e93c74bb4867a78 100644 (file)
@@ -377,8 +377,8 @@ public:
     /// Notification of removal complete, t must be populated to complete removal
     virtual void on_removal(ObjectStore::Transaction &t) = 0;
     /// Perform incremental removal work
-    virtual ghobject_t do_delete_work(ObjectStore::Transaction &t,
-      ghobject_t _next) = 0;
+    virtual std::pair<ghobject_t, bool> do_delete_work(
+      ObjectStore::Transaction &t, ghobject_t _next) = 0;
 
     // ======================= PG Merge =========================
     virtual void clear_ready_to_merge() = 0;
@@ -1244,7 +1244,6 @@ public:
       boost::statechart::transition<DeleteInterrupted, WaitDeleteReserved>
       > reactions;
     ghobject_t next;
-    ceph::mono_clock::time_point start;
     explicit Deleting(my_context ctx);
     boost::statechart::result react(const DeleteSome &evt);
     void exit();