]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ReplicatedPG: use default priority for Backfill messages
authorSamuel Just <sam.just@inktank.com>
Fri, 14 Dec 2012 20:46:43 +0000 (12:46 -0800)
committerSamuel Just <sam.just@inktank.com>
Fri, 14 Dec 2012 21:38:51 +0000 (13:38 -0800)
Backfill messages modify the stats on the replica and therefore
must be sent with the same priority as sub_op_modify to ensure
ordering.  Using recovery_op_priority caused the following
sequence:

1) Primary(1) sends MOSDPGBackfill FINISH with updated stats (v1)
2) Primary(1) sends SubOp modify for new client op with stats (v2)
3) Replica(2) receives SubOp with stats (v2)
4) Replica(2) receives MOSDPGBackfill FINISH with stats (v1)
5) Replica(2) responds and Primary(1) resets pgtemp making
    Replica(2) Primary(2)
6) PG stats on Primary(2) several ops old.

Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
src/osd/ReplicatedPG.cc

index e0bcb5046d345179463baed40fe711a4b206bcd4..675973e8f073db0e55c52bf879c7edaf68b5bf1d 100644 (file)
@@ -6832,7 +6832,7 @@ int ReplicatedPG::recover_backfill(int max)
     MOSDPGBackfill *m = NULL;
     if (bound.is_max()) {
       m = new MOSDPGBackfill(MOSDPGBackfill::OP_BACKFILL_FINISH, e, e, info.pgid);
-      m->set_priority(g_conf->osd_recovery_op_priority);
+      // Use default priority here, must match sub_op priority
       /* pinfo.stats might be wrong if we did log-based recovery on the
        * backfilled portion in addition to continuing backfill.
        */
@@ -6840,7 +6840,7 @@ int ReplicatedPG::recover_backfill(int max)
       start_recovery_op(hobject_t::get_max());
     } else {
       m = new MOSDPGBackfill(MOSDPGBackfill::OP_BACKFILL_PROGRESS, e, e, info.pgid);
-      m->set_priority(g_conf->osd_recovery_op_priority);
+      // Use default priority here, must match sub_op priority
     }
     m->last_backfill = bound;
     m->stats = pinfo.stats.stats;