From: Colin Patrick McCabe Date: Mon, 23 May 2011 17:11:15 +0000 (-0700) Subject: Add CephContext X-Git-Tag: v0.29~42^2~2^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=13aed89e48ae0f2b2c052cda01f500bee1128f5a;p=ceph.git Add CephContext A CephContext represents the context held by a single library user. There can be multiple CephContexts in the same process. For daemons and utility programs, there will be only one CephContext. The CephContext contains the configuration, the dout object, and anything else that you might want to pass to libcommon with every function call. Move some non-config things out of md_config_t and into CephContext. Signed-off-by: Colin McCabe --- diff --git a/src/Makefile.am b/src/Makefile.am index de22d4456698..376eebd8e8ec 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -638,6 +638,7 @@ libcommon_files = \ mds/MDSMap.cc \ common/common_init.cc \ common/ceph_argparse.cc \ + common/ceph_context.cc \ common/buffer.cc \ common/code_environment.cc \ common/signal.cc \ @@ -785,6 +786,7 @@ noinst_HEADERS = \ common/LogEntry.h\ common/WorkQueue.h\ common/ceph_argparse.h\ + common/ceph_context.h\ common/debug.h\ common/version.h\ common/hex.h\ diff --git a/src/cauthtool.cc b/src/cauthtool.cc index 33718a280eaa..b9bdec1ec091 100644 --- a/src/cauthtool.cc +++ b/src/cauthtool.cc @@ -55,7 +55,7 @@ int main(int argc, const char **argv) common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, CINIT_FLAG_NO_DEFAULT_CONFIG_FILE); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); EntityName ename(g_conf.name); const char *me = argv[0]; diff --git a/src/cconf.cc b/src/cconf.cc index 424ea1460285..806ffcce44af 100644 --- a/src/cconf.cc +++ b/src/cconf.cc @@ -122,7 +122,7 @@ int main(int argc, const char **argv) argv_to_vec(argc, argv, args); env_to_vec(args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); std::string val; for (std::vector::iterator i = args.begin(); i != args.end(); ) { diff --git a/src/cfuse.cc b/src/cfuse.cc index 30e7c3b19ebd..5d063c652bb6 100644 --- a/src/cfuse.cc +++ b/src/cfuse.cc @@ -111,7 +111,7 @@ int main(int argc, const char **argv, const char *envp[]) { childpid = fork(); } - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); if (childpid == 0) { //cout << "child, mounting" << std::endl; diff --git a/src/cmds.cc b/src/cmds.cc index e683753d9fd3..76e869dc1810 100644 --- a/src/cmds.cc +++ b/src/cmds.cc @@ -162,10 +162,9 @@ int main(int argc, const char **argv) messenger->set_policy(entity_name_t::TYPE_CLIENT, SimpleMessenger::Policy::stateful_server(supported, 0)); - if (shadow == MDSMap::STATE_ONESHOT_REPLAY) - g_conf.daemonize = false; - common_init_daemonize(&g_conf, 0); - common_init_finish(&g_conf); + if (shadow != MDSMap::STATE_ONESHOT_REPLAY) + common_init_daemonize(&g_ceph_context, 0); + common_init_finish(&g_ceph_context); messenger->start(); // start mds diff --git a/src/cmon.cc b/src/cmon.cc index 74608c433268..4b616da750d3 100644 --- a/src/cmon.cc +++ b/src/cmon.cc @@ -82,8 +82,7 @@ int main(int argc, const char **argv) // -- mkfs -- if (mkfs) { - g_conf.daemonize = false; - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); if (g_conf.monmap.empty() || !osdmapfn) usage(); @@ -260,8 +259,8 @@ int main(int argc, const char **argv) messenger->set_default_send_priority(CEPH_MSG_PRIO_HIGH); Monitor *mon = new Monitor(g_conf.name.get_id(), &store, messenger, &monmap); - common_init_daemonize(&g_conf, 0); - common_init_finish(&g_conf); + common_init_daemonize(&g_ceph_context, 0); + common_init_finish(&g_ceph_context); messenger->start(); uint64_t supported = diff --git a/src/common/ceph_context.cc b/src/common/ceph_context.cc new file mode 100644 index 000000000000..80aec2c658c3 --- /dev/null +++ b/src/common/ceph_context.cc @@ -0,0 +1,58 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* + * Ceph - scalable distributed file system + * + * Copyright (C) 2011 New Dream Network + * + * This is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software + * Foundation. See file COPYING. + * + */ + +#include "common/DoutStreambuf.h" +#include "common/ProfLogger.h" +#include "common/ceph_context.h" +#include "common/config.h" + +#include + +// FIXME +// These variables are here temporarily to make the transition easier. +CephContext g_ceph_context __attribute__((init_priority(103))); +md_config_t &g_conf(*g_ceph_context._conf); +std::ostream *_dout(&g_ceph_context._dout); +DoutStreambuf ::traits_type> *_doss(g_ceph_context._doss); + +/* + * The dout lock protects calls to dout() + * TODO: needs to become part of CephContext + */ +pthread_mutex_t _dout_lock = PTHREAD_MUTEX_INITIALIZER; + +CephContext:: +CephContext() + : _doss(new DoutStreambuf ::traits_type>()), + _dout(_doss), + _prof_logger_conf_obs(new ProfLoggerConfObs()) +{ + _conf = new md_config_t(); + _conf->add_observer(_doss); + _conf->add_observer(_prof_logger_conf_obs); +} + +CephContext:: +~CephContext() +{ + _conf->remove_observer(_prof_logger_conf_obs); + _conf->remove_observer(_doss); + + delete _doss; + _doss = NULL; + delete _prof_logger_conf_obs; + _prof_logger_conf_obs = NULL; + + delete _conf; +} diff --git a/src/common/ceph_context.h b/src/common/ceph_context.h new file mode 100644 index 000000000000..35aa7e599dad --- /dev/null +++ b/src/common/ceph_context.h @@ -0,0 +1,53 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* + * Ceph - scalable distributed file system + * + * Copyright (C) 2011 New Dream Network + * + * This is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software + * Foundation. See file COPYING. + * + */ + +#ifndef CEPH_CEPHCONTEXT_H +#define CEPH_CEPHCONTEXT_H + +#include + +/* Forward declarations */ +template +class DoutStreambuf; + +class md_config_t; +class md_config_obs_t; + +/* A CephContext represents the context held by a single library user. + * There can be multiple CephContexts in the same process. + * + * For daemons and utility programs, there will be only one CephContext. The + * CephContext contains the configuration, the dout object, and anything else + * that you might want to pass to libcommon with every function call. + */ +class CephContext { +public: + CephContext(); + ~CephContext(); + md_config_t *_conf; + DoutStreambuf ::traits_type> *_doss; + std::ostream _dout; + +private: + md_config_obs_t *_prof_logger_conf_obs; +}; + +/* Globals (FIXME: remove) */ +extern CephContext g_ceph_context; +extern md_config_t &g_conf; +extern std::ostream *_dout; +extern DoutStreambuf ::traits_type> *_doss; + + +#endif diff --git a/src/common/common_init.cc b/src/common/common_init.cc index 52b2efeb718c..e335e1efd3a7 100644 --- a/src/common/common_init.cc +++ b/src/common/common_init.cc @@ -37,8 +37,10 @@ #define _STR(x) #x #define STRINGIFY(x) _STR(x) -int keyring_init(md_config_t *conf) +int keyring_init(CephContext *cct) { + md_config_t *conf = cct->_conf; + if (!is_supported_auth(CEPH_AUTH_CEPHX)) return 0; @@ -88,7 +90,7 @@ int keyring_init(md_config_t *conf) return ret; } -md_config_t *common_preinit(const CephInitParameters &iparams, +CephContext *common_preinit(const CephInitParameters &iparams, enum code_environment_t code_env, int flags) { // set code environment @@ -96,7 +98,8 @@ md_config_t *common_preinit(const CephInitParameters &iparams, // Create a configuration object // TODO: de-globalize - md_config_t *conf = &g_conf; //new md_config_t(); + CephContext *cct = &g_ceph_context; //new CephContext(); + md_config_t *conf = cct->_conf; // add config observers here // Set up our entity name. @@ -115,7 +118,7 @@ md_config_t *common_preinit(const CephInitParameters &iparams, conf->set_val_or_die("daemonize", "false"); break; } - return conf; + return cct; } void complain_about_parse_errors(std::deque *parse_errors) @@ -143,7 +146,8 @@ void common_init(std::vector < const char* >& args, { CephInitParameters iparams = ceph_argparse_early_args(args, module_type, flags); - md_config_t *conf = common_preinit(iparams, code_env, flags); + CephContext *cct = common_preinit(iparams, code_env, flags); + md_config_t *conf = cct->_conf; std::deque parse_errors; int ret = conf->parse_config_files(iparams.get_conf_files(), &parse_errors); @@ -202,7 +206,7 @@ static void pidfile_remove_void(void) * behavior that the file descriptor that gets assigned is the lowest * available one. */ -int common_init_shutdown_stderr(const md_config_t *conf) +int common_init_shutdown_stderr(void) { TEMP_FAILURE_RETRY(close(STDERR_FILENO)); if (open("/dev/null", O_RDONLY) < 0) { @@ -211,14 +215,15 @@ int common_init_shutdown_stderr(const md_config_t *conf) << err << dendl; return 1; } - conf->_doss->handle_stderr_shutdown(); + g_ceph_context._doss->handle_stderr_shutdown(); return 0; } -void common_init_daemonize(const md_config_t *conf, int flags) +void common_init_daemonize(const CephContext *cct, int flags) { if (g_code_env != CODE_ENVIRONMENT_DAEMON) return; + const md_config_t *conf = cct->_conf; if (!conf->daemonize) return; int num_threads = Thread::get_num_threads(); @@ -272,7 +277,7 @@ void common_init_daemonize(const md_config_t *conf, int flags) exit(1); } if (!(flags & CINIT_FLAG_NO_DEFAULT_CONFIG_FILE)) { - ret = common_init_shutdown_stderr(conf); + ret = common_init_shutdown_stderr(); if (ret) { derr << "common_init_daemonize: common_init_shutdown_stderr failed with " << "error code " << ret << dendl; @@ -280,7 +285,7 @@ void common_init_daemonize(const md_config_t *conf, int flags) } } pidfile_write(&g_conf); - ret = conf->_doss->handle_pid_change(&g_conf); + ret = g_ceph_context._doss->handle_pid_change(&g_conf); if (ret) { derr << "common_init_daemonize: _doss->handle_pid_change failed with " << "error code " << ret << dendl; @@ -289,8 +294,8 @@ void common_init_daemonize(const md_config_t *conf, int flags) dout(1) << "finished common_init_daemonize" << dendl; } -void common_init_finish(const md_config_t *conf) +void common_init_finish(CephContext *cct) { ceph::crypto::init(); - keyring_init(&g_conf); + keyring_init(cct); } diff --git a/src/common/common_init.h b/src/common/common_init.h index 07e24e96dbbe..5be95b4ec22d 100644 --- a/src/common/common_init.h +++ b/src/common/common_init.h @@ -8,7 +8,7 @@ #include "common/code_environment.h" -class md_config_t; +class CephContext; class CephInitParameters; enum common_init_flags_t { @@ -22,15 +22,16 @@ enum common_init_flags_t { CINIT_FLAG_NO_CLOSE_STDERR = 0x4, }; -int keyring_init(md_config_t *conf); -md_config_t *common_preinit(const CephInitParameters &iparams, +int keyring_init(CephContext *cct); +CephContext *common_preinit(const CephInitParameters &iparams, enum code_environment_t code_env, int flags); void complain_about_parse_errors(std::deque *parse_errors); void common_init(std::vector < const char* >& args, uint32_t module_type, code_environment_t code_env, int flags); void output_ceph_version(); -int common_init_shutdown_stderr(const md_config_t *conf); -void common_init_daemonize(const md_config_t *conf, int flags); -void common_init_finish(const md_config_t *conf); +int common_init_shutdown_stderr(); +void common_init_daemonize(const CephContext *cct, int flags); +int common_init_shutdown_stderr(void); +void common_init_finish(CephContext *cct); #endif diff --git a/src/common/config.cc b/src/common/config.cc index ef3a44425a6b..5d36ab55579e 100644 --- a/src/common/config.cc +++ b/src/common/config.cc @@ -58,9 +58,6 @@ using std::string; const char *CEPH_CONF_FILE_DEFAULT = "/etc/ceph/ceph.conf, ~/.ceph/config, ceph.conf"; -/* The Ceph configuration. */ -md_config_t g_conf __attribute__((init_priority(103))); - // file layouts struct ceph_file_layout g_default_file_layout = { fl_stripe_unit: init_le32(1<<22), @@ -444,9 +441,6 @@ bool ceph_resolve_file_search(const std::string& filename_list, md_config_t:: md_config_t() - : _doss(new DoutStreambuf ::traits_type>()), - _dout(_doss), - _prof_logger_conf_obs(new ProfLoggerConfObs()) { // // Note: because our md_config_t structure is a global, the memory used to @@ -461,20 +455,11 @@ md_config_t() set_val_from_default(opt); } - add_observer(_doss); - add_observer(_prof_logger_conf_obs); } md_config_t:: ~md_config_t() { - remove_observer(_prof_logger_conf_obs); - remove_observer(_doss); - - delete _doss; - _doss = NULL; - delete _prof_logger_conf_obs; - _prof_logger_conf_obs = NULL; } void md_config_t:: diff --git a/src/common/config.h b/src/common/config.h index f25789f2218d..56fc2cd5bba3 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -40,10 +40,7 @@ extern const char *CEPH_CONF_FILE_DEFAULT; #define LOG_TO_STDERR_SOME 1 #define LOG_TO_STDERR_ALL 2 -template -class DoutStreambuf; - -struct md_config_t { +class md_config_t { public: /* Maps configuration options to the observer listening for them. */ typedef std::multimap obs_map_t; @@ -505,14 +502,8 @@ public: int bdev_fake_mb; int bdev_fake_max_mb; int rgw_log; - - DoutStreambuf ::traits_type> *_doss; - std::ostream _dout; - md_config_obs_t *_prof_logger_conf_obs; }; -extern md_config_t g_conf; - typedef enum { OPT_INT, OPT_LONGLONG, OPT_STR, OPT_DOUBLE, OPT_FLOAT, OPT_BOOL, OPT_ADDR, OPT_U32, OPT_U64 diff --git a/src/common/debug.cc b/src/common/debug.cc index b66c80fc9fae..1a273dcd734f 100644 --- a/src/common/debug.cc +++ b/src/common/debug.cc @@ -7,16 +7,6 @@ #include #include -// Originally, dout was global. Now, there is one for each md_config_t structure. -// These variables are here temporarily to make the transition easier. -std::ostream *_dout = &g_conf._dout; -DoutStreambuf *_doss = g_conf._doss; - -/* - * The dout lock protects calls to dout() - */ -pthread_mutex_t _dout_lock = PTHREAD_MUTEX_INITIALIZER; - void output_ceph_version() { char buf[1024]; diff --git a/src/common/debug.h b/src/common/debug.h index 255f63cc62dc..d9c241eff4c7 100644 --- a/src/common/debug.h +++ b/src/common/debug.h @@ -16,6 +16,7 @@ #ifndef CEPH_DEBUG_H #define CEPH_DEBUG_H +#include "common/ceph_context.h" #include "common/likely.h" #include "common/config.h" // need for g_conf #include "include/assert.h" @@ -25,9 +26,6 @@ #include -extern std::ostream *_dout; -extern DoutStreambuf ::traits_type> *_doss; -class md_config_t; extern pthread_mutex_t _dout_lock; extern void dout_emergency(const char * const str); diff --git a/src/common/signal.cc b/src/common/signal.cc index e8d8323674dc..07e3ade70b91 100644 --- a/src/common/signal.cc +++ b/src/common/signal.cc @@ -52,7 +52,7 @@ void install_sighandler(int signum, signal_handler_t handler, int flags) void sighup_handler(int signum) { - g_conf._doss->request_log_reopen(); + g_ceph_context._doss->request_log_reopen(); } static void reraise_fatal(int signum) diff --git a/src/cosd.cc b/src/cosd.cc index 3183d6f72d74..f8fb37d56be1 100644 --- a/src/cosd.cc +++ b/src/cosd.cc @@ -84,7 +84,7 @@ int main(int argc, const char **argv) } if (dump_pg_log) { - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); bufferlist bl; int r = bl.read_file(dump_pg_log); if (r >= 0) { @@ -122,7 +122,7 @@ int main(int argc, const char **argv) } if (mkfs) { - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); RotatingKeyRing rkeys(CEPH_ENTITY_TYPE_OSD, &g_keyring); MonClient mc(&rkeys); if (mc.build_initial_monmap() < 0) @@ -142,7 +142,7 @@ int main(int argc, const char **argv) *_dout << " for osd" << whoami << " fsid " << mc.monmap.fsid << dendl; } if (mkkey) { - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); EntityName ename(g_conf.name); EntityAuth eauth; eauth.key.create(CEPH_CRYPTO_AES); @@ -159,7 +159,7 @@ int main(int argc, const char **argv) if (mkfs || mkkey) exit(0); if (mkjournal) { - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); int err = OSD::mkjournal(g_conf.osd_data, g_conf.osd_journal); if (err < 0) { derr << TEXT_RED << " ** ERROR: error creating fresh journal " << g_conf.osd_journal @@ -172,7 +172,7 @@ int main(int argc, const char **argv) exit(0); } if (flushjournal) { - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); int err = OSD::flushjournal(g_conf.osd_data, g_conf.osd_journal); if (err < 0) { derr << TEXT_RED << " ** ERROR: error flushing journal " << g_conf.osd_journal @@ -272,8 +272,8 @@ int main(int argc, const char **argv) // Set up crypto, daemonize, etc. // Leave stderr open in case we need to report errors. - common_init_daemonize(&g_conf, CINIT_FLAG_NO_CLOSE_STDERR); - common_init_finish(&g_conf); + common_init_daemonize(&g_ceph_context, CINIT_FLAG_NO_CLOSE_STDERR); + common_init_finish(&g_ceph_context); RotatingKeyRing rkeys(CEPH_ENTITY_TYPE_OSD, &g_keyring); MonClient mc(&rkeys); if (mc.build_initial_monmap() < 0) @@ -289,7 +289,7 @@ int main(int argc, const char **argv) } // Now close the standard file descriptors - common_init_shutdown_stderr(&g_conf); + common_init_shutdown_stderr(); client_messenger->start(); messenger_hb->start(); diff --git a/src/csyn.cc b/src/csyn.cc index 8940b46d88ad..1b7c29bf0c6e 100644 --- a/src/csyn.cc +++ b/src/csyn.cc @@ -47,7 +47,7 @@ int main(int argc, const char **argv, char *envp[]) argv_to_vec(argc, argv, args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); parse_syn_options(args); // for SyntheticClient diff --git a/src/dumpjournal.cc b/src/dumpjournal.cc index b01389615cde..9bc3b5ba92a6 100644 --- a/src/dumpjournal.cc +++ b/src/dumpjournal.cc @@ -82,7 +82,7 @@ int main(int argc, const char **argv, const char *envp[]) env_to_vec(args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); vec_to_argv(args, argc, argv); diff --git a/src/dupstore.cc b/src/dupstore.cc index 72efc895bd40..3116932cf9e1 100644 --- a/src/dupstore.cc +++ b/src/dupstore.cc @@ -88,7 +88,7 @@ int main(int argc, const char **argv) env_to_vec(args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); // args if (args.size() != 4) diff --git a/src/include/ceph/libceph.h b/src/include/ceph/libceph.h index bf28402fee48..c90465dd2543 100644 --- a/src/include/ceph/libceph.h +++ b/src/include/ceph/libceph.h @@ -29,6 +29,7 @@ extern "C" { struct ceph_mount_info; struct ceph_dir_result; +struct CephContext; const char *ceph_version(int *major, int *minor, int *patch); @@ -36,7 +37,7 @@ const char *ceph_version(int *major, int *minor, int *patch); int ceph_create(struct ceph_mount_info **cmount, const char * const id); /* initialization with an existing configuration */ -int ceph_create_with_config(struct ceph_mount_info **cmount, struct md_config_t *conf); +int ceph_create_with_context(struct ceph_mount_info **cmount, struct CephContext *conf); /* Activate the mount */ int ceph_mount(struct ceph_mount_info *cmount, const char *root); diff --git a/src/include/rados/librgw.h b/src/include/rados/librgw.h index a14cabf5f518..cc2d6bdfd32c 100644 --- a/src/include/rados/librgw.h +++ b/src/include/rados/librgw.h @@ -19,8 +19,8 @@ extern "C" { #endif -struct md_config_t; -typedef struct md_config_t* librgw_t; +class CephContext; +typedef CephContext* librgw_t; int librgw_create(librgw_t *rgw, const char * const id); int librgw_acl_bin2xml(librgw_t rgw, const char *bin, int bin_len, char **xml); void librgw_free_xml(librgw_t rgw, char *xml); diff --git a/src/libceph.cc b/src/libceph.cc index 54993ac124df..c184158fdacc 100644 --- a/src/libceph.cc +++ b/src/libceph.cc @@ -35,13 +35,13 @@ static int nonce_seed = 0; class ceph_mount_info { public: - ceph_mount_info(uint64_t msgr_nonce_, md_config_t *conf) + ceph_mount_info(uint64_t msgr_nonce_, CephContext *cct_) : msgr_nonce(msgr_nonce_), mounted(false), client(NULL), monclient(NULL), messenger(NULL), - conf(conf) + cct(cct_) { } @@ -140,12 +140,12 @@ public: std::list conf_files; get_str_list(path, conf_files); std::deque parse_errors; - int ret = conf->parse_config_files(conf_files, &parse_errors); + int ret = cct->_conf->parse_config_files(conf_files, &parse_errors); if (ret) return ret; - conf->parse_env(); // environment variables override + cct->_conf->parse_env(); // environment variables override - conf->apply_changes(); + cct->_conf->apply_changes(); complain_about_parse_errors(&parse_errors); return 0; } @@ -154,23 +154,23 @@ public: { vector args; argv_to_vec(argc, argv, args); - conf->parse_argv(args); - conf->apply_changes(); + cct->_conf->parse_argv(args); + cct->_conf->apply_changes(); } int conf_set(const char *option, const char *value) { - int ret = conf->set_val(option, value); + int ret = cct->_conf->set_val(option, value); if (ret) return ret; - conf->apply_changes(); + cct->_conf->apply_changes(); return 0; } int conf_get(const char *option, char *buf, size_t len) { char *tmp = buf; - return conf->get_val(option, &tmp, len); + return cct->_conf->get_val(option, &tmp, len); } Client *get_client() @@ -190,7 +190,7 @@ private: Client *client; MonClient *monclient; SimpleMessenger *messenger; - md_config_t *conf; + CephContext *cct; std::string cwd; }; @@ -209,12 +209,12 @@ extern "C" const char *ceph_version(int *pmajor, int *pminor, int *ppatch) return VERSION; } -static int ceph_create_with_config_impl(struct ceph_mount_info **cmount, md_config_t *conf) +static int ceph_create_with_context_impl(struct ceph_mount_info **cmount, CephContext *cct) { // should hold libceph_init_mutex here libceph_initialized = true; uint64_t nonce = (uint64_t)++nonce_seed * 1000000ull + (uint64_t)getpid(); - *cmount = new struct ceph_mount_info(nonce, conf); + *cmount = new struct ceph_mount_info(nonce, cct); return 0; } @@ -222,7 +222,7 @@ extern "C" int ceph_create(struct ceph_mount_info **cmount, const char * const i { int ret; libceph_init_mutex.Lock(); - md_config_t *conf = &g_conf; + CephContext *cct = &g_ceph_context; if (!libceph_initialized) { CephInitParameters iparams(CEPH_ENTITY_TYPE_CLIENT, CEPH_CONF_FILE_DEFAULT); iparams.conf_file = ""; @@ -230,20 +230,20 @@ extern "C" int ceph_create(struct ceph_mount_info **cmount, const char * const i iparams.name.set(CEPH_ENTITY_TYPE_CLIENT, id); } - conf = common_preinit(iparams, CODE_ENVIRONMENT_LIBRARY, 0); - conf->parse_env(); // environment variables override - conf->apply_changes(); + cct = common_preinit(iparams, CODE_ENVIRONMENT_LIBRARY, 0); + cct->_conf->parse_env(); // environment variables coverride + cct->_conf->apply_changes(); } - ret = ceph_create_with_config_impl(cmount, conf); + ret = ceph_create_with_context_impl(cmount, cct); libceph_init_mutex.Unlock(); return ret; } -extern "C" int ceph_create_with_config(struct ceph_mount_info **cmount, md_config_t *conf) +extern "C" int ceph_create_with_context(struct ceph_mount_info **cmount, CephContext *cct) { int ret; libceph_init_mutex.Lock(); - ret = ceph_create_with_config_impl(cmount, conf); + ret = ceph_create_with_context_impl(cmount, cct); libceph_init_mutex.Unlock(); return ret; } @@ -280,7 +280,7 @@ extern "C" int ceph_mount(struct ceph_mount_info *cmount, const char *root) { std::string mount_root; - keyring_init(&g_conf); + keyring_init(&g_ceph_context); if (root) mount_root = root; diff --git a/src/librados-config.cc b/src/librados-config.cc index 0c38ac2c962f..1623cde7412b 100644 --- a/src/librados-config.cc +++ b/src/librados-config.cc @@ -58,7 +58,7 @@ int main(int argc, const char **argv) } common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); FOR_EACH_ARG(args) { usage_exit(); diff --git a/src/librados.cc b/src/librados.cc index 8348900ee5e6..697d279779d5 100644 --- a/src/librados.cc +++ b/src/librados.cc @@ -2638,7 +2638,7 @@ init_with_config(md_config_t *conf) int librados::Rados:: connect() { - int ret = keyring_init(&g_conf); + int ret = keyring_init(&g_ceph_context); if (ret) return ret; return client->connect(); @@ -2808,9 +2808,9 @@ extern "C" int rados_create(rados_t *pcluster, const char * const id) // TODO: store this conf pointer in the RadosClient and use it as our // configuration - md_config_t *conf = common_preinit(iparams, CODE_ENVIRONMENT_LIBRARY, 0); - conf->parse_env(); // environment variables override - conf->apply_changes(); + CephContext *cct = common_preinit(iparams, CODE_ENVIRONMENT_LIBRARY, 0); + cct->_conf->parse_env(); // environment variables override + cct->_conf->apply_changes(); ++rados_initialized; } @@ -2841,7 +2841,7 @@ extern "C" int rados_create_with_config(rados_t *pcluster, md_config_t *conf) extern "C" int rados_connect(rados_t cluster) { - int ret = keyring_init(&g_conf); + int ret = keyring_init(&g_ceph_context); if (ret) return ret; librados::RadosClient *radosp = (librados::RadosClient *)cluster; diff --git a/src/mds/MDS.cc b/src/mds/MDS.cc index f3761bcd90be..d1ae8354255f 100644 --- a/src/mds/MDS.cc +++ b/src/mds/MDS.cc @@ -587,7 +587,7 @@ void MDS::tick() snapserver->check_osd_map(false); } - g_conf._doss->handle_log_reopen_requests(&g_conf); + g_ceph_context._doss->handle_log_reopen_requests(&g_conf); } diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 127f13574dfd..49d8e488ab7d 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -965,7 +965,7 @@ void Monitor::tick() } } - g_conf._doss->handle_log_reopen_requests(&g_conf); + g_ceph_context._doss->handle_log_reopen_requests(&g_conf); new_tick(); } diff --git a/src/monmaptool.cc b/src/monmaptool.cc index 3204dd4711ed..38e7a22d19a7 100644 --- a/src/monmaptool.cc +++ b/src/monmaptool.cc @@ -51,7 +51,7 @@ int main(int argc, const char **argv) common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, CINIT_FLAG_NO_DEFAULT_CONFIG_FILE); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); FOR_EACH_ARG(args) { if (CEPH_ARGPARSE_EQ("print", '\0')) { CEPH_ARGPARSE_SET_ARG_VAL(&print, OPT_BOOL); diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 27317585c78e..aa9b6039fb57 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -1793,7 +1793,7 @@ void OSD::tick() dispatch_cond.Signal(); } - g_conf._doss->handle_log_reopen_requests(&g_conf); + g_ceph_context._doss->handle_log_reopen_requests(&g_conf); } // ========================================= diff --git a/src/osdmaptool.cc b/src/osdmaptool.cc index 211fde396842..bf77ab593bed 100644 --- a/src/osdmaptool.cc +++ b/src/osdmaptool.cc @@ -51,7 +51,7 @@ int main(int argc, const char **argv) common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, CINIT_FLAG_NO_DEFAULT_CONFIG_FILE); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); const char *me = argv[0]; diff --git a/src/rados.cc b/src/rados.cc index 1915173edcbd..caf51485bc1e 100644 --- a/src/rados.cc +++ b/src/rados.cc @@ -659,7 +659,7 @@ int main(int argc, const char **argv) env_to_vec(args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); std::map < std::string, std::string > opts; std::vector::iterator i; diff --git a/src/rbd.cc b/src/rbd.cc index 1c05527cbf5b..595bea77a4b7 100644 --- a/src/rbd.cc +++ b/src/rbd.cc @@ -825,7 +825,7 @@ int main(int argc, const char **argv) int opt_cmd = OPT_NO_CMD; common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); const char *poolname = NULL; uint64_t size = 0; diff --git a/src/rgw/librgw.cc b/src/rgw/librgw.cc index 3838ce031a2b..58fecdbfd39f 100644 --- a/src/rgw/librgw.cc +++ b/src/rgw/librgw.cc @@ -38,15 +38,15 @@ int librgw_create(librgw_t *rgw, const char * const id) if (id) { iparams.name.set(CEPH_ENTITY_TYPE_CLIENT, id); } - md_config_t *conf = common_preinit(iparams, CODE_ENVIRONMENT_LIBRARY, 0); - conf->log_to_stderr = 1; // quiet by default - conf->parse_env(); // environment variables override - conf->apply_changes(); + CephContext *cct = common_preinit(iparams, CODE_ENVIRONMENT_LIBRARY, 0); + cct->_conf->log_to_stderr = 1; // quiet by default + cct->_conf->parse_env(); // environment variables override + cct->_conf->apply_changes(); ++librgw_initialized; } librgw_init_mutex.Unlock(); - *rgw = &g_conf; + *rgw = &g_ceph_context; return 0; } diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 655a41621084..c7476205c34e 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -176,7 +176,7 @@ int main(int argc, char **argv) env_to_vec(args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); const char *user_id = 0; const char *access_key = 0; diff --git a/src/rgw/rgw_main.cc b/src/rgw/rgw_main.cc index 1246df892c94..944e19f133bf 100644 --- a/src/rgw/rgw_main.cc +++ b/src/rgw/rgw_main.cc @@ -75,7 +75,7 @@ int main(int argc, const char **argv) argv_to_vec(argc, argv, args); env_to_vec(args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); if (!RGWAccess::init_storage_provider("rados", &g_conf)) { derr << "Couldn't init storage provider (RADOS)" << dendl; diff --git a/src/streamtest.cc b/src/streamtest.cc index 99371b3015f3..0af3cc66c1c4 100644 --- a/src/streamtest.cc +++ b/src/streamtest.cc @@ -97,7 +97,7 @@ int main(int argc, const char **argv) env_to_vec(args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); // args if (args.size() < 3) return -1; diff --git a/src/test/TestDoutStreambuf.cc b/src/test/TestDoutStreambuf.cc index 184cc94eab36..2b8608e35885 100644 --- a/src/test/TestDoutStreambuf.cc +++ b/src/test/TestDoutStreambuf.cc @@ -38,7 +38,7 @@ int main(int argc, const char **argv) env_to_vec(args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); DoutStreambuf *dos = new DoutStreambuf(); diff --git a/src/test/TestSignalHandlers.cc b/src/test/TestSignalHandlers.cc index 4e4ccce05dc8..7e82b2d4efbe 100644 --- a/src/test/TestSignalHandlers.cc +++ b/src/test/TestSignalHandlers.cc @@ -95,7 +95,7 @@ int main(int argc, const char **argv) env_to_vec(args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); DEFINE_CONF_VARS(usage); FOR_EACH_ARG(args) { diff --git a/src/test/TestTimers.cc b/src/test/TestTimers.cc index e804a4a02258..a32311325dd1 100644 --- a/src/test/TestTimers.cc +++ b/src/test/TestTimers.cc @@ -256,7 +256,7 @@ int main(int argc, const char **argv) env_to_vec(args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); int ret; Mutex safe_timer_lock("safe_timer_lock"); diff --git a/src/test/test_mutate.cc b/src/test/test_mutate.cc index 26fb1e6b8718..5d555292e04b 100644 --- a/src/test/test_mutate.cc +++ b/src/test/test_mutate.cc @@ -44,7 +44,7 @@ int main(int argc, const char **argv) argv_to_vec(argc, argv, args); env_to_vec(args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); string val; string oid("test_object"); diff --git a/src/test_trans.cc b/src/test_trans.cc index 601aedf2862d..7ab2ac506f02 100644 --- a/src/test_trans.cc +++ b/src/test_trans.cc @@ -36,7 +36,7 @@ int main(int argc, const char **argv) env_to_vec(args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); // args if (args.size() < 2) return -1; diff --git a/src/testmsgr.cc b/src/testmsgr.cc index 9906c5bed010..4d1efce9fc10 100644 --- a/src/testmsgr.cc +++ b/src/testmsgr.cc @@ -71,7 +71,7 @@ int main(int argc, const char **argv, const char *envp[]) { env_to_vec(args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); vec_to_argv(args, argc, argv); diff --git a/src/tools/ceph.cc b/src/tools/ceph.cc index 947c8ce95313..5b760f3f094e 100644 --- a/src/tools/ceph.cc +++ b/src/tools/ceph.cc @@ -116,7 +116,7 @@ int main(int argc, const char **argv) env_to_vec(args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); vec_to_argv(args, argc, argv); diff --git a/src/tools/gceph.cc b/src/tools/gceph.cc index c4df25a5d781..ec7397d57f1c 100644 --- a/src/tools/gceph.cc +++ b/src/tools/gceph.cc @@ -76,7 +76,7 @@ int main(int argc, const char **argv) env_to_vec(args); common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); - common_init_finish(&g_conf); + common_init_finish(&g_ceph_context); vec_to_argv(args, argc, argv);