0
0
mirror of https://github.com/mongodb/mongo.git synced 2024-11-28 07:59:02 +01:00

SERVER-17652 open sockets before initializing storage engine

This commit is contained in:
Eric Milkie 2015-03-19 15:00:12 -04:00
parent eac8d16add
commit b9b1c95520
2 changed files with 35 additions and 13 deletions

View File

@ -0,0 +1,22 @@
// Create more than 1024 files on certain storage engines, then restart the server and see that it
// can still listen on fd's smaller than FD_SETSIZE.
(function() {
var baseName = "jstests_disk_too_many_fds";
var m = MongoRunner.runMongod( { smallfiles: "" , nssize: 1 } );
// Make 1026 collections, each in a separate database. On some storage engines, this may cause
// 1026 files to be created.
for (var i = 1; i < 1026; ++i) {
var db = m.getDB("db" + i);
var coll = db.getCollection("coll" + i);
assert.writeOK(coll.insert( {} ));
}
MongoRunner.stopMongod( m );
// Ensure we can still start up with that many files.
var m2 = MongoRunner.runMongod( { dbpath: m.dbpath, smallfiles: "" , nssize: 1,
restart: true, cleanData: false } );
assert.eq(1, m2.getDB("db1025").getCollection("coll1025").count());
}());

View File

@ -439,6 +439,19 @@ namespace mongo {
static void _initAndListen(int listenPort ) {
Client::initThread("initandlisten");
// Due to SERVER-15389, we must setupSockets first thing at startup in order to avoid
// obtaining too high a file descriptor for our calls to select().
MessageServer::Options options;
options.port = listenPort;
options.ipList = serverGlobalParams.bind_ip;
MessageServer* server = createServer(options, new MyMessageHandler());
server->setAsTimeTracker();
// This is what actually creates the sockets, but does not yet listen on them because we
// do not want connections to just hang if recovery takes a very long time.
server->setupSockets();
// Warn if we detect configurations for multiple registered storage engines in
// the same configuration file/environment.
if (serverGlobalParams.parsedOpts.hasField("storage")) {
@ -510,19 +523,6 @@ namespace mongo {
boost::filesystem::exists(storageGlobalParams.repairpath));
}
// Due to SERVER-15389, we must setupSockets first thing at startup in order to avoid
// obtaining too high a file descriptor for our calls to select().
MessageServer::Options options;
options.port = listenPort;
options.ipList = serverGlobalParams.bind_ip;
MessageServer* server = createServer(options, new MyMessageHandler());
server->setAsTimeTracker();
// This is what actually creates the sockets, but does not yet listen on them because we
// do not want connections to just hang if recovery takes a very long time.
server->setupSockets();
// TODO: This should go into a MONGO_INITIALIZER once we have figured out the correct
// dependencies.
if (snmpInit) {