Project: mesos
Issue MESOS-2201: ReplicaTest.Restore fails with leveldb greater than v1.7.
I wanted to configure Mesos with system provided leveldb libraries when I ran into this issue. Apparently, if one does {{../configure --with-leveldb=/path/to/leveldb}}, compilation succeeds, however the "ReplicaTest_Restore" test fails with the following back trace: {code} [ RUN ] ReplicaTest.Restore Using temporary directory '/tmp/ReplicaTest_Restore_IZbbRR' I1222 14:16:49.517500 2927 leveldb.cpp:176] Opened db in 10.758917ms I1222 14:16:49.526495 2927 leveldb.cpp:183] Compacted db in 8.931146ms I1222 14:16:49.526523 2927 leveldb.cpp:198] Created db iterator in 5787ns I1222 14:16:49.526531 2927 leveldb.cpp:204] Seeked to beginning of db in 511ns I1222 14:16:49.526535 2927 leveldb.cpp:273] Iterated through 0 keys in the db in 197ns I1222 14:16:49.526623 2927 replica.cpp:741] Replica recovered with log positions 0 -> 0 with 1 holes and 0 unlearned I1222 14:16:49.530972 2945 leveldb.cpp:306] Persisting metadata (8 bytes) to leveldb took 3.084458ms I1222 14:16:49.531008 2945 replica.cpp:320] Persisted replica status to VOTING I1222 14:16:49.541263 2927 leveldb.cpp:176] Opened db in 9.980586ms I1222 14:16:49.551636 2927 leveldb.cpp:183] Compacted db in 10.348096ms I1222 14:16:49.551683 2927 leveldb.cpp:198] Created db iterator in 3405ns I1222 14:16:49.551693 2927 leveldb.cpp:204] Seeked to beginning of db in 3559ns I1222 14:16:49.551728 2927 leveldb.cpp:273] Iterated through 1 keys in the db in 29722ns I1222 14:16:49.551751 2927 replica.cpp:741] Replica recovered with log positions 0 -> 0 with 1 holes and 0 unlearned I1222 14:16:49.551996 2947 replica.cpp:474] Replica received implicit promise request with proposal 1 I1222 14:16:49.560921 2947 leveldb.cpp:306] Persisting metadata (8 bytes) to leveldb took 8.899591ms I1222 14:16:49.560940 2947 replica.cpp:342] Persisted promised to 1 I1222 14:16:49.561338 2943 replica.cpp:508] Replica received write request for position 1 I1222 14:16:49.568677 2943 leveldb.cpp:343] Persisting action (27 bytes) to leveldb took 7.287155ms I1222 14:16:49.568692 2943 replica.cpp:676] Persisted action at 1 I1222 14:16:49.569042 2942 leveldb.cpp:438] Reading position from leveldb took 26339ns F1222 14:16:49.569411 2927 replica.cpp:721] CHECK_SOME(state): IO error: lock /tmp/ReplicaTest_Restore_IZbbRR/.log/LOCK: already held by process Failed to recover the log *** Check failure stack trace: *** @ 0x7f7f6c53e688 google::LogMessage::Fail() @ 0x7f7f6c53e5e7 google::LogMessage::SendToLog() @ 0x7f7f6c53dff8 google::LogMessage::Flush() @ 0x7f7f6c540d2c google::LogMessageFatal::~LogMessageFatal() @ 0x90a520 _CheckFatal::~_CheckFatal() @ 0x7f7f6c400f4d mesos::internal::log::ReplicaProcess::restore() @ 0x7f7f6c3fd763 mesos::internal::log::ReplicaProcess::ReplicaProcess() @ 0x7f7f6c401271 mesos::internal::log::Replica::Replica() @ 0xcd7ca3 ReplicaTest_Restore_Test::TestBody() @ 0x10934b2 testing::internal::HandleSehExceptionsInMethodIfSupported<>() @ 0x108e584 testing::internal::HandleExceptionsInMethodIfSupported<>() @ 0x10768fd testing::Test::Run() @ 0x1077020 testing::TestInfo::Run() @ 0x10775a8 testing::TestCase::Run() @ 0x107c324 testing::internal::UnitTestImpl::RunAllTests() @ 0x1094348 testing::internal::HandleSehExceptionsInMethodIfSupported<>() @ 0x108f2b7 testing::internal::HandleExceptionsInMethodIfSupported<>() @ 0x107b1d4 testing::UnitTest::Run() @ 0xd344a9 main @ 0x7f7f66fdfb45 __libc_start_main @ 0x8f3549 (unknown) @ (nil) (unknown) [2] 2927 abort (core dumped) GLOG_logtostderr=1 GTEST_v=10 ./bin/mesos-tests.sh --verbose {code} The bundled version of leveldb is v1.4. I tested version 1.5 and that seems to work. However, v1.6 had some build issues and us unusable with Mesos. The next version v1.7, allows Mesos to compile fine but results in the above error.
Story points: 3