OPTION(osd_heartbeat_grace, OPT_INT, 20) // (seconds) how long before we decide a peer has failed
OPTION(osd_heartbeat_min_peers, OPT_INT, 10) // minimum number of peers
-// max number of parallel snap trims/pg
-OPTION(osd_pg_max_concurrent_snap_trims, OPT_U64, 2)
-
// minimum number of peers tha tmust be reachable to mark ourselves
// back up after being wrongly marked down.
OPTION(osd_heartbeat_min_healthy_ratio, OPT_FLOAT, .33)
dout(10) << "TrimmingObjects: trimming snap " << snap_to_trim << dendl;
- for (set<RepGather *>::iterator i = repops.begin();
- i != repops.end();
- ) {
- if ((*i)->all_applied && (*i)->all_committed) {
- (*i)->put();
- repops.erase(i++);
- } else {
- ++i;
- }
+ // Get next
+ hobject_t old_pos = pos;
+ int r = pg->snap_mapper.get_next_object_to_trim(snap_to_trim, &pos);
+ if (r != 0 && r != -ENOENT) {
+ derr << __func__ << ": get_next returned " << cpp_strerror(r) << dendl;
+ assert(0);
+ } else if (r == -ENOENT) {
+ // Done!
+ dout(10) << "TrimmingObjects: got ENOENT" << dendl;
+ post_event(SnapTrim());
+ return transit< WaitingOnReplicas >();
}
- while (repops.size() < g_conf->osd_pg_max_concurrent_snap_trims) {
- // Get next
- hobject_t old_pos = pos;
- int r = pg->snap_mapper.get_next_object_to_trim(snap_to_trim, &pos);
- if (r != 0 && r != -ENOENT) {
- derr << __func__ << ": get_next returned " << cpp_strerror(r) << dendl;
- assert(0);
- } else if (r == -ENOENT) {
- // Done!
- dout(10) << "TrimmingObjects: got ENOENT" << dendl;
- post_event(SnapTrim());
- return transit< WaitingOnReplicas >();
- }
-
- dout(10) << "TrimmingObjects react trimming " << pos << dendl;
- RepGather *repop = pg->trim_object(pos);
- if (!repop) {
- dout(10) << __func__ << " could not get write lock on obj "
- << pos << dendl;
- pos = old_pos;
- return discard_event();
- }
- assert(repop);
- repop->queue_snap_trimmer = true;
-
- repops.insert(repop->get());
- pg->simple_repop_submit(repop);
+ dout(10) << "TrimmingObjects react trimming " << pos << dendl;
+ RepGather *repop = pg->trim_object(pos);
+ if (!repop) {
+ dout(10) << __func__ << " could not get write lock on obj "
+ << pos << dendl;
+ pos = old_pos;
+ return discard_event();
}
+ assert(repop);
+ repop->queue_snap_trimmer = true;
+
+ repops.insert(repop->get());
+ pg->simple_repop_submit(repop);
return discard_event();
}
/* WaitingOnReplicasObjects */
for (set<RepGather *>::iterator i = repops.begin();
i != repops.end();
repops.erase(i++)) {
- if (!(*i)->all_applied || !(*i)->all_committed) {
+ if (!(*i)->all_applied) {
return discard_event();
} else {
(*i)->put();