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>
#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.
};
/////////////////////// 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,
return 0;
}
-void md_config_t::
-parse_env()
+void md_config_t::parse_env()
{
Mutex::Locker l(lock);
if (internal_safe_to_start_threads)
/* 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);
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);
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);
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;
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);
oss << "cluster.conf_read_file failed with error " << ret;
return oss.str();
}
+ cluster.conf_parse_env(NULL);
ret = cluster.connect();
if (ret) {
cluster.shutdown();