Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

conda-build: undefined behaviors detected with libcxx v18.1.8 on macOS #1724

Open
jjerphan opened this issue Jul 30, 2024 · 4 comments
Open
Assignees
Labels
bug Something isn't working

Comments

@jjerphan
Copy link
Collaborator

First observed here. Logs for posterity:

The following tests FAILED:
	  1 - Async.SinkBasic (ILLEGAL)
	  2 - Async.DeDupTest (ILLEGAL)
	 23 - Segment.RoundtripTimeseriesDescriptorWriteToBufferV2 (ILLEGAL)
	 27 - SegmentHeader.SerializeUnserializeV1 (ILLEGAL)
	323 - SparseTestStore.Compact (ILLEGAL)
	324 - SparseTestStore.CompactWithStrings (ILLEGAL)
	388 - VersionStoreTest.CompactIncompleteDynamicSchema (ILLEGAL)
	408 - TestEmbedded/SimpleTestSuite.Example/lmdb  # GetParam() = 24-byte object <08-6C 6D-64 62-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00 00-00> (ILLEGAL)
	412 - AllStoragesCommonTests/GenericStorageTest.WriteDuplicateKeyException/(ptr = 0x6000023e8018, value = 8-byte object <90-1F 99-0A 01-00 00-00>) (ILLEGAL)

Also observed on the feedstock with conda-forge/arcticdb-feedstock#249.

