From: Sage Weil Date: Tue, 8 Jul 2014 23:10:58 +0000 (-0700) Subject: osd: separate cleanup from PGBackend::on_change() X-Git-Tag: v0.83~21^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e299357e2a24474ab7a02e65ca0279336fd04b76;p=ceph.git osd: separate cleanup from PGBackend::on_change() The generic portion of on_change() cleaned up temporary on-disk objects and requires a Transaction. The rest is clearing out in-memory state and does not. Separate the two. Signed-off-by: Sage Weil --- diff --git a/src/osd/ECBackend.cc b/src/osd/ECBackend.cc index 0051548418a7..e2cdc0e5a537 100644 --- a/src/osd/ECBackend.cc +++ b/src/osd/ECBackend.cc @@ -1120,8 +1120,9 @@ void ECBackend::check_recovery_sources(const OSDMapRef osdmap) } } -void ECBackend::_on_change(ObjectStore::Transaction *t) +void ECBackend::on_change() { + dout(10) << __func__ << dendl; writing.clear(); tid_to_op_map.clear(); for (map::iterator i = tid_to_read_map.begin(); diff --git a/src/osd/ECBackend.h b/src/osd/ECBackend.h index 2061ea87912b..c13f30f8061f 100644 --- a/src/osd/ECBackend.h +++ b/src/osd/ECBackend.h @@ -82,7 +82,7 @@ public: /// @see ReadOp below void check_recovery_sources(const OSDMapRef osdmap); - void _on_change(ObjectStore::Transaction *t); + void on_change(); void clear_state(); void on_flushed(); diff --git a/src/osd/PGBackend.cc b/src/osd/PGBackend.cc index 402cc2b4a5a9..d90a2c2862a9 100644 --- a/src/osd/PGBackend.cc +++ b/src/osd/PGBackend.cc @@ -80,7 +80,7 @@ void PGBackend::rollback( } -void PGBackend::on_change(ObjectStore::Transaction *t) +void PGBackend::on_change_cleanup(ObjectStore::Transaction *t) { dout(10) << __func__ << dendl; // clear temp @@ -94,7 +94,6 @@ void PGBackend::on_change(ObjectStore::Transaction *t) ghobject_t(*i, ghobject_t::NO_GEN, get_parent()->whoami_shard().shard)); } temp_contents.clear(); - _on_change(t); } coll_t PGBackend::get_temp_coll(ObjectStore::Transaction *t) diff --git a/src/osd/PGBackend.h b/src/osd/PGBackend.h index dd372612bebb..8c3d9cd5bcab 100644 --- a/src/osd/PGBackend.h +++ b/src/osd/PGBackend.h @@ -299,12 +299,16 @@ virtual void check_recovery_sources(const OSDMapRef osdmap) = 0; + + /** + * clean up any temporary on-disk state due to a pg interval change + */ + void on_change_cleanup(ObjectStore::Transaction *t); /** * implementation should clear itself, contexts blessed prior to on_change * won't be called after on_change() */ - void on_change(ObjectStore::Transaction *t); - virtual void _on_change(ObjectStore::Transaction *t) = 0; + virtual void on_change() = 0; virtual void clear_state() = 0; virtual void on_flushed() = 0; diff --git a/src/osd/ReplicatedBackend.cc b/src/osd/ReplicatedBackend.cc index 468ca418e416..db0db8dc8741 100644 --- a/src/osd/ReplicatedBackend.cc +++ b/src/osd/ReplicatedBackend.cc @@ -192,8 +192,9 @@ void ReplicatedBackend::clear_state() pull_from_peer.clear(); } -void ReplicatedBackend::_on_change(ObjectStore::Transaction *t) +void ReplicatedBackend::on_change() { + dout(10) << __func__ << dendl; for (map::iterator i = in_progress_ops.begin(); i != in_progress_ops.end(); in_progress_ops.erase(i++)) { diff --git a/src/osd/ReplicatedBackend.h b/src/osd/ReplicatedBackend.h index 371574b35766..2d75d42bd807 100644 --- a/src/osd/ReplicatedBackend.h +++ b/src/osd/ReplicatedBackend.h @@ -69,7 +69,7 @@ public: OpRequestRef op ); - void _on_change(ObjectStore::Transaction *t); + void on_change(); void clear_state(); void on_flushed(); diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index bad48726029f..93873be6970b 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -9438,7 +9438,8 @@ void ReplicatedPG::on_change(ObjectStore::Transaction *t) // any dups apply_and_flush_repops(is_primary()); - pgbackend->on_change(t); + pgbackend->on_change_cleanup(t); + pgbackend->on_change(); // clear snap_trimmer state snap_trimmer_machine.process_event(Reset());