]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common_init: don't init crypto until after fork
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Fri, 20 May 2011 23:35:52 +0000 (16:35 -0700)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Sat, 21 May 2011 00:57:11 +0000 (17:57 -0700)
Get rid of the initialize-then-shutdown-crypto hack. We just initialize
crypto once, after it is safe to do so. There is now a single callback,
common_init_finish, which does the final stage of initialization,
including starting crypto and daemonization (if required.)

common_init_finish needs to be done before messenger::start().

Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
34 files changed:
src/auth/AuthSupported.cc
src/auth/Crypto.h
src/cauthtool.cc
src/cconf.cc
src/cfuse.cc
src/cmds.cc
src/cmon.cc
src/common/DoutStreambuf.cc
src/common/DoutStreambuf.h
src/common/ceph_crypto.cc
src/common/common_init.cc
src/common/common_init.h
src/common/debug.cc
src/common/debug.h
src/cosd.cc
src/csyn.cc
src/dumpjournal.cc
src/dupstore.cc
src/librados-config.cc
src/monmaptool.cc
src/osdmaptool.cc
src/rados.cc
src/rbd.cc
src/rgw/rgw_admin.cc
src/rgw/rgw_main.cc
src/streamtest.cc
src/test/TestDoutStreambuf.cc
src/test/TestSignalHandlers.cc
src/test/TestTimers.cc
src/test/test_mutate.cc
src/test_trans.cc
src/testmsgr.cc
src/tools/ceph.cc
src/tools/gceph.cc

index dc14972ca1462c11a9ff26d6b2a9f149d18edf22..9252b5e5aa9b5ae6788ba2a6360f7c14c34e6da0 100644 (file)
@@ -30,13 +30,11 @@ static void _init_supported(void)
   get_str_list(str, sup_list);
   for (list<string>::iterator iter = sup_list.begin(); iter != sup_list.end(); ++iter) {
     if (iter->compare("cephx") == 0) {
-      dout(10) << "supporting cephx auth protocol" << dendl;
       auth_supported[CEPH_AUTH_CEPHX] = true;
     } else if (iter->compare("none") == 0) {
       auth_supported[CEPH_AUTH_NONE] = true;
-      dout(10) << "supporting *none* auth protocol" << dendl;
     } else {
-      dout(0) << "WARNING: unknown auth protocol defined: " << *iter << dendl;
+      derr << "WARNING: unknown auth protocol defined: " << *iter << dendl;
     }
   }
   _supported_initialized = true;
index 8299c67764095ad0a715bd3ed1727721f8359617..c51a69701ee3b7c3726342e939155acb24457d58 100644 (file)
@@ -90,7 +90,7 @@ static inline ostream& operator<<(ostream& out, const CryptoKey& k)
  * Driver for a particular algorithm
  *
  * To use these functions, you need to call ceph::crypto::init(), see
- * common/ceph_crypto.h. common_init already does this for you.
+ * common/ceph_crypto.h. common_init_finish does this for you.
  */
 class CryptoHandler {
 public:
index b7ed26d6defcd0028d958ce86a9dc38c8b26e6d3..cefe95d5b49421ac32fb2dee55fb1df2356beab2 100644 (file)
@@ -55,6 +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, 0);
   EntityName ename(g_conf.name);
 
   const char *me = argv[0];