Currently solved by using libcxx<18 (see #1680).


Other projects are having a similar problem with this build (see conda-forge/libcxx-feedstock#162)

@jjerphan jjerphan added the bug Something isn't working label Jul 30, 2024
@ianthomas23
Copy link
Collaborator

I can reproduce this on an M3 mac using master branch environment_unix.yml but with libcxx unconstrained. I needed to manually change the use of posix_memalign rather than memalign (issue #1322).

For me the failed tests are:

The following tests FAILED:
	  1 - Async.SinkBasic (SIGTRAP)
	  2 - Async.DeDupTest (SIGTRAP)
	 25 - Segment.RoundtripTimeseriesDescriptorWriteToBufferV2 (SIGTRAP)
	 29 - SegmentHeader.SerializeUnserializeV1 (SIGTRAP)
	208 - LMDBStorageTestBase.WriteMapFullError (Failed)
	409 - TestEmbedded/SimpleTestSuite.Example/lmdb  # GetParam() = 24-byte object <6C-6D 64-62 00-00 00-00 47-00 00-00 00-00 00-00 48-00 00-00 00-00 00-04> (SIGTRAP)
	413 - AllStoragesCommonTests/GenericStorageTest.WriteDuplicateKeyException/(ptr = 0x6000018aa7d8, value = 8-byte object <50-EB AC-02 01-00 00-00>) (SIGTRAP)

so similar to but not identical to above.

Running these individually under lldb gives me for most of the failures:

$ lldb ./arcticdb/test_unit_arcticdb
(lldb) run --gtest_filter=Async.SinkBasic
Process 27309 launched: '/Users/iant/github/ArcticDB/cpp/out/darwin-conda-debug-build/arcticdb/test_unit_arcticdb' (arm64)
Note: Google Test filter = Async.SinkBasic
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from Async
[ RUN      ] Async.SinkBasic
Process 27309 stopped
* thread #5, name = 'IOPool0', stop reason = EXC_BREAKPOINT (code=1, subcode=0x100546c40)
    frame #0: 0x0000000100546c40 test_unit_arcticdb`arcticdb::SegmentHeader::serialize_to_bytes(unsigned char*, std::__1::optional<unsigned long>) const [inlined] std::__1::optional<unsigned long>::operator*[abi:fe180100](this= Has Value=false ) & at optional:806:5
   803 	  }
   804 	
   805 	  _LIBCPP_HIDE_FROM_ABI constexpr value_type& operator*() & noexcept {
-> 806 	    _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(this->has_value(), "optional operator* called on a disengaged value");
   807 	    return this->__get();
   808 	  }
   809 	
Target 0: (test_unit_arcticdb) stopped.

The one exception is SegmentHeader.SerializeUnserializeV1:

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BREAKPOINT (code=1, subcode=0x100540774)
    frame #0: 0x0000000100540774 test_unit_arcticdb`arcticdb::copy_encoded_field_to_proto(arcticdb::EncodedFieldImpl const&, arcticc::pb2::encoding_pb2::EncodedField&) [inlined] std::__1::array<arcticdb::Block, 1ul>::operator[][abi:fe180100](this=<unavailable>, __n=<unavailable>) const at array:238:5
   235 	    return __elems_[__n];
   236 	  }
   237 	  _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const_reference operator[](size_type __n) const _NOEXCEPT {
-> 238 	    _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(__n < _Size, "out-of-bounds access in std::array<T, N>");
   239 	    return __elems_[__n];
   240 	  }

Example backtraces for SegmentHeader.SerializeUnserializeV1:

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BREAKPOINT (code=1, subcode=0x100540774)
  * frame #0: 0x0000000100540774 test_unit_arcticdb`arcticdb::copy_encoded_field_to_proto(arcticdb::EncodedFieldImpl const&, arcticc::pb2::encoding_pb2::EncodedField&) [inlined] std::__1::array<arcticdb::Block, 1ul>::operator[][abi:fe180100](this=<unavailable>, __n=<unavailable>) const at array:238:5
    frame #1: 0x0000000100540774 test_unit_arcticdb`arcticdb::copy_encoded_field_to_proto(arcticdb::EncodedFieldImpl const&, arcticc::pb2::encoding_pb2::EncodedField&) [inlined] arcticdb::EncodedFieldImpl::shapes(this=0x0000000156053480, n=1) const at encoded_field.hpp:312:60
    frame #2: 0x000000010054075c test_unit_arcticdb`arcticdb::copy_encoded_field_to_proto(input=0x0000000156053480, output=<unavailable>) at protobuf_mappings.cpp:93:40
    frame #3: 0x00000001005411d4 test_unit_arcticdb`arcticdb::generate_v1_header(header=0x000000016fdfdbf0, desc=0x000000016fdfdb50) at segment.cpp:25:9
    frame #4: 0x000000010009d808 test_unit_arcticdb`SegmentHeader_SerializeUnserializeV1_Test::TestBody(this=<unavailable>) at test_segment_header.cpp:74:18
    frame #5: 0x0000000105d05f64 libgtest.1.15.0.dylib`void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) + 96
    frame #6: 0x0000000105d05eb0 libgtest.1.15.0.dylib`testing::Test::Run() + 800
    frame #7: 0x0000000105d074b4 libgtest.1.15.0.dylib`testing::TestInfo::Run() + 952
    frame #8: 0x0000000105d0877c libgtest.1.15.0.dylib`testing::TestSuite::Run() + 1004
    frame #9: 0x0000000105d1a950 libgtest.1.15.0.dylib`testing::internal::UnitTestImpl::RunAllTests() + 1592
    frame #10: 0x0000000105d1a0d4 libgtest.1.15.0.dylib`bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) + 96
    frame #11: 0x0000000105d1a024 libgtest.1.15.0.dylib`testing::UnitTest::Run() + 140
    frame #12: 0x0000000100332790 test_unit_arcticdb`main [inlined] RUN_ALL_TESTS() at gtest.h:2334:73
    frame #13: 0x0000000100332788 test_unit_arcticdb`main(argc=1, argv=<unavailable>) at gtest_main.cpp:15:16
    frame #14: 0x0000000191ebe0e0 dyld`start + 2360

and Async.SinkBasic:

* thread #5, name = 'IOPool0', stop reason = EXC_BREAKPOINT (code=1, subcode=0x100546c40)
  * frame #0: 0x0000000100546c40 test_unit_arcticdb`arcticdb::SegmentHeader::serialize_to_bytes(unsigned char*, std::__1::optional<unsigned long>) const [inlined] std::__1::optional<unsigned long>::operator*[abi:fe180100](this= Has Value=false ) & at optional:806:5
    frame #1: 0x0000000100546c40 test_unit_arcticdb`arcticdb::SegmentHeader::serialize_to_bytes(this=0x00000001238059a0, dst=<unavailable>, expected_bytes= Has Value=false ) const at segment_header.cpp:31:139
    frame #2: 0x00000001005440a8 test_unit_arcticdb`arcticdb::Segment::write_to(unsigned char*) [inlined] arcticdb::Segment::write_binary_header(this=0x00000001238059a0, dst="\xff\xff\xff") const at segment.cpp:253:34
    frame #3: 0x0000000100544094 test_unit_arcticdb`arcticdb::Segment::write_to(this=0x00000001238059a0, dst="\xff\xff\xff") at segment.cpp:341:23
    frame #4: 0x0000000101809b44 test_unit_arcticdb`arcticdb::storage::lmdb::RealLmdbClient::write(this=<unavailable>, (null)=<unavailable>, path=<unavailable>, seg=0x00000001238059a0, txn=0x000000017002a3b8, dbi=0x000060000123e760, overwrite_flag=16) at lmdb_real_client.cpp:57:9
    frame #5: 0x000000010180ab9c test_unit_arcticdb`arcticdb::storage::lmdb::LmdbStorage::do_write_internal(arcticdb::Composite<arcticdb::storage::KeySegmentPair>&&, lmdb::txn&) at lmdb_storage.cpp:81:31
    frame #6: 0x000000010180aa8c test_unit_arcticdb`arcticdb::storage::lmdb::LmdbStorage::do_write_internal(arcticdb::Composite<arcticdb::storage::KeySegmentPair>&&, lmdb::txn&) [inlined] void folly::gen::GenImpl<folly::gen::Group<arcticdb::entity::KeyType, arcticdb::storage::KeySegmentPair>&&, folly::gen::detail::GroupBy<arcticdb::storage::lmdb::LmdbStorage::do_write_internal(arcticdb::Composite<arcticdb::storage::KeySegmentPair>&&, lmdb::txn&)::$_0>::Generator<arcticdb::storage::KeySegmentPair const&&, folly::gen::detail::Map<folly::gen::Move>::Generator<arcticdb::storage::KeySegmentPair const&, folly::gen::detail::CopiedSource<arcticdb::storage::KeySegmentPair, std::__1::vector<arcticdb::storage::KeySegmentPair, std::__1::allocator<arcticdb::storage::KeySegmentPair>>>, arcticdb::storage::KeySegmentPair const&&>, arcticdb::storage::KeySegmentPair, arcticdb::entity::KeyType, arcticdb::entity::KeyType>>::foreach<arcticdb::storage::lmdb::LmdbStorage::do_write_internal(this=<unavailable>, value=0x000000017002a268)::$_1>(arcticdb::storage::lmdb::LmdbStorage::do_write_internal(arcticdb::Composite<arcticdb::storage::KeySegmentPair>&&, lmdb::txn&)::$_1&&) const::'lambda'(folly::gen::Group<arcticdb::entity::KeyType, arcticdb::storage::KeySegmentPair>&&)::operator()(folly::gen::Group<arcticdb::entity::KeyType, arcticdb::storage::KeySegmentPair>&&) const at Core-inl.h:173:7
    frame #7: 0x000000010180aa8c test_unit_arcticdb`arcticdb::storage::lmdb::LmdbStorage::do_write_internal(arcticdb::Composite<arcticdb::storage::KeySegmentPair>&&, lmdb::txn&) at Base-inl.h:1164:14
    frame #8: 0x000000010180aa14 test_unit_arcticdb`arcticdb::storage::lmdb::LmdbStorage::do_write_internal(arcticdb::Composite<arcticdb::storage::KeySegmentPair>&&, lmdb::txn&) [inlined] void folly::gen::GenImpl<folly::gen::Group<arcticdb::entity::KeyType, arcticdb::storage::KeySegmentPair>&&, folly::gen::detail::GroupBy<arcticdb::storage::lmdb::LmdbStorage::do_write_internal(arcticdb::Composite<arcticdb::storage::KeySegmentPair>&&, lmdb::txn&)::$_0>::Generator<arcticdb::storage::KeySegmentPair const&&, folly::gen::detail::Map<folly::gen::Move>::Generator<arcticdb::storage::KeySegmentPair const&, folly::gen::detail::CopiedSource<arcticdb::storage::KeySegmentPair, std::__1::vector<arcticdb::storage::KeySegmentPair, std::__1::allocator<arcticdb::storage::KeySegmentPair>>>, arcticdb::storage::KeySegmentPair const&&>, arcticdb::storage::KeySegmentPair, arcticdb::entity::KeyType, arcticdb::entity::KeyType>>::foreach<arcticdb::storage::lmdb::LmdbStorage::do_write_internal(arcticdb::Composite<arcticdb::storage::KeySegmentPair>&&, lmdb::txn&)::$_1>(this=0x000000017002a300, body=<unavailable>) const at Core-inl.h:171:18
    frame #9: 0x000000010180aa14 test_unit_arcticdb`arcticdb::storage::lmdb::LmdbStorage::do_write_internal(this=0x0000600002f304c8, kvs=<unavailable>, txn=0x000000017002a3b8) at lmdb_storage.cpp:68:65
    frame #10: 0x000000010180b174 test_unit_arcticdb`arcticdb::storage::lmdb::LmdbStorage::do_write(this=0x0000600002f304c8, kvs=0x000000017002a408) at lmdb_storage.cpp:100:5
    frame #11: 0x00000001000283d0 test_unit_arcticdb`arcticdb::async::WriteSegmentTask::operator()(this=0x0000600002134508, key_seg=0x0000600002134588) const at tasks.hpp:180:15
    frame #12: 0x0000000100060070 test_unit_arcticdb`folly::Try<std::__1::variant<arcticdb::entity::AtomKeyImpl, arcticdb::entity::RefKey>> folly::futures::detail::InvokeResultWrapperBase<folly::Try<std::__1::variant<arcticdb::entity::AtomKeyImpl, arcticdb::entity::RefKey>>>::wrapResult<auto folly::futures::detail::wrapInvoke<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>(folly::Try<arcticdb::storage::KeySegmentPair>&&, arcticdb::async::WriteSegmentTask&&)::'lambda'()>(arcticdb::storage::KeySegmentPair) [inlined] auto folly::futures::detail::wrapInvoke<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>(this=<unavailable>)::'lambda'()::operator()() const at Future-inl.h:93:12
    frame #13: 0x0000000100060058 test_unit_arcticdb`folly::Try<std::__1::variant<arcticdb::entity::AtomKeyImpl, arcticdb::entity::RefKey>> folly::futures::detail::InvokeResultWrapperBase<folly::Try<std::__1::variant<arcticdb::entity::AtomKeyImpl, arcticdb::entity::RefKey>>>::wrapResult<auto folly::futures::detail::wrapInvoke<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>(folly::Try<arcticdb::storage::KeySegmentPair>&&, arcticdb::async::WriteSegmentTask&&)::'lambda'()>(fn=<unavailable>) at Future-inl.h:68:14
    frame #14: 0x000000010005ffa4 test_unit_arcticdb`std::__1::enable_if<isTry<folly::invoke_detail::traits<arcticdb::async::WriteSegmentTask>::result<>>::value, folly::invoke_detail::traits<arcticdb::async::WriteSegmentTask>::result<>>::type folly::makeTryWith<std::__1::enable_if<!folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::ReturnsFuture::value, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::Return>::type folly::futures::detail::FutureBase<arcticdb::storage::KeySegmentPair>::thenImplementation<folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>>(arcticdb::async::WriteSegmentTask&&, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>, folly::futures::detail::InlineContinuation)::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::operator()(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::'lambda'()>(arcticdb::async::WriteSegmentTask&&) [inlined] auto folly::futures::detail::wrapInvoke<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>(t=0x0000600002134580, f=0x0000600002134508) at Future-inl.h:103:10
    frame #15: 0x000000010005ff64 test_unit_arcticdb`std::__1::enable_if<isTry<folly::invoke_detail::traits<arcticdb::async::WriteSegmentTask>::result<>>::value, folly::invoke_detail::traits<arcticdb::async::WriteSegmentTask>::result<>>::type folly::makeTryWith<std::__1::enable_if<!folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::ReturnsFuture::value, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::Return>::type folly::futures::detail::FutureBase<arcticdb::storage::KeySegmentPair>::thenImplementation<folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>>(arcticdb::async::WriteSegmentTask&&, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>, folly::futures::detail::InlineContinuation)::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::operator()(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::'lambda'()>(arcticdb::async::WriteSegmentTask&&) [inlined] folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(this=0x0000600002134508, (null)=<unavailable>, t=0x0000600002134580) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::operator()(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&) at Future-inl.h:988:12
    frame #16: 0x000000010005ff64 test_unit_arcticdb`std::__1::enable_if<isTry<folly::invoke_detail::traits<arcticdb::async::WriteSegmentTask>::result<>>::value, folly::invoke_detail::traits<arcticdb::async::WriteSegmentTask>::result<>>::type folly::makeTryWith<std::__1::enable_if<!folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::ReturnsFuture::value, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::Return>::type folly::futures::detail::FutureBase<arcticdb::storage::KeySegmentPair>::thenImplementation<folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>>(arcticdb::async::WriteSegmentTask&&, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>, folly::futures::detail::InlineContinuation)::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::operator()(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::'lambda'()>(arcticdb::async::WriteSegmentTask&&) [inlined] auto folly::futures::detail::CoreCallbackState<std::__1::variant<arcticdb::entity::AtomKeyImpl, arcticdb::entity::RefKey>, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)>::invoke<folly::Executor::KeepAlive<folly::Executor>, folly::Try<arcticdb::storage::KeySegmentPair>>(this=0x0000600002134508, args=<unavailable>, args=0x0000600002134580) at Future-inl.h:139:12
    frame #17: 0x000000010005ff58 test_unit_arcticdb`std::__1::enable_if<isTry<folly::invoke_detail::traits<arcticdb::async::WriteSegmentTask>::result<>>::value, folly::invoke_detail::traits<arcticdb::async::WriteSegmentTask>::result<>>::type folly::makeTryWith<std::__1::enable_if<!folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::ReturnsFuture::value, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::Return>::type folly::futures::detail::FutureBase<arcticdb::storage::KeySegmentPair>::thenImplementation<folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>>(arcticdb::async::WriteSegmentTask&&, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>, folly::futures::detail::InlineContinuation)::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::operator()(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::'lambda'()>(arcticdb::async::WriteSegmentTask&&) [inlined] decltype(auto) folly::futures::detail::detail_msvc_15_7_workaround::invoke<folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>, folly::futures::detail::CoreCallbackState<std::__1::variant<arcticdb::entity::AtomKeyImpl, arcticdb::entity::RefKey>, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)>, arcticdb::storage::KeySegmentPair, 0>((null)=<unavailable>, state=0x0000600002134508, ka=<unavailable>, t=0x0000600002134580) at Future-inl.h:331:16
    frame #18: 0x000000010005ff58 test_unit_arcticdb`std::__1::enable_if<isTry<folly::invoke_detail::traits<arcticdb::async::WriteSegmentTask>::result<>>::value, folly::invoke_detail::traits<arcticdb::async::WriteSegmentTask>::result<>>::type folly::makeTryWith<std::__1::enable_if<!folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::ReturnsFuture::value, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::Return>::type folly::futures::detail::FutureBase<arcticdb::storage::KeySegmentPair>::thenImplementation<folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>>(arcticdb::async::WriteSegmentTask&&, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>, folly::futures::detail::InlineContinuation)::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::operator()(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::'lambda'()>(arcticdb::async::WriteSegmentTask&&) [inlined] std::__1::enable_if<!folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::ReturnsFuture::value, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::Return>::type folly::futures::detail::FutureBase<arcticdb::storage::KeySegmentPair>::thenImplementation<folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(this=<unavailable>) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>>(arcticdb::async::WriteSegmentTask&&, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>, folly::futures::detail::InlineContinuation)::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::operator()(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::'lambda'()::operator()() const at Future-inl.h:378:33
    frame #19: 0x000000010005ff48 test_unit_arcticdb`std::__1::enable_if<isTry<folly::invoke_detail::traits<arcticdb::async::WriteSegmentTask>::result<>>::value, folly::invoke_detail::traits<arcticdb::async::WriteSegmentTask>::result<>>::type folly::makeTryWith<std::__1::enable_if<!folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::ReturnsFuture::value, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::Return>::type folly::futures::detail::FutureBase<arcticdb::storage::KeySegmentPair>::thenImplementation<folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>>(arcticdb::async::WriteSegmentTask&&, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>, folly::futures::detail::InlineContinuation)::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::operator()(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::'lambda'()>(f=0x000000017002a5d0) at Try-inl.h:285:12
    frame #20: 0x000000010005fd04 test_unit_arcticdb`std::__1::enable_if<!folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::ReturnsFuture::value, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::Return>::type folly::futures::detail::FutureBase<arcticdb::storage::KeySegmentPair>::thenImplementation<folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(this=0x0000600002134508, ka=0x000000017002a820, t=0x0000600002134580) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>>(arcticdb::async::WriteSegmentTask&&, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>, folly::futures::detail::InlineContinuation)::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)::operator()(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&) at Future-inl.h:377:48
    frame #21: 0x000000010005fc00 test_unit_arcticdb`void folly::futures::detail::Core<arcticdb::storage::KeySegmentPair>::setCallback<std::__1::enable_if<!folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(this=0x0000600002134508, coreBase=0x0000600002134500, ka=0x000000017002a820, ew=<unavailable>) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::ReturnsFuture::value, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>::Return>::type folly::futures::detail::FutureBase<arcticdb::storage::KeySegmentPair>::thenImplementation<folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>>(arcticdb::async::WriteSegmentTask&&, folly::futures::detail::tryExecutorCallableResult<arcticdb::storage::KeySegmentPair, folly::Future<folly::futures::detail::valueCallableResult<arcticdb::storage::KeySegmentPair, arcticdb::async::WriteSegmentTask>::value_type> folly::Future<arcticdb::storage::KeySegmentPair>::thenValue<arcticdb::async::WriteSegmentTask>(arcticdb::async::WriteSegmentTask&&) &&::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&), void>, folly::futures::detail::InlineContinuation)::'lambda'(folly::Executor::KeepAlive<folly::Executor>&&, folly::Try<arcticdb::storage::KeySegmentPair>&&)>(arcticdb::async::WriteSegmentTask&&, std::__1::shared_ptr<folly::RequestContext>&&, folly::futures::detail::InlineContinuation)::'lambda'(folly::futures::detail::CoreBase&, folly::Executor::KeepAlive<folly::Executor>&&, folly::exception_wrapper*)::operator()(folly::futures::detail::CoreBase&, folly::Executor::KeepAlive<folly::Executor>&&, folly::exception_wrapper*) at Core.h:629:7
    frame #22: 0x00000001069e94f0 libfolly.0.58.0-dev.dylib`folly::futures::detail::CoreBase::doCallback(folly::Executor::KeepAlive<folly::Executor>&&, folly::futures::detail::State)::$_0::operator()(folly::Executor::KeepAlive<folly::Executor>&&) + 88
    frame #23: 0x0000000106970e7c libfolly.0.58.0-dev.dylib`folly::ThreadPoolExecutor::runTask(std::__1::shared_ptr<folly::ThreadPoolExecutor::Thread> const&, folly::ThreadPoolExecutor::Task&&) + 304
    frame #24: 0x00000001069650b4 libfolly.0.58.0-dev.dylib`void folly::detail::function::FunctionTraits<void ()>::callBig<folly::IOThreadPoolExecutor::add(folly::Function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l>>, folly::Function<void ()>)::$_0>(folly::detail::function::Data&) + 76
    frame #25: 0x0000000106a2d9d0 libfolly.0.58.0-dev.dylib`folly::AtomicNotificationQueueTaskStatus folly::detail::invokeConsumerWithTask<folly::Function<void ()>, folly::EventBase::FuncRunner&, void, void, void>(folly::EventBase::FuncRunner&, folly::Function<void ()>&&, std::__1::shared_ptr<folly::RequestContext>&&) + 104
    frame #26: 0x0000000106a2d754 libfolly.0.58.0-dev.dylib`bool folly::AtomicNotificationQueue<folly::Function<void ()>>::drive<folly::EventBase::FuncRunner&>(folly::EventBase::FuncRunner&) + 348
    frame #27: 0x0000000106a2fe04 libfolly.0.58.0-dev.dylib`folly::EventBaseAtomicNotificationQueue<folly::Function<void ()>, folly::EventBase::FuncRunner>::execute() + 48
    frame #28: 0x0000000106a31ff0 libfolly.0.58.0-dev.dylib`non-virtual thunk to folly::EventBaseAtomicNotificationQueue<folly::Function<void ()>, folly::EventBase::FuncRunner>::handlerReady(unsigned short) + 16
    frame #29: 0x0000000106a36a38 libfolly.0.58.0-dev.dylib`folly::EventHandler::libeventCallback(int, short, void*) + 116
    frame #30: 0x0000000107244518 libevent-2.1.7.dylib`event_process_active_single_queue + 1636
    frame #31: 0x00000001072409a0 libevent-2.1.7.dylib`event_base_loop + 1620
    frame #32: 0x0000000106a2f33c libfolly.0.58.0-dev.dylib`folly::EventBase::loopMain(int, bool) + 340
    frame #33: 0x0000000106a2eb9c libfolly.0.58.0-dev.dylib`folly::EventBase::loop() + 112
    frame #34: 0x0000000106a303c4 libfolly.0.58.0-dev.dylib`folly::EventBase::loopForever() + 60
    frame #35: 0x0000000106963688 libfolly.0.58.0-dev.dylib`folly::IOThreadPoolExecutor::threadRun(std::__1::shared_ptr<folly::ThreadPoolExecutor::Thread>) + 412
    frame #36: 0x0000000106971bcc libfolly.0.58.0-dev.dylib`std::__1::__bind_return<void (folly::ThreadPoolExecutor::*)(std::__1::shared_ptr<folly::ThreadPoolExecutor::Thread>), std::__1::tuple<folly::ThreadPoolExecutor*, std::__1::shared_ptr<folly::ThreadPoolExecutor::Thread>>, std::__1::tuple<>, __is_valid_bind_return<void (folly::ThreadPoolExecutor::*)(std::__1::shared_ptr<folly::ThreadPoolExecutor::Thread>), std::__1::tuple<folly::ThreadPoolExecutor*, std::__1::shared_ptr<folly::ThreadPoolExecutor::Thread>>, std::__1::tuple<>>::value>::type std::__1::__bind<void (folly::ThreadPoolExecutor::*)(std::__1::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*, std::__1::shared_ptr<folly::ThreadPoolExecutor::Thread>&>::operator()[abi:v160006]<>() + 92
    frame #37: 0x0000000100019ae0 test_unit_arcticdb`void* std::__1::__thread_proxy[abi:fe180100]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>>(void*) [inlined] folly::detail::function::FunctionTraits<void ()>::operator()(this=0x0000600003438008) at Function.h:374:12
    frame #38: 0x0000000100019ad4 test_unit_arcticdb`void* std::__1::__thread_proxy[abi:fe180100]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>>(void*) [inlined] folly::NamedThreadFactory::newThread(this=0x0000600003438008)>&&)::'lambda'()::operator()() at NamedThreadFactory.h:40:11
    frame #39: 0x0000000100019ad4 test_unit_arcticdb`void* std::__1::__thread_proxy[abi:fe180100]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>>(void*) [inlined] decltype(std::declval<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>()()) std::__1::__invoke[abi:fe180100]<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>(__f=0x0000600003438008) at invoke.h:344:25
    frame #40: 0x0000000100019ad4 test_unit_arcticdb`void* std::__1::__thread_proxy[abi:fe180100]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>>(void*) [inlined] void std::__1::__thread_execute[abi:fe180100]<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>(__t=size=2, (null)=<unavailable>) at thread.h:193:3
    frame #41: 0x0000000100019ab0 test_unit_arcticdb`void* std::__1::__thread_proxy[abi:fe180100]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>>(__vp=0x0000600003438000) at thread.h:202:3
    frame #42: 0x0000000192246f94 libsystem_pthread.dylib`_pthread_start + 136

Full list of packages in micromamba environment:

  Name                       Version          Build                 Channel    
─────────────────────────────────────────────────────────────────────────────────
  asv                        0.6.3            py310hcf9f62a_1       conda-forge
  asv_runner                 0.2.1            pyhd8ed1ab_0          conda-forge
  attrs                      23.2.0           pyh71513ae_0          conda-forge
  aws-c-auth                 0.7.3            h109ad1a_1            conda-forge
  aws-c-cal                  0.6.1            hb406d48_1            conda-forge
  aws-c-common               0.9.0            hb547adb_0            conda-forge
  aws-c-compression          0.2.17           he70778a_2            conda-forge
  aws-c-event-stream         0.3.1            hcf14f3f_4            conda-forge
  aws-c-http                 0.7.11           hcbec455_4            conda-forge
  aws-c-io                   0.13.32          he8ad1d2_1            conda-forge
  aws-c-mqtt                 0.9.3            hf45dd20_1            conda-forge
  aws-c-s3                   0.3.14           hf0e1321_1            conda-forge
  aws-c-sdkutils             0.1.12           he70778a_1            conda-forge
  aws-checksums              0.1.17           he70778a_1            conda-forge
  aws-crt-cpp                0.21.0           hda227cd_5            conda-forge
  aws-sdk-cpp                1.10.57          h1190f42_19           conda-forge
  aws-xray-sdk               2.14.0           pyhd8ed1ab_0          conda-forge
  azure-core                 1.30.2           pyhd8ed1ab_0          conda-forge
  azure-core-cpp             1.13.0           hd01fc5c_0            conda-forge
  azure-identity             1.17.1           pyhd8ed1ab_0          conda-forge
  azure-identity-cpp         1.8.0            h13ea094_2            conda-forge
  azure-storage-blob         12.21.0          pyhd8ed1ab_0          conda-forge
  azure-storage-blobs-cpp    12.12.0          hfde595f_0            conda-forge
  azure-storage-common-cpp   12.7.0           hcf3b6fd_1            conda-forge
  backports.zoneinfo         0.2.1            py310hbe9552e_8       conda-forge
  benchmark                  1.8.5            h00cdb27_0            conda-forge
  bitmagic                   7.13.4           hce30654_0            conda-forge
  blinker                    1.8.2            pyhd8ed1ab_0          conda-forge
  boto3                      1.34.150         pyhd8ed1ab_0          conda-forge
  botocore                   1.34.150         pyge310_1234567_0     conda-forge
  brotli-python              1.0.9            py310h0f1eb42_9       conda-forge
  bzip2                      1.0.8            h99b78c6_7            conda-forge
  c-ares                     1.32.3           h99b78c6_0            conda-forge
  c-compiler                 1.7.0            h6aa9301_1            conda-forge
  ca-certificates            2024.7.4         hf0a4a13_0            conda-forge
  cairo                      1.18.0           hc6c324b_2            conda-forge
  cctools                    986              h4faf515_0            conda-forge
  cctools_osx-arm64          986              h62378fb_0            conda-forge
  certifi                    2024.7.4         pyhd8ed1ab_0          conda-forge
  cffi                       1.16.0           py310hdcd7c05_0       conda-forge
  charset-normalizer         3.3.2            pyhd8ed1ab_0          conda-forge
  clang                      16.0.6           default_h675cc0c_11   conda-forge
  clang-16                   16.0.6           default_h5c12605_11   conda-forge
  clang_impl_osx-arm64       16.0.6           hc421ffc_18           conda-forge
  clang_osx-arm64            16.0.6           h54d7cd3_18           conda-forge
  clangxx                    16.0.6           default_h675cc0c_11   conda-forge
  clangxx_impl_osx-arm64     16.0.6           hcd7bac0_18           conda-forge
  clangxx_osx-arm64          16.0.6           h54d7cd3_18           conda-forge
  click                      8.1.7            unix_pyh707e725_0     conda-forge
  cmake                      3.30.1           had79d8f_0            conda-forge
  colorama                   0.4.6            pyhd8ed1ab_0          conda-forge
  compiler-rt                16.0.6           h3808999_2            conda-forge
  compiler-rt_osx-arm64      16.0.6           h3808999_2            conda-forge
  cryptography               43.0.0           py310ha71c378_0       conda-forge
  cxx-compiler               1.7.0            h2ffa867_1            conda-forge
  cyrus-sasl                 2.1.27           h60b93bd_7            conda-forge
  distlib                    0.3.8            pyhd8ed1ab_0          conda-forge
  dnspython                  2.6.1            pyhd8ed1ab_1          conda-forge
  double-conversion          3.3.0            h13dd4ca_0            conda-forge
  doxygen                    1.10.0           h8fbad5d_0            conda-forge
  exceptiongroup             1.2.2            pyhd8ed1ab_0          conda-forge
  execnet                    2.1.1            pyhd8ed1ab_0          conda-forge
  expat                      2.6.2            hebf3989_0            conda-forge
  filelock                   3.15.4           pyhd8ed1ab_0          conda-forge
  flask                      3.0.3            pyhd8ed1ab_0          conda-forge
  flask-cors                 4.0.0            pyhd8ed1ab_0          conda-forge
  fmt                        10.2.1           h2ffa867_0            conda-forge
  folly                      2023.09.25.00    h4e9558f_1_jemalloc   conda-forge
  font-ttf-dejavu-sans-mono  2.37             hab24e00_0            conda-forge
  font-ttf-inconsolata       3.000            h77eed37_0            conda-forge
  font-ttf-source-code-pro   2.038            h77eed37_0            conda-forge
  font-ttf-ubuntu            0.83             h77eed37_2            conda-forge
  fontconfig                 2.14.2           h82840c6_0            conda-forge
  fonts-conda-ecosystem      1                0                     conda-forge
  fonts-conda-forge          1                0                     conda-forge
  freetype                   2.12.1           hadb7bae_2            conda-forge
  gettext                    0.22.5           h8fbad5d_2            conda-forge
  gettext-tools              0.22.5           h8fbad5d_2            conda-forge
  gflags                     2.2.2            hc88da5d_1004         conda-forge
  glog                       0.6.0            h6da1cb0_0            conda-forge
  grpcio                     1.54.3           py310h1253130_0       conda-forge
  grpcio-tools               1.54.2           py310h1253130_1       conda-forge
  gtest                      1.15.0           h420ef59_0            conda-forge
  h2                         4.1.0            pyhd8ed1ab_0          conda-forge
  hpack                      4.0.0            pyh9f0ad1d_0          conda-forge
  hyperframe                 6.0.1            pyhd8ed1ab_0          conda-forge
  hypothesis                 6.72.4           pyha770c72_0          conda-forge
  icu                        73.2             hc8870d7_0            conda-forge
  idna                       3.7              pyhd8ed1ab_0          conda-forge
  importlib-metadata         8.2.0            pyha770c72_0          conda-forge
  importlib_resources        6.4.0            pyhd8ed1ab_0          conda-forge
  iniconfig                  2.0.0            pyhd8ed1ab_0          conda-forge
  isodate                    0.6.1            pyhd8ed1ab_0          conda-forge
  itsdangerous               2.2.0            pyhd8ed1ab_0          conda-forge
  jemalloc-local             5.3.0            hb7217d7_0            conda-forge
  jinja2                     3.1.4            pyhd8ed1ab_0          conda-forge
  jmespath                   1.0.1            pyhd8ed1ab_0          conda-forge
  joserfc                    1.0.0            pyhd8ed1ab_0          conda-forge
  json5                      0.9.25           pyhd8ed1ab_0          conda-forge
  jsondiff                   2.0.0            pyhd8ed1ab_0          conda-forge
  jsonschema                 4.23.0           pyhd8ed1ab_0          conda-forge
  jsonschema-path            0.3.3            pyhd8ed1ab_0          conda-forge
  jsonschema-specifications  2023.12.1        pyhd8ed1ab_0          conda-forge
  krb5                       1.21.3           h237132a_0            conda-forge
  lazy-object-proxy          1.10.0           py310hd125d64_0       conda-forge
  ld64                       711              h634c8be_0            conda-forge
  ld64_osx-arm64             711              ha4bd21c_0            conda-forge
  libabseil                  20230125.3       cxx17_h13dd4ca_0      conda-forge
  libarrow                   12.0.1           h0b136c2_8_cpu        conda-forge
  libasprintf                0.22.5           h8fbad5d_2            conda-forge
  libasprintf-devel          0.22.5           h8fbad5d_2            conda-forge
  libblas                    3.9.0            23_osxarm64_openblas  conda-forge
  libboost                   1.82.0           h72cdd8a_6            conda-forge
  libboost-devel             1.82.0           hf450f58_6            conda-forge
  libboost-headers           1.82.0           hce30654_6            conda-forge
  libbrotlicommon            1.0.9            h1a8c8d9_9            conda-forge
  libbrotlidec               1.0.9            h1a8c8d9_9            conda-forge
  libbrotlienc               1.0.9            h1a8c8d9_9            conda-forge
  libbson                    1.23.2           hb7217d7_0            conda-forge
  libcblas                   3.9.0            23_osxarm64_openblas  conda-forge
  libclang-cpp16             16.0.6           default_h5c12605_11   conda-forge
  libcrc32c                  1.1.2            hbdafb3b_0            conda-forge
  libcurl                    8.9.0            hfd8ffcc_0            conda-forge
  libcxx                     18.1.8           h167917d_1            conda-forge
  libedit                    3.1.20191231     hc8eb9b7_2            conda-forge
  libev                      4.33             h93a5062_2            conda-forge
  libevent                   2.1.12           h2757513_1            conda-forge
  libexpat                   2.6.2            hebf3989_0            conda-forge
  libffi                     3.4.2            h3422bc3_5            conda-forge
  libgcrypt                  1.11.0           h99b78c6_1            conda-forge
  libgettextpo               0.22.5           h8fbad5d_2            conda-forge
  libgettextpo-devel         0.22.5           h8fbad5d_2            conda-forge
  libgfortran                5.0.0            13_2_0_hd922786_3     conda-forge
  libgfortran5               13.2.0           hf226fd6_3            conda-forge
  libgirepository            1.80.1           hee7aab5_0            conda-forge
  libglib                    2.80.3           h59d46d9_1            conda-forge
  libgoogle-cloud            2.12.0           he22f4c0_1            conda-forge
  libgpg-error               1.50             h3e7c369_0            conda-forge
  libgrpc                    1.54.3           h0a338ca_0            conda-forge
  libiconv                   1.17             h0d3ecfb_2            conda-forge
  libintl                    0.22.5           h8fbad5d_2            conda-forge
  libintl-devel              0.22.5           h8fbad5d_2            conda-forge
  libjemalloc-local          5.3.0            hb7217d7_0            conda-forge
  liblapack                  3.9.0            23_osxarm64_openblas  conda-forge
  libllvm16                  16.0.6           haab561b_3            conda-forge
  libmongoc                  1.23.2           hfc821f9_0            conda-forge
  libmongocxx                3.7.2            h13dd4ca_1            conda-forge
  libnghttp2                 1.58.0           ha4dd798_1            conda-forge
  libntlm                    1.4              h3422bc3_1002         conda-forge
  libopenblas                0.3.27           openmp_h517c56d_1     conda-forge
  libpng                     1.6.43           h091b4b1_0            conda-forge
  libprotobuf                3.21.12          ha614eb4_2            conda-forge
  libsecret                  0.18.8           h2b036b6_2            conda-forge
  libsodium                  1.0.18           h27ca646_1            conda-forge
  libsqlite                  3.46.0           hfb93653_0            conda-forge
  libssh2                    1.11.0           h7a5bd25_0            conda-forge
  libthrift                  0.18.1           ha061701_2            conda-forge
  libutf8proc                2.8.0            h1a8c8d9_0            conda-forge
  libuv                      1.48.0           h93a5062_0            conda-forge
  libxml2                    2.12.7           h9a80f22_3            conda-forge
  libzlib                    1.3.1            hfb2fe0b_1            conda-forge
  llvm-openmp                18.1.8           hde57baf_0            conda-forge
  llvm-tools                 16.0.6           haab561b_3            conda-forge
  lmdb                       0.9.22           h93a5062_1001         conda-forge
  lmdbxx                     0.9.14.0         h1995070_1            conda-forge
  lz4-c                      1.9.4            hb7217d7_0            conda-forge
  markupsafe                 2.1.5            py310hd125d64_0       conda-forge
  mock                       5.1.0            pyhd8ed1ab_0          conda-forge
  moto                       5.0.11           pyhd8ed1ab_0          conda-forge
  msal                       1.30.0           pyhd8ed1ab_0          conda-forge
  msal_extensions            1.1.0            py310hbe9552e_1       conda-forge
  msgpack-c                  6.0.0            ha614eb4_0            conda-forge
  msgpack-python             1.0.8            py310he1a186f_0       conda-forge
  ncurses                    6.5              hb89a1cb_0            conda-forge
  numpy                      1.26.4           py310hd45542a_0       conda-forge
  openapi-schema-validator   0.6.2            pyhd8ed1ab_0          conda-forge
  openapi-spec-validator     0.7.1            pyhd8ed1ab_0          conda-forge
  openssl                    3.3.1            hfb2fe0b_2            conda-forge
  orc                        1.9.0            ha98e9e8_1            conda-forge
  packaging                  24.1             pyhd8ed1ab_0          conda-forge
  pandas                     2.2.2            py310h2216879_1       conda-forge
  pathable                   0.4.3            pyhd8ed1ab_0          conda-forge
  pcre                       8.45             hbdafb3b_0            conda-forge
  pcre2                      10.44            h297a79d_0            conda-forge
  pip                        24.0             pyhd8ed1ab_0          conda-forge
  pixman                     0.43.4           hebf3989_0            conda-forge
  pkgutil-resolve-name       1.3.10           pyhd8ed1ab_1          conda-forge
  platformdirs               4.2.2            pyhd8ed1ab_0          conda-forge
  pluggy                     1.5.0            pyhd8ed1ab_0          conda-forge
  portalocker                2.10.1           py310hbe9552e_0       conda-forge
  prometheus-cpp             1.2.4            hd5cc21f_0            conda-forge
  protobuf                   4.21.12          py310h0f1eb42_0       conda-forge
  pyarrow                    12.0.1           py310hfbab16f_8_cpu   conda-forge
  pybind11                   2.10.4           py310h2887b22_0       conda-forge
  pybind11-global            2.10.4           py310h2887b22_0       conda-forge
  pycairo                    1.26.1           py310hbf1c8c6_0       conda-forge
  pycparser                  2.22             pyhd8ed1ab_0          conda-forge
  pygobject                  3.48.2           py310h5ffc74c_0       conda-forge
  pyjwt                      2.8.0            pyhd8ed1ab_1          conda-forge
  pymongo                    4.8.0            py310hcf9f62a_0       conda-forge
  pympler                    1.1              pyhd8ed1ab_0          conda-forge
  pyparsing                  3.1.2            pyhd8ed1ab_0          conda-forge
  pysocks                    1.7.1            pyha2e5f31_6          conda-forge
  pytest                     8.3.2            pyhd8ed1ab_0          conda-forge
  pytest-sugar               1.0.0            pyhd8ed1ab_0          conda-forge
  pytest-timeout             2.3.1            pyhd8ed1ab_1          conda-forge
  pytest-xdist               3.6.1            pyhd8ed1ab_0          conda-forge
  python                     3.10.14          h2469fbe_0_cpython    conda-forge
  python-dateutil            2.9.0            pyhd8ed1ab_0          conda-forge
  python-tzdata              2024.1           pyhd8ed1ab_0          conda-forge
  python_abi                 3.10             4_cp310               conda-forge
  pytz                       2024.1           pyhd8ed1ab_0          conda-forge
  pyyaml                     6.0.1            py310h2aa6e3c_1       conda-forge
  rapidcheck                 2023.4.13        h1995070_2            conda-forge
  re2                        2023.03.02       hc5e2d97_0            conda-forge
  readline                   8.2              h92ec313_1            conda-forge
  recycle                    6.0.0            h1995070_1            conda-forge
  referencing                0.35.1           pyhd8ed1ab_0          conda-forge
  requests                   2.32.3           pyhd8ed1ab_0          conda-forge
  responses                  0.25.3           pyhd8ed1ab_0          conda-forge
  rfc3339-validator          0.1.4            pyhd8ed1ab_0          conda-forge
  rhash                      1.4.4            hb547adb_0            conda-forge
  rpds-py                    0.19.1           py310h947b723_0       conda-forge
  s3transfer                 0.10.2           pyhd8ed1ab_0          conda-forge
  semimap                    1.0.0            h1995070_1            conda-forge
  setuptools                 71.0.4           pyhd8ed1ab_0          conda-forge
  sigtool                    0.1.3            h44b9a77_0            conda-forge
  six                        1.16.0           pyh6c4a22f_0          conda-forge
  snappy                     1.1.10           hd04f947_1            conda-forge
  sniffio                    1.3.1            pyhd8ed1ab_0          conda-forge
  sortedcontainers           2.4.0            pyhd8ed1ab_0          conda-forge
  spdlog                     1.14.1           h9c441cc_0            conda-forge
  tabulate                   0.9.0            pyhd8ed1ab_1          conda-forge
  tapi                       1100.0.11        he4954df_0            conda-forge
  termcolor                  2.4.0            pyhd8ed1ab_0          conda-forge
  tk                         8.6.13           h5083fa2_1            conda-forge
  tomli                      2.0.1            pyhd8ed1ab_0          conda-forge
  trustme                    1.1.0            pyhd8ed1ab_0          conda-forge
  types-pyyaml               6.0.12.20240724  pyhd8ed1ab_0          conda-forge
  typing-extensions          4.12.2           hd8ed1ab_0            conda-forge
  typing_extensions          4.12.2           pyha770c72_0          conda-forge
  tzdata                     2024a            h0c530f3_0            conda-forge
  unordered_dense            4.4.0            h2ffa867_1            conda-forge
  urllib3                    2.2.2            pyhd8ed1ab_1          conda-forge
  virtualenv                 20.26.3          pyhd8ed1ab_0          conda-forge
  werkzeug                   3.0.3            pyhd8ed1ab_0          conda-forge
  wheel                      0.43.0           pyhd8ed1ab_1          conda-forge
  wrapt                      1.16.0           py310hd125d64_0       conda-forge
  xmltodict                  0.13.0           pyhd8ed1ab_0          conda-forge
  xxhash                     0.8.2            hb547adb_0            conda-forge
  xz                         5.2.6            h57fd34a_0            conda-forge
  yaml                       0.2.5            h3422bc3_2            conda-forge
  zipp                       3.19.2           pyhd8ed1ab_0          conda-forge
  zlib                       1.3.1            hfb2fe0b_1            conda-forge
  zstandard                  0.23.0           py310hd9c37c8_0       conda-forge
  zstd                       1.5.6            hb46c0d2_0            conda-forge

@jjerphan
Copy link
Collaborator Author

Thank you for this comprehensive report, Ian.

@jjerphan
Copy link
Collaborator Author

jjerphan commented Jul 31, 2024

The problem is due to the previous builds of libcxx 18.1.8 use the "fast" mode of the hardening mode, which caught a few UBs in ArcticDB itself.

For more context see conda-forge/libcxx-feedstock#162 (comment).

On a side note regarding this remark from Ian:

I needed to manually change the use of posix_memalign rather than memalign (issue #1322).

conda-forge/folly-feedstock#211 should fix it.

@jjerphan jjerphan changed the title conda-build: Failure with ILLEGAL instruction at runtime with libcxx v18.1.8 on macOS conda-build: undefined behaviors detected with libcxx v18.1.8 on macOS Jul 31, 2024
@ianthomas23
Copy link
Collaborator

I am investigating the cause of these problems on macOS ARM on a local machine. To do so it is necessary to use a build of libcxx that has hardening enabled. When conda-forge/libcxx-feedstock#176 is merged and the packages are uploaded to conda-forge it will be easy to use it from there. Until then the process is as follows:

  1. Build the hardening-enable package locally using the branch from Add hardened libcxx builds in separate label conda-forge/libcxx-feedstock#176 and using build-locally.py.
  2. Modify the top of ArcticDB's environment_unix.yml to be:
name: arcticdb-debug
channels:
  - file:///<whatever local directory>/libcxx-feedstock/miniforge3/conda-bld
  - conda-forge
dependencies:
  - libcxx=18.1.8=debug_h24c5880_2
  1. Create a conda environment and build ArcticDB in the usual manner.

ianthomas23 added a commit that referenced this issue Sep 2, 2024
#### Reference Issues/PRs

Fixes part of #1724.

#### What does this implement or fix?

When testing on macOS ARM using hardened `libcxx` and latest `master`
branch commit (89817db) I see 4 failures in Clause testing:
```
125 - Clause.AggregationEmptyColumn (Subprocess aborted)
126 - Clause.AggregationColumn (Subprocess aborted)
127 - Clause.AggregationSparseColumn (Subprocess aborted)
128 - Clause.AggregationSparseGroupby (Subprocess aborted)
```
All 4 are fixed by the single character change to `clause.cpp` in this
PR. Comparator functions passed to `std::sort` should be [strict weak
order](https://en.cppreference.com/w/cpp/concepts/strict_weak_order)
such that `sort(a, a)` is `false`. All other sort functions are already
strict weak ordering.

There is no functional change here and there is no explicit test for it.
It probably shouldn't be labelled "bug", it is more "code quality" but
even so is really theoretical as I see no way to get the code to do
something wrong based on different sorting order of two identical
elements.

Signed-off-by: Ian Thomas <[email protected]>
ianthomas23 added a commit that referenced this issue Sep 2, 2024
…ocks (#1745)

#### Reference Issues/PRs

Fixes part of #1724.

#### What does this implement or fix?

This fixes one of the undefined behaviours that came to light in issue
#1724 when building and testing ArcticDB on macOS ARM using a hardened
build of `libcxx`. The C++ test it fixes is
`SegmentHeader.SerializeUnserializeV1`.

#### Any other comments?

Previously `EncodedFieldImpl::shapes` was applying an offset into the
`_blocks` member variable `std::array` before casting to an
`EncodedBlock`. Other use of `_blocks` in this class uses the member
function `blocks()` to do it the other way round, i.e. casting then
offsetting. In practice this has been fine but in principle it is not as
some hardware platform could have some interesting memory alignment to
mess this up, which is what the hardened `libcxx` identifies.

The fix is to use the same approach in `shapes()` to that in `values()`,
the function below it.

I have tested this locally against a hardened build on macOS ARM, and
also against an unhardened build on Ubuntu. Hardened builds are
currently not tested in CI and I suspect that we don't want to add one
as it would be considered a poor use of CI resources.

---------

Signed-off-by: Ian Thomas <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants