]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: templetize journal StandardPolicy
authorMykola Golub <mgolub@mirantis.com>
Mon, 19 Sep 2016 06:39:26 +0000 (09:39 +0300)
committerMykola Golub <mgolub@mirantis.com>
Wed, 28 Sep 2016 12:17:19 +0000 (15:17 +0300)
It will be needed for unit tests with a mocked ImageCtx.

Signed-off-by: Mykola Golub <mgolub@mirantis.com>
src/librbd/ImageCtx.cc
src/librbd/journal/StandardPolicy.cc
src/librbd/journal/StandardPolicy.h

index d5437fd1edd74a5a2950e3cd9397f1b0dc3d9c3a..11422d806e9bbaba71f4c14faccf21fbdf9ce4b4 100644 (file)
@@ -210,7 +210,7 @@ struct C_InvalidateCache : public Context {
     } else {
       exclusive_lock_policy = new exclusive_lock::StandardPolicy(this);
     }
-    journal_policy = new journal::StandardPolicy(this);
+    journal_policy = new journal::StandardPolicy<ImageCtx>(this);
   }
 
   ImageCtx::~ImageCtx() {
index 5cba7c02011264bc0e1ea9a0fafe1e803eda2956..7e5e329d7000860ae532c9c2e68fa2562f29d87c 100644 (file)
@@ -13,7 +13,8 @@
 namespace librbd {
 namespace journal {
 
-void StandardPolicy::allocate_tag_on_lock(Context *on_finish) {
+template<typename I>
+void StandardPolicy<I>::allocate_tag_on_lock(Context *on_finish) {
   assert(m_image_ctx->journal != nullptr);
 
   if (!m_image_ctx->journal->is_tag_owner()) {
@@ -27,3 +28,5 @@ void StandardPolicy::allocate_tag_on_lock(Context *on_finish) {
 
 } // namespace journal
 } // namespace librbd
+
+template class librbd::journal::StandardPolicy<librbd::ImageCtx>;
index b1c99cb34fffe88f811bef80b67ae23c679272e7..de3f48bb02ce527c7a5665631e08c9a7f4ced504 100644 (file)
@@ -12,9 +12,10 @@ struct ImageCtx;
 
 namespace journal {
 
+template<typename ImageCtxT = ImageCtx>
 class StandardPolicy : public Policy {
 public:
-  StandardPolicy(ImageCtx *image_ctx) : m_image_ctx(image_ctx) {
+  StandardPolicy(ImageCtxT *image_ctx) : m_image_ctx(image_ctx) {
   }
 
   virtual bool append_disabled() const {
@@ -26,10 +27,12 @@ public:
   virtual void allocate_tag_on_lock(Context *on_finish);
 
 private:
-  ImageCtx *m_image_ctx;
+  ImageCtxT *m_image_ctx;
 };
 
 } // namespace journal
 } // namespace librbd
 
+extern template class librbd::journal::StandardPolicy<librbd::ImageCtx>;
+
 #endif // CEPH_LIBRBD_JOURNAL_STANDARD_POLICY_H