]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: add conf_parse_env()
authorSage Weil <sage@newdream.net>
Mon, 12 Sep 2011 17:56:37 +0000 (10:56 -0700)
committerSage Weil <sage@newdream.net>
Mon, 12 Sep 2011 17:56:37 +0000 (10:56 -0700)
With optional env var name, defaults to CEPH_ARGS.

Parse it for librados and librbd api gtests.

Signed-off-by: Sage Weil <sage@newdream.net>
src/common/ceph_argparse.cc
src/common/ceph_argparse.h
src/common/config.cc
src/include/rados/librados.h
src/include/rados/librados.hpp
src/librados.cc
src/test/rados-api/test.cc

index b4dbfd70c962e7f276dee6539047a650a3515ae1..641586de11c5c4669fed9a22fea3fc689ae441a9 100644 (file)
 #undef generic_dout
 #undef dendl
 
-void env_to_vec(std::vector<const char*>& args)
+void env_to_vec(std::vector<const char*>& args, const char *name)
 {
-  char *p = getenv("CEPH_ARGS");
-  if (!p) return;
+  if (!name)
+    name = "CEPH_ARGS";
+  char *p = getenv(name);
+  if (!p)
+    return;
 
   static char buf[1000];
   int len = MIN(strlen(p), sizeof(buf)-1);  // bleh.
index 50168be41251a954931200a87af1a0c2009b5b28..bcad8e65b7ac42d213dd9ae3a6b5a7ae864f259d 100644 (file)
@@ -43,7 +43,7 @@ public:
 };
 
 /////////////////////// Functions ///////////////////////
-extern void env_to_vec(std::vector<const char*>& args);
+extern void env_to_vec(std::vector<const char*>& args, const char *name=NULL);
 extern void argv_to_vec(int argc, const char **argv,
                  std::vector<const char*>& args);
 extern void vec_to_argv(std::vector<const char*>& args,
index 94170c5779b61c9c49a77a6b9f757416d5d00db9..22dc4e17697a6ff2249e7f947690e60e69a72e87 100644 (file)
@@ -587,8 +587,7 @@ parse_config_files_impl(const std::list<std::string> &conf_files,
   return 0;
 }
 
-void md_config_t::
-parse_env()
+void md_config_t::parse_env()
 {
   Mutex::Locker l(lock);
   if (internal_safe_to_start_threads)
index c86b3953addefc8a85a95b5cf7452434dd94ea99..98702883c076321021f8ee3f1675dfa87d0b5e93 100644 (file)
@@ -85,6 +85,8 @@ int rados_conf_read_file(rados_t cluster, const char *path);
 /* Parse argv */
 int rados_conf_parse_argv(rados_t cluster, int argc, const char **argv);
 
+int rados_conf_parse_env(rados_t cluster, const char *var);
+
 /* Sets a configuration value from a string.
  * Returns 0 on success, error code otherwise. */
 int rados_conf_set(rados_t cluster, const char *option, const char *value);
index bd41f160364969de14f02cd138a974b181f8629e..c5c448a470fd8ce7841d0e04d728dc00a2b66a8c 100644 (file)
@@ -345,6 +345,7 @@ namespace librados
     void shutdown();
     int conf_read_file(const char * const path) const;
     int conf_parse_argv(int argc, const char ** argv) const;
+    int conf_parse_env(const char *env) const;
     int conf_set(const char *option, const char *value);
     int conf_get(const char *option, std::string &val);
 
index c2d6d0b3e00f94d2d77b95bc427b36e15ad1b269..14fa2b1fb01acb662275c9475e906851a365e0fc 100644 (file)
@@ -3151,6 +3151,11 @@ int librados::Rados::conf_parse_argv(int argc, const char ** argv) const
   return rados_conf_parse_argv((rados_t)client, argc, argv);
 }
 
+int librados::Rados::conf_parse_env(const char *name) const
+{
+  return rados_conf_parse_env((rados_t)client, name);
+}
+
 int librados::Rados::conf_set(const char *option, const char *value)
 {
   return rados_conf_set((rados_t)client, option, value);
@@ -3420,6 +3425,19 @@ extern "C" int rados_conf_parse_argv(rados_t cluster, int argc, const char **arg
   return 0;
 }
 
+extern "C" int rados_conf_parse_env(rados_t cluster, const char *env)
+{
+  librados::RadosClient *client = (librados::RadosClient *)cluster;
+  md_config_t *conf = client->cct->_conf;
+  vector<const char*> args;
+  env_to_vec(args, env);
+  int ret = conf->parse_argv(args);
+  if (ret)
+    return ret;
+  conf->apply_changes(NULL);
+  return 0;
+}
+
 extern "C" int rados_conf_set(rados_t cluster, const char *option, const char *value)
 {
   librados::RadosClient *client = (librados::RadosClient *)cluster;
index ba9c5f2082edc39137c8fa0952fa9657372ba681..dd0c4f0f1f434f0ac7fb4e239e91cb823c8b917b 100644 (file)
@@ -38,6 +38,7 @@ std::string create_one_pool(const std::string &pool_name, rados_t *cluster)
     oss << "rados_conf_read_file failed with error " << ret;
     return oss.str();
   }
+  rados_conf_parse_env(*cluster, NULL);
   ret = rados_connect(*cluster);
   if (ret) {
     rados_shutdown(*cluster);
@@ -71,6 +72,7 @@ std::string create_one_pool_pp(const std::string &pool_name, Rados &cluster)
     oss << "cluster.conf_read_file failed with error " << ret;
     return oss.str();
   }
+  cluster.conf_parse_env(NULL);
   ret = cluster.connect();
   if (ret) {
     cluster.shutdown();