595
595
if (command == "query") {
596
596
f->open_object_section("pg");
597
597
f->dump_string("state", pg_state_string(get_state()));
598
f->dump_stream("snap_trimq") << snap_trimq;
598
599
f->dump_unsigned("epoch", get_osdmap()->get_epoch());
599
600
f->open_array_section("up");
600
601
for (vector<int>::iterator p = up.begin(); p != up.end(); ++p)
2073
2074
peer_backfill_info[from] = bi;
2075
assert(waiting_on_backfill.find(from) != waiting_on_backfill.end());
2076
waiting_on_backfill.erase(from);
2076
if (waiting_on_backfill.find(from) != waiting_on_backfill.end()) {
2077
waiting_on_backfill.erase(from);
2078
if (waiting_on_backfill.empty()) {
2079
assert(peer_backfill_info.size() == backfill_targets.size());
2080
finish_recovery_op(hobject_t::get_max());
2079
if (waiting_on_backfill.empty()) {
2080
assert(peer_backfill_info.size() == backfill_targets.size());
2081
finish_recovery_op(hobject_t::get_max());
2084
// we canceled backfill for a while due to a too full, and this
2085
// is an extra response from a non-too-full peer
3355
3356
result = _delete_oid(ctx, true);
3358
// mark that this is a cache eviction to avoid triggering normal
3359
// make_writeable() clone or snapdir object creation in finish_ctx()
3360
ctx->cache_evict = true;
3356
3362
osd->logger->inc(l_osd_tier_evict);
5156
5167
ctx->snapset_obc->obs.exists = false;
5159
} else if (ctx->new_snapset.clones.size()) {
5170
} else if (ctx->new_snapset.clones.size() &&
5171
!ctx->cache_evict) {
5160
5172
// save snapset on _snap
5161
5173
hobject_t snapoid(soid.oid, soid.get_key(), CEPH_SNAPDIR, soid.hash,
5162
5174
info.pgid.pool(), soid.get_namespace());
6968
6980
if (get_osdmap()->is_blacklisted(ea)) {
6969
6981
dout(10) << "watch: Found blacklisted watcher for " << ea << dendl;
6970
6982
assert(j->second->get_pg() == this);
6983
j->second->unregister_cb();
6971
6984
handle_watch_timeout(j->second);
9334
9347
// adjust info to backfill
9335
9348
info.last_backfill = hobject_t();
9336
9349
dirty_info = true;
9353
PGLogEntryHandler rollbacker;
9354
pg_log.clear_can_rollback_to(&rollbacker);
9355
rollbacker.apply(this, t);
9337
9357
write_if_dirty(*t);
11974
11994
: my_base(ctx),
11975
11995
NamedState(context< SnapTrimmer >().pg->cct, "NotTrimming")
11977
context< SnapTrimmer >().requeue = false;
11978
11997
context< SnapTrimmer >().log_enter(state_name);
11981
12000
void ReplicatedPG::NotTrimming::exit()
11983
context< SnapTrimmer >().requeue = true;
11984
12002
context< SnapTrimmer >().log_exit(state_name, enter_time);
12041
12059
dout(10) << "TrimmingObjects: trimming snap " << snap_to_trim << dendl;
12044
hobject_t old_pos = pos;
12045
int r = pg->snap_mapper.get_next_object_to_trim(snap_to_trim, &pos);
12046
if (r != 0 && r != -ENOENT) {
12047
derr << __func__ << ": get_next returned " << cpp_strerror(r) << dendl;
12049
} else if (r == -ENOENT) {
12051
dout(10) << "TrimmingObjects: got ENOENT" << dendl;
12052
post_event(SnapTrim());
12053
return transit< WaitingOnReplicas >();
12056
dout(10) << "TrimmingObjects react trimming " << pos << dendl;
12057
RepGather *repop = pg->trim_object(pos);
12059
dout(10) << __func__ << " could not get write lock on obj "
12062
return discard_event();
12065
repop->queue_snap_trimmer = true;
12067
repops.insert(repop->get());
12068
pg->simple_repop_submit(repop);
12061
for (set<RepGather *>::iterator i = repops.begin();
12064
if ((*i)->all_applied && (*i)->all_committed) {
12072
while (repops.size() < g_conf->osd_pg_max_concurrent_snap_trims) {
12074
hobject_t old_pos = pos;
12075
int r = pg->snap_mapper.get_next_object_to_trim(snap_to_trim, &pos);
12076
if (r != 0 && r != -ENOENT) {
12077
derr << __func__ << ": get_next returned " << cpp_strerror(r) << dendl;
12079
} else if (r == -ENOENT) {
12081
dout(10) << "TrimmingObjects: got ENOENT" << dendl;
12082
post_event(SnapTrim());
12083
return transit< WaitingOnReplicas >();
12086
dout(10) << "TrimmingObjects react trimming " << pos << dendl;
12087
RepGather *repop = pg->trim_object(pos);
12089
dout(10) << __func__ << " could not get write lock on obj "
12092
return discard_event();
12095
repop->queue_snap_trimmer = true;
12097
repops.insert(repop->get());
12098
pg->simple_repop_submit(repop);
12069
12100
return discard_event();
12071
12102
/* WaitingOnReplicasObjects */
12074
12105
NamedState(context< SnapTrimmer >().pg->cct, "Trimming/WaitingOnReplicas")
12076
12107
context< SnapTrimmer >().log_enter(state_name);
12077
context< SnapTrimmer >().requeue = false;
12080
12110
void ReplicatedPG::WaitingOnReplicas::exit()