-
Type:
Bug
-
Resolution: Done
-
Priority:
Minor - P4
-
Affects Version/s: 2.4.6
-
Component/s: None
-
None
-
Environment: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
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/