databases/mongodb fails to start, assertion failure in unit test
Waitman Gobble
uzimac at da3m0n8t3r.com
Fri Jan 25 08:41:13 UTC 2013
Hi,
I've installed databases/mongodb and get an error when starting.
# /usr/local/etc/rc.d/mongod start
Starting mongod.
forked process: 59576
all output going to: /var/db/mongodb/mongod.log
/usr/local/etc/rc.d/mongod: WARNING: failed to start mongod
# cat /var/db/mongodb/mongod.log
Fri Jan 25 00:30:57 Assertion failure l < bigl src/mongo/db/btree.cpp 1973
0x5a503d 0x5eb41d 0x74dce9 0x547638 0x545ed9 0x542bc1
0x5a503d <_ZN5mongo12verifyFailedEPKcS1_j+285> at /usr/local/bin/mongod
0x5eb41d <_ZN5mongo10BTUnitTest3runEv+333> at /usr/local/bin/mongod
0x74dce9 <_ZN5mongo11StartupTest8runTestsEv+57> at /usr/local/bin/mongod
0x547638 <main+5992> at /usr/local/bin/mongod
0x545ed9 <main+9> at /usr/local/bin/mongod
0x542bc1 <_start+145> at /usr/local/bin/mongod
Fri Jan 25 00:30:57 Got signal: 6 (Abort trap: 6).
# portversion -v mongodb
mongodb-2.2.0_1 = up-to-date with port
# uname -a
FreeBSD kamira.waitman.net 9.1-STABLE FreeBSD 9.1-STABLE #0 r245772M: Tue Jan 22 06:09:00 PST 2013 root at kamira.waitman.net:/usr/obj/usr/src/sys/BURPLEX amd64
I added a couple lines to print the values before the failure.
src/mongo/db/btree.h
..
struct BTUnitTest : public StartupTest {
void run() {
DiskLoc big(0xf12312, 0x70001234);
DiskLoc56Bit bigl;
{
bigl = big;
verify( big == bigl );
DiskLoc e = bigl;
verify( big == e );
}
{
DiskLoc d;
verify( d.isNull() );
DiskLoc56Bit l;
l = d;
verify( l.isNull() );
d = l;
verify( d.isNull() );
printf("bigl %s\n",bigl.toString().c_str());
printf("l %s\n",l.toString().c_str());
verify( l < bigl );
}
}
} btunittest;
..
output:
bigl f12312:70001234
l null
Thu Jan 24 23:18:17 Assertion failure l < bigl src/mongo/db/btree.cpp 1978
looking at
src/mongo/db/diskloc.h
bool isNull() const { return _a == -1; }
..
int compare(const DiskLoc& b) const {
int x = _a - b._a;
if ( x )
return x;
return ofs - b.ofs;
}
bool operator<(const DiskLoc& b) const {
return compare(b) < 0;
}
..
void Null() {
_a = -1;
ofs = 0; /* note NullOfs is different. todo clean up. see refs to NullOfs in code - use is valid but outside DiskLoc context so confusing as-is. */
}
it seems that this should be working!
test model:
#include <stdio.h>
int
compare (int a, int b)
{
int x = a - b;
if ( x )
return x;
return 555;
}
bool
ncompare (int a, int b)
{
return compare(a,b) < 0;
}
int
main (void)
{
int a, b;
a = -1;
b = 0xf12312;
int c = a - b;
printf("%d\n",c);
c = compare(a,b);
printf("%d\n",c);
bool d = ncompare(a,b);
printf("%d\n",d);
bool e = ncompare(b,a);
printf("%d\n",e);
return 0;
}
# clang++ -o test test.cpp
# ./test
-15803155
-15803155
1
0
I'm missing something...
Suggestions, tips, hints much appreciated.
Thanks,
--
Waitman Gobble
San Jose California USA
More information about the freebsd-ports
mailing list