all_activated_and_committed() is called from _activate_committed(), called
from a objectstore completion, and also from the state machine, which is
part of a larger transaction.
Instead, set dirty_info, and build/apply a transaction in the caller
(the completion) as needed. Fixes part of #2360.
Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
m->pg_list.push_back(make_pair(i, pg_interval_map_t()));
osd->cluster_messenger->send_message(m, primary);
}
+
+ if (dirty_info) {
+ ObjectStore::Transaction *t = new ObjectStore::Transaction;
+ write_info(*t);
+ int tr = osd->store->queue_transaction(&osr, t);
+ assert(tr == 0);
+ }
+
unlock();
put();
}
info.history.last_epoch_started = get_osdmap()->get_epoch();
share_pg_info();
- ObjectStore::Transaction *t = new ObjectStore::Transaction;
- write_info(*t);
- int tr = osd->store->queue_transaction(&osr, t);
- assert(tr == 0);
+ dirty_info = true;
}
void PG::queue_snap_trim()