]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: trigger the cache agent after a promotion
authorLoic Dachary <ldachary@redhat.com>
Thu, 13 Aug 2015 11:47:24 +0000 (13:47 +0200)
committerLoic Dachary <ldachary@redhat.com>
Sun, 6 Sep 2015 21:28:46 +0000 (23:28 +0200)
When a proxy read happens, the object promotion is done in parallel. The
agent_choose_mode function must be called to reconsider the situation
to protect against the following scenario:

  * proxy read
  * agent_choose_mode finds no object exists and the agent
    goes idle
  * object promotion happens
  * the agent does not reconsider and eviction does not happen
    although it should

http://tracker.ceph.com/issues/12673 Fixes: #12673

Signed-off-by: Loic Dachary <ldachary@redhat.com>
(cherry picked from commit e1f58feb9b1d20b72f2eb2eefdea5982e0cddccd)

src/osd/ReplicatedPG.cc

index 34575abb6c196eece3517b9ab547be2a2fc2b55b..6b22c3a845a68c942bcc1e73794dd466464d6110 100644 (file)
@@ -6694,6 +6694,10 @@ void ReplicatedPG::finish_promote(int r, CopyResults *results,
   simple_repop_submit(repop);
 
   osd->logger->inc(l_osd_tier_promote);
+
+  assert(agent_state);
+  if (agent_state->is_idle())
+    agent_choose_mode();
 }
 
 void ReplicatedPG::cancel_copy(CopyOpRef cop, bool requeue)