index e8e14b64227c75b0496834ba085dfeaca5c1def8..2c9325ef2eadfc23d38f3fed8c4e0bc286d8ba47 100644 (file)
@@ -122,6 +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, 0);
 
   std::string val;
   for (std::vector<const char*>::iterator i = args.begin(); i != args.end(); ) {
index 2576b400f25b37bc9b567e694017e49c750ed303..0a8adb9208a43d6b244e5c78135a7563f5312fb6 100644 (file)
@@ -55,7 +55,6 @@ int main(int argc, const char **argv, const char *envp[]) {
 
   common_init(args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_DAEMON,
              CINIT_FLAG_UNPRIVILEGED_DAEMON_DEFAULTS);
-  keyring_init(&g_conf);
 
   vector<const char*> nargs;
   FOR_EACH_ARG(args) {
@@ -109,19 +108,16 @@ int main(int argc, const char **argv, const char *envp[]) {
       exit(1);
     }
 
-    common_prefork();
     childpid = fork();
   }
 
+  common_init_finish(&g_conf, 0);
+
   if (childpid == 0) {
     //cout << "child, mounting" << std::endl;
     ::close(fd[0]);
 
     cout << "cfuse[" << getpid() << "]: starting ceph client" << std::endl;
-
-    // if we forked, re-init things
-    if (g_conf.daemonize)
-      common_postfork();
     messenger->start_with_nonce(getpid());
 
     // start client
index 0ad19a4a4ab391a9e73d51c88ad2837f86d54cfc..0b807ad076ddff911538472c923b3f10d350756c 100644 (file)
@@ -66,7 +66,6 @@ int main(int argc, const char **argv)
   env_to_vec(args);
 
   common_init(args, CEPH_ENTITY_TYPE_MDS, CODE_ENVIRONMENT_DAEMON, 0);
-  keyring_init(&g_conf);
 
   // mds specific args
   int shadow = 0;
@@ -163,8 +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 ? false : g_conf.daemonize)
-      common_init_daemonize(&g_conf);
+    if (shadow == MDSMap::STATE_ONESHOT_REPLAY)
+      g_conf.daemonize = false;
+    common_init_finish(&g_conf, 0);
     messenger->start();
 
     // start mds
index 7fc742b0ca40868a0740b996acd5455ee0fc5c73..9d1a59b145d1649f566d6b2e44fe1b8561303cdc 100644 (file)
@@ -63,7 +63,6 @@ int main(int argc, const char **argv)
   env_to_vec(args);
 
   common_init(args, CEPH_ENTITY_TYPE_MON, CODE_ENVIRONMENT_DAEMON, 0);
-  keyring_init(&g_conf);
 
   FOR_EACH_ARG(args) {
     if (CEPH_ARGPARSE_EQ("mkfs", '\0')) {
@@ -83,6 +82,8 @@ int main(int argc, const char **argv)
 
   // -- mkfs --
   if (mkfs) {
+    g_conf.daemonize = false;
+    common_init_finish(&g_conf, 0);
     if (g_conf.monmap.empty() || !osdmapfn)
       usage();
 
@@ -243,7 +244,6 @@ int main(int argc, const char **argv)
 
   // bind
   SimpleMessenger *messenger = new SimpleMessenger();
-
   int rank = monmap.get_rank(g_conf.name.get_id());
 
   cout << "starting " << g_conf.name << " rank " << rank
@@ -260,8 +260,7 @@ 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);
 
-  if (g_conf.daemonize)
-    common_init_daemonize(&g_conf);
+  common_init_finish(&g_conf, 0);
   messenger->start();
 
   uint64_t supported =
index 7c861737cf386ffc95e557eb3cbb3687902a2fe1..2c73bcc58d8d515a0d86e0081984b33e4cfb02a6 100644 (file)
@@ -222,9 +222,9 @@ DoutStreambuf<charT, traits>::overflow(DoutStreambuf<charT, traits>::int_type c)
 }
 
 template <typename charT, typename traits>
-void DoutStreambuf<charT, traits>::handle_stderr_closed()
+void DoutStreambuf<charT, traits>::handle_stderr_shutdown()
 {
-  // should hold the dout_lock here
+  DoutLocker _dout_locker;
   flags &= ~DOUTSB_FLAG_STDERR;
 }
 
@@ -302,7 +302,7 @@ template <typename charT, typename traits>
 int DoutStreambuf<charT, traits>::
 handle_pid_change(const md_config_t *conf)
 {
-  // should hold the dout_lock here
+  DoutLocker _dout_locker;
   if (!(flags & DOUTSB_FLAG_OFILE))
     return 0;
 
index 146c482cf5e73cff8925a2b3a43572844abdf5ed..4731ae2f6059a3132abd56a8f2aaaec83754bc2c 100644 (file)
@@ -54,7 +54,7 @@ public:
   // Call when you close stderr.  Not strictly necessary, since we would get an
   // error the next time we tried to write to stdedrr. But nicer than waiting
   // for the error to happen.
-  void handle_stderr_closed();
+  void handle_stderr_shutdown();
 
   virtual const char** get_tracked_conf_keys() const;
 
index 5ec492ed8ef9d4282ca7a4cc55335957b4e69b95..940c42f40352bd93f82187875d3a8eeb2bbe8609 100644 (file)
@@ -38,27 +38,15 @@ ceph::crypto::HMACSHA1::~HMACSHA1()
 
 #elif USE_NSS
 
-static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
-
 void ceph::crypto::init() {
-  pthread_mutex_lock(&lock);
-  if (crypto_init) {
-    pthread_mutex_unlock(&lock);
-    return;
-  }
   crypto_init = true;
-  pthread_mutex_unlock(&lock);
-
   SECStatus s;
   s = NSS_NoDB_Init(NULL);
   assert(s == SECSuccess);
 }
 
 void ceph::crypto::shutdown() {
-  pthread_mutex_lock(&lock);
-  assert(crypto_init);
   crypto_init = false;
-  pthread_mutex_unlock(&lock);
   SECStatus s;
   s = NSS_Shutdown();
   assert(s == SECSuccess);
index 163a1dcd5c0f2bfcdc95b506c21448270206f170..debcf93460a53c066f4d3c52297cadd5182a1033 100644 (file)
@@ -115,8 +115,6 @@ md_config_t *common_preinit(const CephInitParameters &iparams,
       conf->set_val_or_die("daemonize", "false");
       break;
   }
-
-  ceph::crypto::init();
   return conf;
 }
 
@@ -195,29 +193,30 @@ void common_init(std::vector < const char* >& args,
   }
 }
 
-// TODO: until this is exposed to libceph/librados somehow, the
-// library users cannot fork and expect to keep using the library
-void common_prefork() {
-  // NSS is evil and breaks in forked children; shut it down properly
-  // and re-init in both parent and child, after the fork
-  ceph::crypto::shutdown();
-}
-
-void common_postfork() {
-  ceph::crypto::init();
-}
-
 static void pidfile_remove_void(void)
 {
   pidfile_remove();
 }
 
-// callers that fork must either use common_init_daemonize for that, or
-// call common_prefork/common_postfork around the bit where they fork
-void common_init_daemonize(const md_config_t *conf)
+/* Map stderr to /dev/null. This isn't really re-entrant; we rely on the old unix
+ * behavior that the file descriptor that gets assigned is the lowest
+ * available one.
+ */
+int common_init_shutdown_stderr(const md_config_t *conf)
 {
-  common_prefork();
+  TEMP_FAILURE_RETRY(close(STDERR_FILENO));
+  if (open("/dev/null", O_RDONLY) < 0) {
+    int err = errno;
+    derr << "common_init_shutdown_stderr: open(/dev/null) failed: error "
+        << err << dendl;
+    return 1;
+  }
+  conf->_doss->handle_stderr_shutdown();
+  return 0;
+}
 
+static void common_init_daemonize(const md_config_t *conf, int flags)
+{
   int num_threads = Thread::get_num_threads();
   if (num_threads > 1) {
     derr << "common_init_daemonize: BUG: there are " << num_threads - 1
@@ -225,7 +224,7 @@ void common_init_daemonize(const md_config_t *conf)
     exit(1);
   }
 
-  int ret = daemon(1, 0);
+  int ret = daemon(1, 1);
   if (ret) {
     ret = errno;
     derr << "common_init_daemonize: BUG: daemon error: "
@@ -246,11 +245,52 @@ void common_init_daemonize(const md_config_t *conf)
         << "to run at exit." << dendl;
   }
 
-  // move these things into observers.
+  /* This is the old trick where we make file descriptors 0, 1, and possibly 2
+   * point to /dev/null.
+   *
+   * We have to do this because otherwise some arbitrary call to open() later
+   * in the program might get back one of these file descriptors. It's hard to
+   * guarantee that nobody ever writes to stdout, even though they're not
+   * supposed to.
+   */
+  TEMP_FAILURE_RETRY(close(STDIN_FILENO));
+  if (open("/dev/null", O_RDONLY) < 0) {
+    int err = errno;
+    derr << "common_init_daemonize: open(/dev/null) failed: error "
+        << err << dendl;
+    exit(1);
+  }
+  TEMP_FAILURE_RETRY(close(STDOUT_FILENO));
+  if (open("/dev/null", O_RDONLY) < 0) {
+    int err = errno;
+    derr << "common_init_daemonize: open(/dev/null) failed: error "
+        << err << dendl;
+    exit(1);
+  }
+  if (!(flags & CINIT_FLAG_NO_DEFAULT_CONFIG_FILE)) {
+    ret = common_init_shutdown_stderr(conf);
+    if (ret) {
+      derr << "common_init_daemonize: common_init_shutdown_stderr failed with "
+          << "error code " << ret << dendl;
+      exit(1);
+    }
+  }
   pidfile_write(&g_conf);
-  dout_handle_daemonize(&g_conf);
-
+  ret = conf->_doss->handle_pid_change(&g_conf);
+  if (ret) {
+    derr << "common_init_daemonize: _doss->handle_pid_change failed with "
+        << "error code " << ret << dendl;
+    exit(1);
+  }
   dout(1) << "finished common_init_daemonize" << dendl;
+}
 
-  common_postfork();
+void common_init_finish(const md_config_t *conf, int flags)
+{
+  if ((g_code_env == CODE_ENVIRONMENT_DAEMON) && (g_conf.daemonize)) {
+    common_init_daemonize(conf, flags);
+  }
+  ceph::crypto::init();
+  keyring_init(&g_conf);
 }
+
index 411f333b9d8764f6e78018aad72d1b890991b26c..d16233057aef0559c729769406219ba1768196ea 100644 (file)
@@ -17,6 +17,9 @@ enum common_init_flags_t {
 
   // By default, don't read a configuration file
   CINIT_FLAG_NO_DEFAULT_CONFIG_FILE = 0x2,
+
+  // Don't close stderr
+  CINIT_FLAG_NO_CLOSE_STDERR = 0x4,
 };
 
 int keyring_init(md_config_t *conf);
@@ -26,8 +29,7 @@ void complain_about_parse_errors(std::deque<std::string> *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();
-void common_prefork();
-void common_postfork();
-void common_init_daemonize(const md_config_t *conf);
+int common_init_shutdown_stderr(const md_config_t *conf);
+void common_init_finish(const md_config_t *conf, int flags);
 
 #endif
index 8a01e200ba4cda0f3141937d0392e13426bd3c0a..b66c80fc9faedb617ff9d424e872e08c506c3ef2 100644 (file)
@@ -17,14 +17,6 @@ DoutStreambuf <char> *_doss = g_conf._doss;
  */
 pthread_mutex_t _dout_lock = PTHREAD_MUTEX_INITIALIZER;
 
-int dout_handle_daemonize(md_config_t *conf)
-{
-  DoutLocker _dout_locker;
-
-  conf->_doss->handle_stderr_closed();
-  return conf->_doss->handle_pid_change(&g_conf);
-}
-
 void output_ceph_version()
 {
   char buf[1024];
index e596cd152f69036e1bd9ed8d7cbe5cab8ade8fee..255f63cc62dc3dc98b76ee1d14595d833ec516ff 100644 (file)
@@ -30,8 +30,6 @@ extern DoutStreambuf <char, std::basic_string<char>::traits_type> *_doss;
 class md_config_t;
 extern pthread_mutex_t _dout_lock;
 
-extern int dout_handle_daemonize(md_config_t *conf);
-
 extern void dout_emergency(const char * const str);
 
 extern void dout_emergency(const std::string &str);
index 4cea4ea0cc9e11459e8872a6ed9a9334596b9517..8a6da9ad730bb703162edb973c14f990696c2275 100644 (file)
@@ -83,10 +83,9 @@ int main(int argc, const char **argv)
     }
   }
 
-  if (!mkfs)
-    keyring_init(&g_conf);
-
   if (dump_pg_log) {
+    g_conf.daemonize = false;
+    common_init_finish(&g_conf, 0);
     bufferlist bl;
     int r = bl.read_file(dump_pg_log);
     if (r >= 0) {
@@ -123,13 +122,13 @@ int main(int argc, const char **argv)
     usage();
   }
 
-  // get monmap
-  RotatingKeyRing rkeys(CEPH_ENTITY_TYPE_OSD, &g_keyring);
-  MonClient mc(&rkeys);
-  if (mc.build_initial_monmap() < 0)
-    return -1;
-
   if (mkfs) {
+    g_conf.daemonize = false;
+    common_init_finish(&g_conf, 0);
+    RotatingKeyRing rkeys(CEPH_ENTITY_TYPE_OSD, &g_keyring);
+    MonClient mc(&rkeys);
+    if (mc.build_initial_monmap() < 0)
+      return -1;
     if (mc.get_monmap_privately() < 0)
       return -1;
 
@@ -145,6 +144,8 @@ int main(int argc, const char **argv)
     *_dout << " for osd" << whoami << " fsid " << mc.monmap.fsid << dendl;
   }
   if (mkkey) {
+    g_conf.daemonize = false;
+    common_init_finish(&g_conf, 0);
     EntityName ename(g_conf.name);
     EntityAuth eauth;
     eauth.key.create(CEPH_CRYPTO_AES);
@@ -161,6 +162,8 @@ int main(int argc, const char **argv)
   if (mkfs || mkkey)
     exit(0);
   if (mkjournal) {
+    g_conf.daemonize = false;
+    common_init_finish(&g_conf, 0);
     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
@@ -173,6 +176,8 @@ int main(int argc, const char **argv)
     exit(0);
   }
   if (flushjournal) {
+    g_conf.daemonize = false;
+    common_init_finish(&g_conf, 0);
     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
@@ -270,11 +275,16 @@ int main(int argc, const char **argv)
   cluster_messenger->set_policy(entity_name_t::TYPE_CLIENT,
                                SimpleMessenger::Policy::stateless_server(0, 0));
 
-
+  // Set up crypto, daemonize, etc.
+  // Leave stderr open in case we need to report errors.
+  common_init_finish(&g_conf, CINIT_FLAG_NO_CLOSE_STDERR);
+  RotatingKeyRing rkeys(CEPH_ENTITY_TYPE_OSD, &g_keyring);
+  MonClient mc(&rkeys);
+  if (mc.build_initial_monmap() < 0)
+    return -1;
 
   OSD *osd = new OSD(whoami, cluster_messenger, client_messenger, messenger_hb, &mc,
                     g_conf.osd_data, g_conf.osd_journal);
-
   int err = osd->pre_init();
   if (err < 0) {
     derr << TEXT_RED << " ** ERROR: initializing osd failed: " << cpp_strerror(-err)
@@ -282,8 +292,9 @@ int main(int argc, const char **argv)
     return 1;
   }
 
-  if (g_conf.daemonize)
-    common_init_daemonize(&g_conf);
+  // Now close the standard file descriptors
+  common_init_shutdown_stderr(&g_conf);
+
   client_messenger->start();
   messenger_hb->start();
   cluster_messenger->start();
index da9c90a66fac491e8838c5ee48884d97817611df..782c0a79b7350c2548c675956b5c7c959378124e 100644 (file)
@@ -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);
-  keyring_init(&g_conf);
+  common_init_finish(&g_conf, 0);
 
   parse_syn_options(args);   // for SyntheticClient
 
index 0f6f7924f4d8204c5005b932ba19bb4301c496e2..6496a3da30d8e6ef5a5f03fb1a572ca0ac738666 100644 (file)
@@ -82,6 +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, 0);
 
   vec_to_argv(args, argc, argv);
 
index e29482866fd4e27d36dfb8dfa87f1eb2e3799f00..654e3bbb38225898f2478800207d571b4ea3dccf 100644 (file)
@@ -88,6 +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, 0);
 
   // args
   if (args.size() != 4) 
index cc07d7d738cb7549c1237c8af03b57b07ce83a52..8b9aa7615ffcc3bdc7b37854ec05b53255387d26 100644 (file)
@@ -58,6 +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, 0);
 
   FOR_EACH_ARG(args) {
     usage_exit();
index fac8b3aca6e725f376c1e097996db08ba0721fec..00854e38afaa74a41aeb6f200df73e7f71538499 100644 (file)
@@ -51,6 +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, 0);
   FOR_EACH_ARG(args) {
     if (CEPH_ARGPARSE_EQ("print", '\0')) {
       CEPH_ARGPARSE_SET_ARG_VAL(&print, OPT_BOOL);
index 62a8d5acdc6670931c5715976baaae10a9a70198..a494453e29a5230f878a7146e26fe5089b180ab2 100644 (file)
@@ -51,6 +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, 0);
 
   const char *me = argv[0];
 
index b3faef0629b2027fbe9eae4ebcd2bbc7b567b874..a9591a3160fb036a94916e2fc5a3facffcc3bac7 100644 (file)
@@ -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);
-  keyring_init(&g_conf);
+  common_init_finish(&g_conf, 0);
 
   std::map < std::string, std::string > opts;
   std::vector<const char*>::iterator i;
index a5ab28255b7aca0537d895f18e9d378a2fd245b9..855dd023c7660056399a932a4342cd9452ede6aa 100644 (file)
@@ -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);
-  keyring_init(&g_conf);
+  common_init_finish(&g_conf, 0);
 
   const char *poolname = NULL;
   uint64_t size = 0;
index c25dea2fec06dd9f883a9bfe093e9b7d3146802e..1944c2f83afda36ef652e38b9665706307448e74 100644 (file)
@@ -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);
-  keyring_init(&g_conf);
+  common_init_finish(&g_conf, 0);
 
   const char *user_id = 0;
   const char *access_key = 0;
index 932960a329acf8600a9146c1cd4c2052f5c20702..e3948e58dde518b3305483ba195c0273c1f3e6c3 100644 (file)
@@ -75,6 +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, 0);
 
   if (!RGWAccess::init_storage_provider("rados", &g_conf)) {
     derr << "Couldn't init storage provider (RADOS)" << dendl;
@@ -83,7 +84,6 @@ int main(int argc, const char **argv)
 
   sighandler_usr1 = signal(SIGUSR1, godown_handler);
   sighandler_alrm = signal(SIGALRM, godown_alarm);
-  common_postfork();
 
   while (FCGX_Accept(&fcgx.in, &fcgx.out, &fcgx.err, &fcgx.envp) >= 0) 
   {
index 3ffe1da4e2b28c0389edf4d0badc79e1cebae660..08c8ab957aea69481470572eaf87438942342282 100644 (file)
@@ -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);
-  keyring_init(&g_conf);
+  common_init_finish(&g_conf, 0);
 
   // args
   if (args.size() < 3) return -1;
index 8eda5ba3860981f35e545781e64045dc826f603e..01a8a6f18b8694867cab8275c7458e34e5f4b042 100644 (file)
@@ -38,6 +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, 0);
 
   DoutStreambuf<char> *dos = new DoutStreambuf<char>();
 
