]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Librbd: Use boost:assign to init aware_confs
authorHaomai Wang <haomaiwang@gmail.com>
Thu, 9 Apr 2015 08:04:07 +0000 (16:04 +0800)
committerHaomai Wang <haomaiwang@gmail.com>
Thu, 9 Apr 2015 08:04:07 +0000 (16:04 +0800)
Signed-off-by: Haomai Wang <haomaiwang@gmail.com>
src/librbd/ImageCtx.cc
src/librbd/ImageCtx.h
src/test/librbd/test_internal.cc

index 31a06c5bad2b03f254a84ff313e020c22817521a..60d7ec966bffc68809e82d90ebde84c0cac9e0c7 100644 (file)
@@ -16,6 +16,7 @@
 #include "librbd/ObjectMap.h"
 
 #include <boost/bind.hpp>
+#include <boost/assign/list_of.hpp>
 
 #define dout_subsys ceph_subsys_rbd
 #undef dout_prefix
@@ -33,29 +34,6 @@ using librados::IoCtx;
 
 namespace librbd {
   const string ImageCtx::METADATA_CONF_PREFIX = "conf_";
-  const char *ImageCtx::AWARE_CONFS[] = {
-    "rbd_cache",
-    "rbd_cache_writethrough_until_flush",
-    "rbd_cache_size",
-    "rbd_cache_max_dirty",
-    "rbd_cache_target_dirty",
-    "rbd_cache_max_dirty_age",
-    "rbd_cache_max_dirty_object",
-    "rbd_cache_block_writes_upfront",
-    "rbd_concurrent_management_ops",
-    "rbd_balance_snap_reads",
-    "rbd_localize_snap_reads",
-    "rbd_balance_parent_reads",
-    "rbd_localize_parent_reads",
-    "rbd_readahead_trigger_requests",
-    "rbd_readahead_max_bytes",
-    "rbd_readahead_disable_after_bytes",
-    "rbd_clone_copy_on_read",
-    "rbd_blacklist_on_break_lock",
-    "rbd_blacklist_expire_seconds",
-    "rbd_request_timed_out_seconds",
-  };
-  const size_t ImageCtx::AWARE_CONFS_LEN = 20;
 
   ImageCtx::ImageCtx(const string &image_name, const string &image_id,
                     const char *snap, IoCtx& p, bool ro)
@@ -97,6 +75,28 @@ namespace librbd {
 
     memset(&header, 0, sizeof(header));
     memset(&layout, 0, sizeof(layout));
+
+    aware_confs = boost::assign::list_of(
+        "rbd_cache")(
+        "rbd_cache_writethrough_until_flush")(
+        "rbd_cache_size")(
+        "rbd_cache_max_dirty")(
+        "rbd_cache_target_dirty")(
+        "rbd_cache_max_dirty_age")(
+        "rbd_cache_max_dirty_object")(
+        "rbd_cache_block_writes_upfront")(
+        "rbd_concurrent_management_ops")(
+        "rbd_balance_snap_reads")(
+        "rbd_localize_snap_reads")(
+        "rbd_balance_parent_reads")(
+        "rbd_localize_parent_reads")(
+        "rbd_readahead_trigger_requests")(
+        "rbd_readahead_max_bytes")(
+        "rbd_readahead_disable_after_bytes")(
+        "rbd_clone_copy_on_read")(
+        "rbd_blacklist_on_break_lock")(
+        "rbd_blacklist_expire_seconds")(
+        "rbd_request_timed_out_seconds");
   }
 
   ImageCtx::~ImageCtx() {
@@ -832,7 +832,7 @@ namespace librbd {
     }
   }
 
-  bool ImageCtx::_aware_metadata_confs(const string &prefix, const char **configs, size_t len,
+  bool ImageCtx::_aware_metadata_confs(const string &prefix, const std::vector<string> &configs,
                                        map<string, bufferlist> &pairs, map<string, bufferlist> *res) {
     size_t conf_prefix_len = prefix.size();
 
@@ -841,9 +841,10 @@ namespace librbd {
       if (it->first.size() <= conf_prefix_len || it->first.compare(0, conf_prefix_len, prefix))
         return false;
 
-      for (size_t i = 0; i < len; ++i) {
-        string key = it->first.substr(conf_prefix_len, it->first.size() - conf_prefix_len);
-        if (!key.compare(configs[i])) {
+      string key = it->first.substr(conf_prefix_len, it->first.size() - conf_prefix_len);
+      for (std::vector<string>::const_iterator cit = configs.begin();
+           cit != configs.end(); ++cit) {
+        if (!key.compare(*cit)) {
           res->insert(make_pair(key, it->second));
           break;
         }
@@ -869,8 +870,7 @@ namespace librbd {
       if (pairs.empty())
         break;
       
-      is_continue = _aware_metadata_confs(METADATA_CONF_PREFIX, AWARE_CONFS, AWARE_CONFS_LEN,
-                                          pairs, &res);
+      is_continue = _aware_metadata_confs(METADATA_CONF_PREFIX, aware_confs, pairs, &res);
       for (map<string, bufferlist>::iterator it = res.begin(); it != res.end(); ++it) {
         j = cct->_conf->set_val(it->first.c_str(), it->second.c_str());
         if (j < 0)
index 7698805cfca839acb843ecd25633322c436df316..4a908e42ea4eff1e522d6bb65ab252a6a60de046 100644 (file)
@@ -132,8 +132,7 @@ namespace librbd {
 
     // Configuration
     static const string METADATA_CONF_PREFIX;
-    static const char *AWARE_CONFS[];
-    static const size_t AWARE_CONFS_LEN;
+    std::vector<string> aware_confs;
     bool rbd_cache;
     bool rbd_cache_writethrough_until_flush;
     uint64_t rbd_cache_size;
@@ -154,7 +153,7 @@ namespace librbd {
     bool rbd_blacklist_on_break_lock;
     uint32_t rbd_blacklist_expire_seconds;
     uint32_t rbd_request_timed_out_seconds;
-    static bool _aware_metadata_confs(const string &prefix, const char **configs, size_t len,
+    static bool _aware_metadata_confs(const string &prefix, const std::vector<string> &configs,
                                       map<string, bufferlist> &pairs, map<string, bufferlist> *res);
 
     /**
index 7a4b7cbd03b39a416b2eb22258112458f7c1bf67..c0737fd266a128df6be9c3d9888594b484de7b49 100644 (file)
@@ -5,6 +5,7 @@
 #include "librbd/ImageWatcher.h"
 #include "librbd/internal.h"
 #include <boost/scope_exit.hpp>
+#include <boost/assign/list_of.hpp>
 #include <utility>
 #include <vector>
 
@@ -365,11 +366,10 @@ TEST_F(TestInternal, MultipleResize) {
 TEST_F(TestInternal, MetadatConfig) {
   REQUIRE_FEATURE(RBD_FEATURE_LAYERING);
 
-  const char *test_confs[] = {
-    "aaaaaaa",
-    "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
-    "cccccccccccccc",
-  };
+  const vector<string> test_confs = boost::assign::list_of(
+    "aaaaaaa")(
+    "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")(
+    "cccccccccccccc");
   const string prefix = "test_config_";
   bool is_continue;
   librbd::ImageCtx *ictx;
@@ -383,8 +383,7 @@ TEST_F(TestInternal, MetadatConfig) {
   pairs[prefix+"asdfsdaf"].append("value6");
   pairs[prefix+"zxvzxcv123"].append("value5");
 
-  is_continue = ictx->_aware_metadata_confs(prefix, test_confs, sizeof(test_confs) / sizeof(char*),
-                                            pairs, &res);
+  is_continue = ictx->_aware_metadata_confs(prefix, test_confs, pairs, &res);
   ASSERT_TRUE(is_continue);
   ASSERT_TRUE(res.size() == 3U);
   ASSERT_TRUE(res.count(test_confs[0]));
@@ -393,8 +392,7 @@ TEST_F(TestInternal, MetadatConfig) {
   res.clear();
 
   pairs["zzzzzzzz"].append("value7");
-  is_continue = ictx->_aware_metadata_confs(prefix, test_confs, sizeof(test_confs) / sizeof(char*),
-                                            pairs, &res);
+  is_continue = ictx->_aware_metadata_confs(prefix, test_confs, pairs, &res);
   ASSERT_FALSE(is_continue);
   ASSERT_TRUE(res.size() == 3U);
 }