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:
parent
eac8d16add
commit
b9b1c95520
22
jstests/disk/too_many_fds.js
Normal file
22
jstests/disk/too_many_fds.js
Normal 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());
|
||||
}());
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user