mirror of
https://github.com/ceph/ceph
synced 2025-03-10 10:19:26 +00:00
leveldb has static state that prevents it from recreating its worker thread after our fork(), even when we close and reopen the database (tsk tsk!). Avoid this by forking early, before we touch leveldb. Hide the details in a Preforker class. This is modeled after what ceph-fuse already does; we should convert it later. Signed-off-by: Sage Weil <sage@inktank.com> Reviewed-by: Samuel Just <sam.just@inktank.com> Reviewed-by: Greg Farnum <greg@inktank.com>
80 lines
2.2 KiB
C++
80 lines
2.2 KiB
C++
// -*- 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_COMMON_GLOBAL_INIT_H
|
|
#define CEPH_COMMON_GLOBAL_INIT_H
|
|
|
|
#include <deque>
|
|
#include <stdint.h>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "common/code_environment.h"
|
|
#include "common/common_init.h"
|
|
|
|
class CephContext;
|
|
|
|
/*
|
|
* global_init is the first initialization function that
|
|
* daemons and utility programs need to call. It takes care of a lot of
|
|
* initialization, including setting up g_ceph_context.
|
|
*/
|
|
void global_init(std::vector < const char * > *alt_def_args, std::vector < const char* >& args,
|
|
uint32_t module_type, code_environment_t code_env, int flags);
|
|
|
|
/*
|
|
* perform all of the steps that global_init_daemonize performs just prior
|
|
* to actually forking (via daemon(3)). return 0 if we are going to proceed
|
|
* with the fork, or -1 otherwise.
|
|
*/
|
|
int global_init_prefork(CephContext *cct, int flags);
|
|
|
|
/*
|
|
* perform all of the steps that global_init_daemonize performs just after
|
|
* the fork.
|
|
*/
|
|
void global_init_postfork(CephContext *cct, int flags);
|
|
|
|
/*
|
|
* global_init_daemonize handles daemonizing a process.
|
|
*
|
|
* If this is called, it *must* be called before common_init_finish.
|
|
* Note that this is equivalent to calling _prefork(), daemon(), and
|
|
* _postfork.
|
|
*/
|
|
void global_init_daemonize(CephContext *cct, int flags);
|
|
|
|
/*
|
|
* global_init_chdir changes the process directory.
|
|
*
|
|
* If this is called, it *must* be called before common_init_finish
|
|
*/
|
|
void global_init_chdir(const CephContext *cct);
|
|
|
|
/*
|
|
* Explicitly shut down stderr. Usually, you don't need to do
|
|
* this, because global_init_daemonize will do it for you. However, in some
|
|
* rare cases you need to call this explicitly.
|
|
*
|
|
* If this is called, it *must* be called before common_init_finish
|
|
*/
|
|
int global_init_shutdown_stderr(CephContext *cct);
|
|
|
|
/**
|
|
* print daemon startup banner/warning
|
|
*/
|
|
void global_print_banner(void);
|
|
|
|
#endif
|