Previously, activate would queue_snap_trim() for replicas if snap_trimq
ended up non-empty, guaranteeing a crash for any replica starting up
while purged_snaps lagged behind pool->cached_removed_snaps.
This should fix #702.
Signed-off-by: Samuel Just <samuelj@hq.newdream.net>
clean_up_local(t);
// initialize snap_trimq
- snap_trimq = pool->cached_removed_snaps;
- snap_trimq.subtract(info.purged_snaps);
- dout(10) << "activate - snap_trimq " << snap_trimq << dendl;
- if (!snap_trimq.empty())
- queue_snap_trim();
+ if (is_primary()) {
+ snap_trimq = pool->cached_removed_snaps;
+ snap_trimq.subtract(info.purged_snaps);
+ dout(10) << "activate - snap_trimq " << snap_trimq << dendl;
+ if (!snap_trimq.empty())
+ queue_snap_trim();
+ }
// init complete pointer
if (missing.num_missing() == 0 &&
bool ReplicatedPG::snap_trimmer()
{
+ assert(is_primary());
lock();
dout(10) << "snap_trimmer start, purged_snaps " << info.purged_snaps << dendl;