Details
-
Bug
-
Status: Closed
-
Major - P3
-
Resolution: Fixed
-
None
-
None
-
Windows
-
ALL
Description
We use string comparisons internally to match file specifications in several places, but users can provide any legal combination of slash and backslash in specifying paths (dbpath, etc.). Moreover, Boost::filesystem v3's string() function prefers "native" path separator characters (so backslash on Windows).
We need to convert path characters to a common format (e.g. Unix-style "/") and use Boost::filesystem v3's generic_string() (or similar) so that string comparisons work as expected.
Buildbot failures:
http://buildlogs.mongodb.org/Windows%2064-bit%20DEBUG/builds/257/test/disk/repair.js
m31000| Mon Oct 15 12:16:47 [conn1] opening db: /data/db/jstests_disk_repair/repairDir/backup_repairDatabase_0 jstests_disk_repair
|
m31000| Mon Oct 15 12:16:47 [conn1] info PageFaultRetryableSection will not yield, already locked upon reaching
|
m31000| Mon Oct 15 12:16:47 [FileAllocator] allocating new datafile /data/db/jstests_disk_repair/repairDir/backup_repairDatabase_0\jstests_disk_repair.ns, filling with zeroes...
|
m31000| Mon Oct 15 12:16:47 [FileAllocator] creating directory /data/db/jstests_disk_repair/repairDir/backup_repairDatabase_0\_tmp
|
m31000| Mon Oct 15 12:16:48 [FileAllocator] done allocating datafile /data/db/jstests_disk_repair/repairDir/backup_repairDatabase_0\jstests_disk_repair.ns, size: 16MB, took 0.132 secs
|
m31000| Mon Oct 15 12:16:48 [FileAllocator] allocating new datafile /data/db/jstests_disk_repair/repairDir/backup_repairDatabase_0\jstests_disk_repair.0, filling with zeroes...
|
m31000| Mon Oct 15 12:16:48 [FileAllocator] done allocating datafile /data/db/jstests_disk_repair/repairDir/backup_repairDatabase_0\jstests_disk_repair.0, size: 64MB, took 0.548 secs
|
m31000| Mon Oct 15 12:16:48 [conn1] datafileheader::init initializing /data/db/jstests_disk_repair/repairDir/backup_repairDatabase_0\jstests_disk_repair.0 n:0
|
m31000| Mon Oct 15 12:16:48 [FileAllocator] allocating new datafile /data/db/jstests_disk_repair/repairDir/backup_repairDatabase_0\jstests_disk_repair.1, filling with zeroes...
|
m31000| Mon Oct 15 12:16:48 [conn1] build index jstests_disk_repair.jstests_disk_repair { _id: 1 }
|
m31000| Mon Oct 15 12:16:48 [conn1] fastBuildIndex dupsToDrop:0
|
m31000| Mon Oct 15 12:16:48 [conn1] build index done. scanned 1 total records. 0.001 secs
|
m31000| Mon Oct 15 12:16:49 [conn1] journal error applying writes, file /data/db/jstests_disk_repair\repairDir/backup_repairDatabase_0\jstests_disk_repair.ns is not open
|
m31000| Mon Oct 15 12:16:49 [conn1] Assertion failure false src\mongo\db\dur_recover.cpp 244
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\util\stacktrace.cpp(161) mongo::printStackTrace+0x5b
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\util\log.cpp(435) mongo::logContext+0x72
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\util\assert_util.cpp(109) mongo::verifyFailed+0x190
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\db\dur_recover.cpp(244) mongo::dur::RecoveryJob::Last::newEntry+0x236
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\db\dur_recover.cpp(264) mongo::dur::RecoveryJob::write+0x108
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\db\dur_recover.cpp(295) mongo::dur::RecoveryJob::applyEntry+0x3b5
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\db\dur_recover.cpp(348) mongo::dur::RecoveryJob::applyEntries+0x1a3
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\db\dur_recover.cpp(415) mongo::dur::RecoveryJob::processSection+0x5c5
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\db\dur_writetodatafiles.cpp(33) mongo::dur::WRITETODATAFILES_Impl1+0xdb
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\db\dur_writetodatafiles.cpp(87) mongo::dur::WRITETODATAFILES+0x45
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\db\dur.cpp(664) mongo::dur::_groupCommit+0x15c
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\db\dur.cpp(713) mongo::dur::groupCommit+0x4f
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\db\dur.cpp(207) mongo::dur::DurableImpl::commitNow+0x3b
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\db\dur.cpp(302) mongo::dur::DurableImpl::_aCommitIsNeeded+0x341
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\db\dur.cpp(330) mongo::dur::DurableImpl::commitIfNeeded+0x7f
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\db\dur.cpp(766) mongo::dur::closingFileNotification+0x4a
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\db\mongommf.cpp(229) mongo::MongoMMF::close+0x149
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe ...\src\mongo\db\mongommf.cpp(209) mongo::MongoMMF::~MongoMMF+0x40
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe mongo::MongoDataFile::~MongoDataFile+0x28
|
m31000| Mon Oct 15 12:16:49 [conn1] mongod.exe mongo::MongoDataFile::`scalar deleting destructor'+0x2c
|
|
If you compare the file specifications in line 5 and 13 above, you can see the problem:
line 5 = /data/db/jstests_disk_repair/repairDir/backup_repairDatabase_0\jstests_disk_repair.ns
|
|
|
line 13 = /data/db/jstests_disk_repair\repairDir/backup_repairDatabase_0\jstests_disk_repair.ns
|
At the "pipe" character (|), the directory separators are not the same.