]> 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)
committerNathan Cutler <ncutler@suse.com>
Fri, 4 Sep 2015 15:13:13 +0000 (17:13 +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 5504b2be41d88017643cb3116d481f7eca729527..797a0a39d22ca73257a2df3510e276fd6ded4476 100644 (file)
@@ -6050,6 +6050,10 @@ void ReplicatedPG::finish_promote(int r, OpRequestRef op,
   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)