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