index 71bc8bee4ab55dc3dc00607b2b9aa51473bfb5b5..c117b00a5705421142ffb414f59ef83b2827214d 100644 (file)
@@ -95,6 +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, 0);
 
   DEFINE_CONF_VARS(usage);
   FOR_EACH_ARG(args) {
index f3c9d78a786057941824a18c4dd26868fc3c40cb..63006ff3f3c344269471b977a548124d126574d0 100644 (file)
@@ -256,6 +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, 0);
 
   int ret;
   Mutex safe_timer_lock("safe_timer_lock");
index 4581ddfd5689fc211367bfecbf0802b9159b3a2c..aeec5416c86e0234f0028b24944d0e35ed3c6342 100644 (file)
@@ -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);
-  keyring_init(&g_conf);
+  common_init_finish(&g_conf, 0);
 
   string val;
   string oid("test_object");
index 7a31e73d81f59947045344d81a1ccc23631adb2d..205d2d424bea8837032fdcb6a3703fbcd1dabc6b 100644 (file)
@@ -36,6 +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, 0);
 
   // args
   if (args.size() < 2) return -1;
index 18a50ffe75c66f87437182ecb8af706a1a512cd0..5e722a5b492d8d6e5351b10e38eea7fa492f0770 100644 (file)
@@ -71,6 +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, 0);
 
   vec_to_argv(args, argc, argv);
 
index de4fddcf9a241ad009d3b9550c618a1cdc67c094..ed1758a10a9ce7d9817bce48aec30f23b649dc21 100644 (file)
@@ -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);
-  keyring_init(&g_conf);
+  common_init_finish(&g_conf, 0);
 
   vec_to_argv(args, argc, argv);
 
index 63d8d3f31ae0310ff4ccf82a58880c40b4884138..5cc249cb70321c4f656d15afd168e154997e4f3f 100644 (file)
@@ -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);
-  keyring_init(&g_conf);
+  common_init_finish(&g_conf, 0);
 
   vec_to_argv(args, argc, argv);