osd/ECBackend: do not op_applied on zero at_version for dummy rollforward transaction
authorSage Weil <sage@redhat.com>
Sat, 17 Mar 2018 16:20:06 +0000 (11:20 -0500)
committerSage Weil <sage@redhat.com>
Sun, 18 Mar 2018 10:33:08 +0000 (05:33 -0500)
The dummy rollforward transactions have at_version=0'0; do not call
op_applied on those.

This ensures that the op_applied call

Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/ECBackend.cc
src/osd/PrimaryLogPG.cc

index 874727f1cf197881c8fac76683a44bc961e55f90..6e92775009b5b57ccfc54c8a2351ec35c20d4df8 100644 (file)
@@ -929,7 +929,10 @@ void ECBackend::handle_sub_write(
   tls.push_back(std::move(op.t));
   tls.push_back(std::move(localt));
   get_parent()->queue_transactions(tls, msg);
-  get_parent()->op_applied(op.at_version);
+  if (op.at_version != eversion_t()) {
+    // dummy rollforward transaction doesn't get at_version (and doesn't advance it)
+    get_parent()->op_applied(op.at_version);
+  }
 }
 
 void ECBackend::handle_sub_read(
index e32df9eb32d571001cb4c2cffe40d0ee57f355ed..bc27e844c24a0e86bfb22b807920e8944cd0d40f 100644 (file)
@@ -9930,6 +9930,7 @@ void PrimaryLogPG::repop_all_committed(RepGather *repop)
 void PrimaryLogPG::op_applied(const eversion_t &applied_version)
 {
   dout(10) << "op_applied version " << applied_version << dendl;
+  assert(applied_version != eversion_t());
   assert(applied_version <= info.last_update);
   last_update_applied = applied_version;
   if (is_primary()) {