193 lines
6.8 KiB
C++
193 lines
6.8 KiB
C++
/**
|
|
* Copyright (C) 2008 10gen Inc.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License, version 3,
|
|
* as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "../pch.h"
|
|
#include "jsobj.h"
|
|
|
|
namespace mongo {
|
|
|
|
#ifdef MONGO_SSL
|
|
class SSLManager;
|
|
#endif
|
|
|
|
|
|
|
|
/* command line options
|
|
*/
|
|
/* concurrency: OK/READ */
|
|
struct CmdLine {
|
|
|
|
CmdLine();
|
|
|
|
string binaryName; // mongod or mongos
|
|
string cwd; // cwd of when process started
|
|
|
|
// this is suboptimal as someone could rename a binary. todo...
|
|
bool isMongos() const { return binaryName == "mongos"; }
|
|
|
|
int port; // --port
|
|
enum {
|
|
DefaultDBPort = 27017,
|
|
ConfigServerPort = 27019,
|
|
ShardServerPort = 27018
|
|
};
|
|
bool isDefaultPort() const { return port == DefaultDBPort; }
|
|
|
|
string bind_ip; // --bind_ip
|
|
bool rest; // --rest
|
|
bool jsonp; // --jsonp
|
|
|
|
string _replSet; // --replSet[/<seedlist>]
|
|
string ourSetName() const {
|
|
string setname;
|
|
size_t sl = _replSet.find('/');
|
|
if( sl == string::npos )
|
|
return _replSet;
|
|
return _replSet.substr(0, sl);
|
|
}
|
|
bool usingReplSets() const { return !_replSet.empty(); }
|
|
|
|
// for master/slave replication
|
|
string source; // --source
|
|
string only; // --only
|
|
|
|
bool quiet; // --quiet
|
|
bool noTableScan; // --notablescan no table scans allowed
|
|
bool prealloc; // --noprealloc no preallocation of data files
|
|
bool preallocj; // --nopreallocj no preallocation of journal files
|
|
bool smallfiles; // --smallfiles allocate smaller data files
|
|
|
|
bool configsvr; // --configsvr
|
|
|
|
bool quota; // --quota
|
|
int quotaFiles; // --quotaFiles
|
|
bool cpu; // --cpu show cpu time periodically
|
|
|
|
bool dur; // --dur durability (now --journal)
|
|
unsigned journalCommitInterval; // group/batch commit interval ms
|
|
|
|
/** --durOptions 7 dump journal and terminate without doing anything further
|
|
--durOptions 4 recover and terminate without listening
|
|
*/
|
|
enum { // bits to be ORed
|
|
DurDumpJournal = 1, // dump diagnostics on the journal during recovery
|
|
DurScanOnly = 2, // don't do any real work, just scan and dump if dump specified
|
|
DurRecoverOnly = 4, // terminate after recovery step
|
|
DurParanoid = 8, // paranoid mode enables extra checks
|
|
DurAlwaysCommit = 16, // do a group commit every time the writelock is released
|
|
DurAlwaysRemap = 32 // remap the private view after every group commit (may lag to the next write lock acquisition, but will do all files then)
|
|
};
|
|
int durOptions; // --durOptions <n> for debugging
|
|
|
|
bool objcheck; // --objcheck
|
|
|
|
long long oplogSize; // --oplogSize
|
|
int defaultProfile; // --profile
|
|
int slowMS; // --time in ms that is "slow"
|
|
|
|
int pretouch; // --pretouch for replication application (experimental)
|
|
bool moveParanoia; // for move chunk paranoia
|
|
double syncdelay; // seconds between fsyncs
|
|
|
|
bool noUnixSocket; // --nounixsocket
|
|
string socket; // UNIX domain socket directory
|
|
|
|
bool keyFile;
|
|
|
|
#ifdef MONGO_SSL
|
|
bool sslOnNormalPorts; // --sslOnNormalPorts
|
|
string sslPEMKeyFile; // --sslPEMKeyFile
|
|
string sslPEMKeyPassword; // --sslPEMKeyPassword
|
|
|
|
SSLManager* sslServerManager; // currently leaks on close
|
|
#endif
|
|
|
|
static void addGlobalOptions( boost::program_options::options_description& general ,
|
|
boost::program_options::options_description& hidden );
|
|
|
|
static void addWindowsOptions( boost::program_options::options_description& windows ,
|
|
boost::program_options::options_description& hidden );
|
|
|
|
|
|
static void parseConfigFile( istream &f, stringstream &ss);
|
|
/**
|
|
* @return true if should run program, false if should exit
|
|
*/
|
|
static bool store( int argc , char ** argv ,
|
|
boost::program_options::options_description& visible,
|
|
boost::program_options::options_description& hidden,
|
|
boost::program_options::positional_options_description& positional,
|
|
boost::program_options::variables_map &output );
|
|
};
|
|
|
|
// todo move to cmdline.cpp?
|
|
inline CmdLine::CmdLine() :
|
|
port(DefaultDBPort), rest(false), jsonp(false), quiet(false), noTableScan(false), prealloc(true), preallocj(true), smallfiles(sizeof(int*) == 4),
|
|
configsvr(false),
|
|
quota(false), quotaFiles(8), cpu(false), durOptions(0), objcheck(false), oplogSize(0), defaultProfile(0), slowMS(100), pretouch(0), moveParanoia( true ),
|
|
syncdelay(60), noUnixSocket(false), socket("/tmp")
|
|
{
|
|
journalCommitInterval = 0; // 0 means use default
|
|
dur = false;
|
|
#if defined(_DURABLEDEFAULTON)
|
|
dur = true;
|
|
#endif
|
|
if( sizeof(void*) == 8 )
|
|
dur = true;
|
|
#if defined(_DURABLEDEFAULTOFF)
|
|
dur = false;
|
|
#endif
|
|
|
|
#ifdef MONGO_SSL
|
|
sslOnNormalPorts = false;
|
|
sslServerManager = 0;
|
|
#endif
|
|
}
|
|
|
|
extern CmdLine cmdLine;
|
|
|
|
void setupCoreSignals();
|
|
|
|
string prettyHostName();
|
|
|
|
void printCommandLineOpts();
|
|
|
|
/**
|
|
* used for setParameter
|
|
* so you can write validation code that lives with code using it
|
|
* rather than all in the command place
|
|
* also lets you have mongos or mongod specific code
|
|
* without pulling it all sorts of things
|
|
*/
|
|
class ParameterValidator {
|
|
public:
|
|
ParameterValidator( const string& name );
|
|
virtual ~ParameterValidator() {}
|
|
|
|
virtual bool isValid( BSONElement e , string& errmsg ) = 0;
|
|
|
|
static ParameterValidator * get( const string& name );
|
|
|
|
private:
|
|
string _name;
|
|
|
|
// don't need to lock since this is all done in static init
|
|
static map<string,ParameterValidator*> * _all;
|
|
};
|
|
|
|
}
|