Details
-
Bug
-
Resolution: Done
-
Minor - P4
-
2.4.6
-
None
-
None
-
Mac OS X 10.8.5
-
ALL
-
- Create a mongod config file with some boolean options
- Start the mongod using the config file
- Connect to the mongod and run getCmdLineOpts
Description
In the "parsed" section of its response, getCmdLineOpts returns boolean values as strings for options that come from a config file. Take the following as an example.
When specifying all options on the command line, getCmdLineOpts properly reports boolean options to have boolean values:
$ mongod --dbpath=/tmp/mongodb --nojournal --noprealloc --oplogSize=64 --port=9001 --smallfiles --fork --logpath=/tmp/mongodb.log
|
note: noprealloc may hurt performance in many applications
|
about to fork child process, waiting until server is ready for connections.
|
forked process: 53615
|
all output going to: /tmp/mongodb.log
|
child process started successfully, parent exiting
|
$ mongo localhost:9001
|
MongoDB shell version: 2.4.6
|
connecting to: localhost:9001/test
|
Server has startup warnings:
|
Wed Oct 2 16:38:32.307 [initandlisten]
|
Wed Oct 2 16:38:32.307 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
|
> use admin
|
switched to db admin
|
> db.admin.runCommand({getCmdLineOpts: 1})
|
{
|
"argv" : [
|
"mongod",
|
"--dbpath=/tmp/mongodb",
|
"--nojournal",
|
"--noprealloc",
|
"--oplogSize=64",
|
"--port=9001",
|
"--smallfiles",
|
"--fork",
|
"--logpath=/tmp/mongodb.log"
|
],
|
"parsed" : {
|
"dbpath" : "/tmp/mongodb",
|
"fork" : true,
|
"logpath" : "/tmp/mongodb.log",
|
"nojournal" : true,
|
"noprealloc" : true,
|
"oplogSize" : 64,
|
"port" : 9001,
|
"smallfiles" : true
|
},
|
"ok" : 1
|
}
|
>
|
But when started with a config file, the boolean options that come from the config file are reported to have a string values:
$ cat /tmp/mongod.conf
|
dbpath = /tmp/mongodb
|
nojournal = true
|
noprealloc = true
|
oplogSize = 64
|
port = 9001
|
smallfiles = true
|
logpath = /tmp/mongod.log
|
$ mongod --fork -f /tmp/mongod.conf
|
note: noprealloc may hurt performance in many applications
|
about to fork child process, waiting until server is ready for connections.
|
forked process: 54279
|
all output going to: /tmp/mongod.log
|
child process started successfully, parent exiting
|
$ mongo localhost:9001
|
MongoDB shell version: 2.4.6
|
connecting to: localhost:9001/test
|
Server has startup warnings:
|
Wed Oct 2 16:44:39.921 [initandlisten]
|
Wed Oct 2 16:44:39.921 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
|
> use admin
|
switched to db admin
|
> db.admin.runCommand({getCmdLineOpts: 1})
|
{
|
"argv" : [
|
"mongod",
|
"--fork",
|
"-f",
|
"/tmp/mongod.conf"
|
],
|
"parsed" : {
|
"config" : "/tmp/mongod.conf",
|
"dbpath" : "/tmp/mongodb",
|
"fork" : true,
|
"logpath" : "/tmp/mongod.log",
|
"nojournal" : "true",
|
"noprealloc" : "true",
|
"oplogSize" : 64,
|
"port" : 9001,
|
"smallfiles" : "true"
|
},
|
"ok" : 1
|
}
|
>
|
Mongo correctly returns integer values as integers, even when specified via a config file. It's just boolean values that it appears to return as strings.
Note that this bug is also apparent in the example given for getCmdLineOpts at http://docs.mongodb.org/manual/reference/command/getCmdLineOpts/