From: Sage Weil Date: Thu, 3 Mar 2016 16:13:15 +0000 (-0500) Subject: config: more parse_errors into md_config_t X-Git-Tag: v10.1.0~217^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6c4aafe9cbbfd42b75517d01d8550f0aa4e46280;p=ceph.git config: more parse_errors into md_config_t Signed-off-by: Sage Weil --- diff --git a/src/common/config.cc b/src/common/config.cc index 37758d4d2047..d07893663932 100644 --- a/src/common/config.cc +++ b/src/common/config.cc @@ -199,7 +199,6 @@ void md_config_t::remove_observer(md_config_obs_t* observer_) } int md_config_t::parse_config_files(const char *conf_files, - std::deque *parse_errors, std::ostream *warnings, int flags) { @@ -219,11 +218,10 @@ int md_config_t::parse_config_files(const char *conf_files, } std::list cfl; get_str_list(conf_files, cfl); - return parse_config_files_impl(cfl, parse_errors, warnings); + return parse_config_files_impl(cfl, warnings); } int md_config_t::parse_config_files_impl(const std::list &conf_files, - std::deque *parse_errors, std::ostream *warnings) { assert(lock.is_locked()); @@ -234,7 +232,7 @@ int md_config_t::parse_config_files_impl(const std::list &conf_file cf.clear(); string fn = *c; expand_meta(fn, warnings); - int ret = cf.parse_file(fn.c_str(), parse_errors, warnings); + int ret = cf.parse_file(fn.c_str(), &parse_errors, warnings); if (ret == 0) break; else if (ret != -ENOENT) @@ -285,15 +283,14 @@ int md_config_t::parse_config_files_impl(const std::list &conf_file } if (!old_style_section_names.empty()) { ostringstream oss; - oss << "ERROR! old-style section name(s) found: "; + cerr << "ERROR! old-style section name(s) found: "; string sep; for (std::deque < std::string >::const_iterator os = old_style_section_names.begin(); os != old_style_section_names.end(); ++os) { - oss << sep << *os; + cerr << sep << *os; sep = ", "; } - oss << ". Please use the new style section names that include a period."; - parse_errors->push_back(oss.str()); + cerr << ". Please use the new style section names that include a period."; } return 0; } @@ -1173,3 +1170,8 @@ void md_config_t::diff( diff->insert(make_pair(opt->name, make_pair(local_val, other_val))); } } + +void md_config_t::complain_about_parse_errors(CephContext *cct) +{ + ::complain_about_parse_errors(cct, &parse_errors); +} diff --git a/src/common/config.h b/src/common/config.h index 262dc7153bae..10d3c095cb5e 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -106,7 +106,6 @@ public: // Parse a config file int parse_config_files(const char *conf_files, - std::deque *parse_errors, std::ostream *warnings, int flags); // Absorb config settings from the environment @@ -162,6 +161,9 @@ public: void diff(const md_config_t *other, map > *diff, set *unknown); + /// print/log warnings/errors from parsing the config + void complain_about_parse_errors(CephContext *cct); + private: void _show_config(std::ostream *out, Formatter *f); @@ -176,7 +178,6 @@ private: int parse_injectargs(std::vector& args, std::ostream *oss); int parse_config_files_impl(const std::list &conf_files, - std::deque *parse_errors, std::ostream *warnings); int set_val_impl(const char *val, const config_option *opt); @@ -197,6 +198,9 @@ private: // The configuration file we read, or NULL if we haven't read one. ConfFile cf; +public: + std::deque parse_errors; +private: obs_map_t observers; changed_set_t changed; diff --git a/src/global/global_init.cc b/src/global/global_init.cc index 596f0d2f4ca9..b6b57b85b810 100644 --- a/src/global/global_init.cc +++ b/src/global/global_init.cc @@ -79,8 +79,8 @@ void global_pre_init(std::vector < const char * > *alt_def_args, if (alt_def_args) conf->parse_argv(*alt_def_args); // alternative default args - std::deque parse_errors; - int ret = conf->parse_config_files(c_str_or_null(conf_file_list), &parse_errors, &cerr, flags); + int ret = conf->parse_config_files(c_str_or_null(conf_file_list), + &cerr, flags); if (ret == -EDOM) { dout_emergency("global_init: error parsing config file.\n"); _exit(1); @@ -108,7 +108,7 @@ void global_pre_init(std::vector < const char * > *alt_def_args, conf->parse_argv(args); // argv override // Now we're ready to complain about config file parse errors - complain_about_parse_errors(cct, &parse_errors); + g_conf->complain_about_parse_errors(g_ceph_context); } void global_init(std::vector < const char * > *alt_def_args, diff --git a/src/libcephfs.cc b/src/libcephfs.cc index 400669abbaa8..dd6e91e40f8e 100644 --- a/src/libcephfs.cc +++ b/src/libcephfs.cc @@ -173,12 +173,11 @@ public: int conf_read_file(const char *path_list) { - std::deque parse_errors; - int ret = cct->_conf->parse_config_files(path_list, &parse_errors, NULL, 0); + int ret = cct->_conf->parse_config_files(path_list, NULL, 0); if (ret) return ret; cct->_conf->apply_changes(NULL); - complain_about_parse_errors(cct, &parse_errors); + cct->_conf->complain_about_parse_errors(cct); return 0; } diff --git a/src/librados/librados.cc b/src/librados/librados.cc index e66d17b638ac..e740aa4fa8cc 100644 --- a/src/librados/librados.cc +++ b/src/librados/librados.cc @@ -2456,8 +2456,7 @@ extern "C" int rados_conf_read_file(rados_t cluster, const char *path_list) tracepoint(librados, rados_conf_read_file_enter, cluster, path_list); librados::RadosClient *client = (librados::RadosClient *)cluster; md_config_t *conf = client->cct->_conf; - std::deque parse_errors; - int ret = conf->parse_config_files(path_list, &parse_errors, NULL, 0); + int ret = conf->parse_config_files(path_list, NULL, 0); if (ret) { tracepoint(librados, rados_conf_read_file_exit, ret); return ret; @@ -2465,7 +2464,7 @@ extern "C" int rados_conf_read_file(rados_t cluster, const char *path_list) conf->parse_env(); // environment variables override conf->apply_changes(NULL); - complain_about_parse_errors(client->cct, &parse_errors); + client->cct->_conf->complain_about_parse_errors(client->cct); tracepoint(librados, rados_conf_read_file_exit, 0); return 0; } diff --git a/src/test/confutils.cc b/src/test/confutils.cc index 90e8372dff0b..f323c6859c65 100644 --- a/src/test/confutils.cc +++ b/src/test/confutils.cc @@ -471,35 +471,33 @@ TEST(ConfUtils, EscapingFiles) { TEST(ConfUtils, Overrides) { md_config_t conf; - std::deque err; std::ostringstream warn; std::string override_conf_1_f(next_tempfile(override_config_1)); conf.name.set(CEPH_ENTITY_TYPE_MON, "0"); - conf.parse_config_files(override_conf_1_f.c_str(), &err, &warn, 0); - ASSERT_EQ(err.size(), 0U); + conf.parse_config_files(override_conf_1_f.c_str(), &warn, 0); + ASSERT_EQ(conf.parse_errors.size(), 0U); ASSERT_EQ(conf.log_file, "global_log"); conf.name.set(CEPH_ENTITY_TYPE_MDS, "a"); - conf.parse_config_files(override_conf_1_f.c_str(), &err, &warn, 0); - ASSERT_EQ(err.size(), 0U); + conf.parse_config_files(override_conf_1_f.c_str(), &warn, 0); + ASSERT_EQ(conf.parse_errors.size(), 0U); ASSERT_EQ(conf.log_file, "mds_log"); conf.name.set(CEPH_ENTITY_TYPE_OSD, "0"); - conf.parse_config_files(override_conf_1_f.c_str(), &err, &warn, 0); - ASSERT_EQ(err.size(), 0U); + conf.parse_config_files(override_conf_1_f.c_str(), &warn, 0); + ASSERT_EQ(conf.parse_errors.size(), 0U); ASSERT_EQ(conf.log_file, "osd0_log"); } TEST(ConfUtils, DupKey) { md_config_t conf; - std::deque err; std::ostringstream warn; std::string dup_key_config_f(next_tempfile(dup_key_config_1)); conf.name.set(CEPH_ENTITY_TYPE_MDS, "a"); - conf.parse_config_files(dup_key_config_f.c_str(), &err, &warn, 0); - ASSERT_EQ(err.size(), 0U); + conf.parse_config_files(dup_key_config_f.c_str(), &warn, 0); + ASSERT_EQ(conf.parse_errors.size(), 0U); ASSERT_EQ(conf.log_file, string("3")); } diff --git a/src/test/librados_test_stub/LibradosTestStub.cc b/src/test/librados_test_stub/LibradosTestStub.cc index 99a8f444be2d..b2ddb0593080 100644 --- a/src/test/librados_test_stub/LibradosTestStub.cc +++ b/src/test/librados_test_stub/LibradosTestStub.cc @@ -153,12 +153,11 @@ extern "C" int rados_conf_read_file(rados_t cluster, const char *path) { librados::TestRadosClient *client = reinterpret_cast(cluster); md_config_t *conf = client->cct()->_conf; - std::deque parse_errors; - int ret = conf->parse_config_files(path, &parse_errors, NULL, 0); + int ret = conf->parse_config_files(path, NULL, 0); if (ret == 0) { conf->parse_env(); conf->apply_changes(NULL); - complain_about_parse_errors(client->cct(), &parse_errors); + conf->complain_about_parse_errors(client->cct()); } else if (ret == -EINVAL) { // ignore missing client config return 0;