From owner-freebsd-ports@FreeBSD.ORG Mon Jan 28 16:19:31 2013 Return-Path: Delivered-To: freebsd-ports@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 7CE48E5B for ; Mon, 28 Jan 2013 16:19:31 +0000 (UTC) (envelope-from wxs@atarininja.org) Received: from syn.atarininja.org (syn.csh.rit.edu [129.21.49.45]) by mx1.freebsd.org (Postfix) with ESMTP id 4002E93F for ; Mon, 28 Jan 2013 16:19:30 +0000 (UTC) Received: by syn.atarininja.org (Postfix, from userid 1001) id 1FD355C34; Mon, 28 Jan 2013 11:11:08 -0500 (EST) Date: Mon, 28 Jan 2013 11:11:08 -0500 From: Wesley Shields To: Waitman Gobble Subject: Re: databases/mongodb fails to start, assertion failure in unit test Message-ID: <20130128161108.GB45519@atarininja.org> References: <1359103265.5165@da3m0n8t3r.com> <1359212781.11261@da3m0n8t3r.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1359212781.11261@da3m0n8t3r.com> User-Agent: Mutt/1.5.21 (2010-09-15) Cc: freebsd-ports@freebsd.org X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 28 Jan 2013 16:19:31 -0000 On Sat, Jan 26, 2013 at 07:06:21AM -0800, Waitman Gobble wrote: > Waitman Gobble wrote .. > > > > 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 at /usr/local/bin/mongod > > 0x545ed9 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@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 > > > > 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 > > Hi, > > I've tinkered around with this problem. Commenting out the 'verify( l > < bigl );' line in src/mongo/db/btree.h solves the assertion failure > problem, and mongodb starts and runs. However, after reviewing the > code it seems this 'start' unit test is only actually testing if the > thing can 'subtract integers.' I'm very puzzled as to why it is > failing, it's bombing out when it does 'verify ((-1 - 0xf12312)<0)'. > which seems trivial. > > The code that runs the unit test/StartupTest is simple, but i haven't > yet found the 'verify' macro, at least i believe it's a macro. > > Anyhow, commenting out the test line gets mongodb running, but I'm > wondering what other problems there could be. (?) > > I found that compiling with base gcc avoids the startup problem, so > this indeed seems to be an issue related to building with clang. clang > builds mongodb without error, however running the mongodb compiled > with clang fails during 'startuptest'. > > IMHO It would be good to track down the problem, at least understand > the cause, but at this moment it seems like compiling mongodb with gcc > is the way to go. > > I've updated the port to use the latest release/ 2.2.2 version of > mongodb, I'll submit a PR in a bit, (it does not appear to have been > submitted already) maybe somebody wants to use it. (The startup > assertion failure affects the existing port '2.2.0' as well as 2.2.2) Please CC me on the PR as I would like to get that in the tree. As for the clang problem, I think this might be something to take up with the mongodb developers. -- WXS