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

Remove catch() clause to prevent truncating stack trace in AsyncOper::do_recycle_and_execute() #6667

Merged
merged 4 commits into from May 26, 2023

Conversation

michael-wb
Copy link
Contributor

@michael-wb michael-wb commented May 24, 2023

What, How & Why?

Remove the catch clause from AsyncOper::do_recycle_and_execute() to avoid truncating the stack trace when an exception occurs on the event loop. This has the side effect that do_recycle() may have not been called on the AsyncOper object, but these exceptions are fatal and it doesn't matter if the memory is deleted or reclaimed at this point.

#Fixes #6665

☑️ ToDos

  • 📝 Changelog update
  • [ ] 🚦 Tests (or not relevant)
  • [ ] C-API, if public C++ API changed.

@michael-wb michael-wb self-assigned this May 24, 2023
@cla-bot cla-bot bot added the cla: yes label May 24, 2023
std::forward<Args>(args)...); // Throws
}
catch (...) {
if (!was_recycled)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the effect of not doing this anymore?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't expect any impact. It was only there to ensure the AsyncOper object was either recycled or deleted if an exception occurred during the std::move or std::forward of the provided arguments before the object could be recycled/deleted. I've never seen this happen in practice, so the recycle/delete will have already happened before calling the handler, in addition, if the catch clause is executed, the app is going to crash (or at least be in a bad state) anyways...

Copy link
Contributor

@jedelbo jedelbo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't really have an opinion here.

@michael-wb michael-wb requested a review from ironage May 25, 2023 17:22
@michael-wb
Copy link
Contributor Author

Verified that the stack trace is preserved by placing a REALM_ASSERT(false); in the sync::ClientImpl::Session::send_upload_message() function. Note: These stack traces were pulled from the MacOS Console app, which lists all the stack dumps that occurred on the system.

0   libsystem_kernel.dylib        	       0x1a2ed4724 __pthread_kill + 8
1   libsystem_pthread.dylib       	       0x1a2f0bc28 pthread_kill + 288
2   libsystem_c.dylib             	       0x1a2e19ae8 abort + 180
3   realm-object-store-tests      	       0x104f17a84 please_report_this_issue_in_github_realm_realm_core_v_13_12_0 + 12 (terminate.cpp:65)
4   realm-object-store-tests      	       0x104f17d14 realm::util::terminate_internal(std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char>>&) + 292 (terminate.cpp:143)
5   realm-object-store-tests      	       0x104f17bec realm::util::terminate_with_info(char const*, char const*, long, char const*, std::initializer_list<realm::util::Printable>&&) + 308 (terminate.cpp:162)
6   realm-object-store-tests      	       0x104f17ab8 realm::util::terminate(char const*, char const*, long, std::initializer_list<realm::util::Printable>&&) + 52 (terminate.cpp:149)
7   realm-object-store-tests      	       0x1049dc250 realm::sync::ClientImpl::Session::send_upload_message() + 1892 (client_impl_base.cpp:2225)
8   realm-object-store-tests      	       0x1049d425c realm::sync::ClientImpl::Session::send_message() + 880 (client_impl_base.cpp:1981)
9   realm-object-store-tests      	       0x1049d3714 realm::sync::ClientImpl::Connection::send_next_message() + 376 (client_impl_base.cpp:1112)
10  realm-object-store-tests      	       0x1049d8474 realm::sync::ClientImpl::Connection::enlist_to_send(realm::sync::ClientImpl::Session*) + 132 (client_impl_base.cpp:1577)
11  realm-object-store-tests      	       0x104a59c74 realm::sync::ClientImpl::Session::enlist_to_send() + 272 (client_impl_base.hpp:1574)
12  realm-object-store-tests      	       0x104a53d68 realm::sync::ClientImpl::Session::ensure_enlisted_to_send() + 44 (client_impl_base.hpp:1544)
13  realm-object-store-tests      	       0x1049d9e90 realm::sync::ClientImpl::Session::check_for_download_completion() + 300 (client_impl_base.cpp:2849)
14  realm-object-store-tests      	       0x1049d7c7c realm::sync::ClientImpl::Session::receive_mark_message(unsigned long long) + 376 (client_impl_base.cpp:2584)
15  realm-object-store-tests      	       0x1049d7ab0 realm::sync::ClientImpl::Connection::receive_mark_message(unsigned long long, unsigned long long) + 156 (client_impl_base.cpp:1488)
16  realm-object-store-tests      	       0x1049d5534 void realm::_impl::ClientProtocol::parse_message_received<realm::sync::ClientImpl::Connection>(realm::sync::ClientImpl::Connection&, std::__1::basic_string_view<char, std::__1::char_traits<char>>) + 4224 (protocol_codec.hpp:356)
17  realm-object-store-tests      	       0x1049d16b4 realm::sync::ClientImpl::Connection::handle_message_received(realm::util::Span<char const, 18446744073709551615ul>) + 112 (client_impl_base.cpp:1178)
18  realm-object-store-tests      	       0x1049d1544 realm::sync::ClientImpl::Connection::websocket_binary_message_received(realm::util::Span<char const, 18446744073709551615ul>) + 236 (client_impl_base.cpp:477)
19  realm-object-store-tests      	       0x1049e4c4c realm::sync::ClientImpl::Connection::WebSocketObserverShim::websocket_binary_message_received(realm::util::Span<char const, 18446744073709551615ul>) + 100 (client_impl_base.cpp:813)
20  realm-object-store-tests      	       0x104b1d024 realm::sync::websocket::(anonymous namespace)::DefaultWebSocketImpl::websocket_binary_message_received(char const*, unsigned long) + 80 (default_socket.cpp:174)
21  realm-object-store-tests      	       0x104b43f58 (anonymous namespace)::WebSocket::frame_reader_loop() + 236 (websocket.cpp:993)
22  realm-object-store-tests      	       0x104b455dc (anonymous namespace)::WebSocket::frame_reader_loop()::'lambda'(std::__1::error_code, unsigned long)::operator()(std::__1::error_code, unsigned long) const + 180 (websocket.cpp:1038)
23  realm-object-store-tests      	       0x104b454f0 realm::util::UniqueFunction<void (std::__1::error_code, unsigned long)>::SpecificImpl<(anonymous namespace)::WebSocket::frame_reader_loop()::'lambda'(std::__1::error_code, unsigned long)>::call(std::__1::error_code&&, unsigned long&&) + 64 (functional.hpp:154)
24  realm-object-store-tests      	       0x10488afd8 realm::util::UniqueFunction<void (std::__1::error_code, unsigned long)>::operator()(std::__1::error_code, unsigned long) const + 120 (functional.hpp:94)
25  realm-object-store-tests      	       0x10488af54 void realm::sync::network::Service::AsyncOper::do_recycle_and_execute_helper<realm::util::UniqueFunction<void (std::__1::error_code, unsigned long)>, std::__1::error_code, unsigned long>(bool, bool&, realm::util::UniqueFunction<void (std::__1::error_code, unsigned long)>, std::__1::error_code, unsigned long) + 104 (network.hpp:2776)
26  realm-object-store-tests      	       0x10488aeb4 void realm::sync::network::Service::AsyncOper::do_recycle_and_execute<realm::util::UniqueFunction<void (std::__1::error_code, unsigned long)>, std::__1::error_code&, unsigned long&>(bool, realm::util::UniqueFunction<void (std::__1::error_code, unsigned long)>&, std::__1::error_code&, unsigned long&) + 136 (network.hpp:2764)
27  realm-object-store-tests      	       0x1048997b0 realm::sync::network::Service::BasicStreamOps<realm::sync::network::Socket>::BufferedReadOper<realm::util::UniqueFunction<void (std::__1::error_code, unsigned long)>>::recycle_and_execute() + 656 (network.hpp:2635)
28  realm-object-store-tests      	       0x104b30cfc realm::sync::network::Service::Impl::execute(std::__1::unique_ptr<realm::sync::network::Service::AsyncOper, realm::sync::network::Service::LendersOperDeleter>&) + 36 (network.cpp:1646)
29  realm-object-store-tests      	       0x104b30a08 realm::sync::network::Service::Impl::run_impl(bool) + 320 (network.cpp:1574)
30  realm-object-store-tests      	       0x104b2c7d8 realm::sync::network::Service::Impl::run_until_stopped() + 32 (network.cpp:1385)
31  realm-object-store-tests      	       0x104b2c7ac realm::sync::network::Service::run_until_stopped() + 28 (network.cpp:1776)
32  realm-object-store-tests      	       0x104b1a15c realm::sync::websocket::DefaultSocketProvider::event_loop() + 352 (default_socket.cpp:580)
33  realm-object-store-tests      	       0x104b1adcc decltype(*std::declval<realm::sync::websocket::DefaultSocketProvider*>().*std::declval<void (realm::sync::websocket::DefaultSocketProvider::*)()>()()) std::__1::__invoke[abi:v15006]<void (realm::sync::websocket::DefaultSocketProvider::*)(), realm::sync::websocket::DefaultSocketProvider*, void>(void (realm::sync::websocket::DefaultSocketProvider::*&&)(), realm::sync::websocket::DefaultSocketProvider*&&) + 116 (invoke.h:359)
34  realm-object-store-tests      	       0x104b1ad4c void std::__1::__thread_execute[abi:v15006]<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, void (realm::sync::websocket::DefaultSocketProvider::*)(), realm::sync::websocket::DefaultSocketProvider*, 2ul>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, void (realm::sync::websocket::DefaultSocketProvider::*)(), realm::sync::websocket::DefaultSocketProvider*>&, std::__1::__tuple_indices<2ul>) + 48 (thread:290)
35  realm-object-store-tests      	       0x104b1a9f8 void* std::__1::__thread_proxy[abi:v15006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, void (realm::sync::websocket::DefaultSocketProvider::*)(), realm::sync::websocket::DefaultSocketProvider*>>(void*) + 84 (thread:301)
36  libsystem_pthread.dylib       	       0x1a2f0bfa8 _pthread_start + 148
37  libsystem_pthread.dylib       	       0x1a2f06da0 thread_start + 8

Without this change, the stack trace looks like this:

0   libsystem_kernel.dylib        	       0x1a2ed4724 __pthread_kill + 8
1   libsystem_pthread.dylib       	       0x1a2f0bc28 pthread_kill + 288
2   libsystem_c.dylib             	       0x1a2e19ae8 abort + 180
3   libc++abi.dylib               	       0x1a2ec4b84 abort_message + 132
4   libc++abi.dylib               	       0x1a2eb43b4 demangling_terminate_handler() + 320
5   libobjc.A.dylib               	       0x1a2b8b03c _objc_terminate() + 160
6   libc++abi.dylib               	       0x1a2ec3f48 std::__terminate(void (*)()) + 16
7   libc++abi.dylib               	       0x1a2ec6f44 __cxa_rethrow + 148
8   realm-object-store-tests      	       0x101ffaba8 void realm::sync::network::Service::AsyncOper::do_recycle_and_execute<realm::util::UniqueFunction<void (std::__1::error_code, unsigned long)>, std::__1::error_code&, unsigned long&>(bool, realm::util::UniqueFunction<void (std::__1::error_code, unsigned long)>&, std::__1::error_code&, unsigned long&) + 220 (network.hpp:2770)
9   realm-object-store-tests      	       0x1020094a4 realm::sync::network::Service::BasicStreamOps<realm::sync::network::Socket>::BufferedReadOper<realm::util::UniqueFunction<void (std::__1::error_code, unsigned long)>>::recycle_and_execute() + 656 (network.hpp:2635)
10  realm-object-store-tests      	       0x1022a0b3c realm::sync::network::Service::Impl::execute(std::__1::unique_ptr<realm::sync::network::Service::AsyncOper, realm::sync::network::Service::LendersOperDeleter>&) + 36 (network.cpp:1646)
11  realm-object-store-tests      	       0x1022a0848 realm::sync::network::Service::Impl::run_impl(bool) + 320 (network.cpp:1574)
12  realm-object-store-tests      	       0x10229c618 realm::sync::network::Service::Impl::run_until_stopped() + 32 (network.cpp:1385)
13  realm-object-store-tests      	       0x10229c5ec realm::sync::network::Service::run_until_stopped() + 28 (network.cpp:1776)
14  realm-object-store-tests      	       0x102289e80 realm::sync::websocket::DefaultSocketProvider::event_loop() + 352 (default_socket.cpp:580)
15  realm-object-store-tests      	       0x10228aaf0 decltype(*std::declval<realm::sync::websocket::DefaultSocketProvider*>().*std::declval<void (realm::sync::websocket::DefaultSocketProvider::*)()>()()) std::__1::__invoke[abi:v15006]<void (realm::sync::websocket::DefaultSocketProvider::*)(), realm::sync::websocket::DefaultSocketProvider*, void>(void (realm::sync::websocket::DefaultSocketProvider::*&&)(), realm::sync::websocket::DefaultSocketProvider*&&) + 116 (invoke.h:359)
16  realm-object-store-tests      	       0x10228aa70 void std::__1::__thread_execute[abi:v15006]<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, void (realm::sync::websocket::DefaultSocketProvider::*)(), realm::sync::websocket::DefaultSocketProvider*, 2ul>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, void (realm::sync::websocket::DefaultSocketProvider::*)(), realm::sync::websocket::DefaultSocketProvider*>&, std::__1::__tuple_indices<2ul>) + 48 (thread:290)
17  realm-object-store-tests      	       0x10228a71c void* std::__1::__thread_proxy[abi:v15006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, void (realm::sync::websocket::DefaultSocketProvider::*)(), realm::sync::websocket::DefaultSocketProvider*>>(void*) + 84 (thread:301)
18  libsystem_pthread.dylib       	       0x1a2f0bfa8 _pthread_start + 148
19  libsystem_pthread.dylib       	       0x1a2f06da0 thread_start + 8

@michael-wb michael-wb merged commit 75ae0e0 into master May 26, 2023
25 of 27 checks passed
@michael-wb michael-wb deleted the mwb/bad-alloc-show-full-stack-trace branch May 26, 2023 06:02
papafe added a commit that referenced this pull request May 30, 2023
…e-core-13.13

* commit '36b2df44453ba5e830369c76ab0683799a287605': (34 commits)
  core release 13.13.0
  Fix an assertion failure if an async write callback ran during a write transaction (#6661)
  Remove catch() clause to prevent truncating stack trace in AsyncOper::do_recycle_and_execute() (#6667)
  Allow geo coordinate numeric argument substitutions (#6663)
  Fix a lock order inversion in tests (#6666)
  Avoid performing unaligned reads in Array::get_chunk()
  Fix a few UBSan failures hit by tests
  Use std::optional to store cached leaves in query nodes (#6653)
  maybe fix a race in a test (#6651)
  Access token refresh for websockets was not updating the location metadata (#6631)
  Updated release notes
  Prepare release
  Updated baas server tag for CI (#6650)
  Geospatial basic queries benchmarks (#6621)
  Geospatial feedback (#6645)
  Add support for early exit in BPlusTree::for_all()
  Filter out unresolved links in Dictionary::get_any()
  Benchmark for full-text search
  geospatial validation of polygons (#6607)
  Fix importing Results with deleted collection
  ...
kraenhansen added a commit that referenced this pull request Jun 19, 2023
* Updated release notes

* Update catch2 v3.3.2 (#6605)

* Make core infer platform and cpu_arch, while bundle_id must be provided by SDK's (#6612)

* platform and cpu_arch are inferred by core, bundle_id must be provided by SDK's

* update changelog

* Return proper value for X86_64 arch

Co-authored-by: Christian Melchior <christian.melchior@mongodb.com>

* Get fine-grained platform for Apple devices

* Fix tests

* small fixes

* fix more tests

* Fix mistake in changelog

---------

Co-authored-by: Christian Melchior <christian.melchior@mongodb.com>

* use consistent rounding, following SERVER-75392 (#6477)

* fix entries that went to the wrong change version (#6632)

* Special-case main thread runloop scheduler

* Improve SectionedResults performance

SectionedResults used a std::map in a few places where the keys are a dense
range (i.e. always [0..map.size())) and so they can be std::vector instead. The
maps keyed on Mixed are now std::unordered_map.

Change notifications now report changes as a `std::vector<IndexSet>` rather
than `std::map<size_t, IndexSet>`. This is slower and uses more memory when the
only sections that changed are near the end of a SectionedResults with a large
number of sections, but is much faster if all sections changed or if the
sections which changed are early in the SectionedResults. Change notifications
now reuse buffers, which increases persistent memory usage slightly but
significant reduces allocations.

Change notifications for a single section now only compute the changes for that
section rather than computing the full changes and then filtering out the
changes for other sections.

* use static_assert rather than a old home rolled one

* fix warning of redefine of CHECK macro

* fix unused function warning

* silence warnings in bid128_to_string

* Introduce BPlusTree::for_all

* Prevent program from crashing when removing backlinks

* Fix broken snapshot of collection of objects

* Fix importing Results with deleted collection

The result should be an empty result, not the whole table.

* geospatial validation of polygons (#6607)

* geospatial validation of polygons

* Loop->Ring, added tests

* use std::unique

* changelog

* Benchmark for full-text search

* Allow to filter benchmark and run only list of specified names
* Add simple benchmark for fulltext search with index

* Filter out unresolved links in Dictionary::get_any()

* Add support for early exit in BPlusTree::for_all()

* Geospatial feedback (#6645)

* verify local results match a server query

* disallow geowithin on top level tables

* fix geo queries with ANY/ALL/NONE

* geospatial validation of points

* rename GeoCenterSphere -> GeoCircle

* review feedback

* better testing and fix any/all/none geospatial

* format

* Geospatial basic queries benchmarks (#6621)

* Add basic benchmarks for Geospatial type and queries

* Less copying in GeoWithinCompare

* Bring back caching of s2 region into Geospatial

* remove transaction overhead from measurements

* a couple small optimizations

* formatting

* simplify geospatial query evaluations

* changelog

---------

Co-authored-by: James Stone <james.stone@mongodb.com>

* Updated baas server tag for CI (#6650)

* Prepare release

* Updated release notes

* Access token refresh for websockets was not updating the location metadata (#6631)

* Always refresh metadata on app login
* Updated changelog
* Always update location when requested; fix c_api test
* Update test to properly evaluate websocket redirections; added one more test
* Updated changelog and fixed compile warning
* Added location checks back to test
* added mutex locking around location updated state and reworked requesting location update to use flag
* clang format and fix incorrect timeout value
* Reworked update location logic a bit and removed unused function
* Free mutex before calling completion on early exit in init_app_metadata

* maybe fix a race in a test (#6651)

* Use std::optional to store cached leaves in query nodes (#6653)

Our use of aligned_storage was basically a complicated manual version of this.
I was hoping this'd have binary size benefits, but it ended up making the
library 100 bytes larger instead. Nonetheless, it greatly simplifies things.

* Fix a few UBSan failures hit by tests

* Avoid performing unaligned reads in Array::get_chunk()

* Fix a lock order inversion in tests (#6666)

The cycle was DaemonThread::m_running_on_change_mutex =>
RealmCoordinator::m_realm_mutex  => SyncManager::m_mutex  =>
RealmCoordinator::s_coordinator_mutex  =>
DaemonThread::m_running_on_change_mutex, and it happened due to
DaemonThread::remove() being called inside RealmCoordinator::clear_cache()
while holding s_coordinator_mutex. Fortunately we don't actually need to be doing that.

As the cycle required RealmCoordinator::clear_all_caches(), this was only
applicable to tests.

* Allow geo coordinate numeric argument substitutions (#6663)

* allow geo coordinate numeric argument substitutions

* review feedback

* explicit cast to address warning

* Remove catch() clause to prevent truncating stack trace in AsyncOper::do_recycle_and_execute() (#6667)

* Fix an assertion failure if an async write callback ran during a write transaction (#6661)

Between when the callback after acquiring the write lock is scheduled and when
it's invoked a synchronous write transaction can be begun, and if it's not
ended before the next time the scheduler gets to run, the scheduled callback
will be invoked inside the write. When this happens we want to just do nothing.
Ending the synchronous write transaction will take care of rescheduling the
async write it preempted.

* core release 13.13.0

* Updated release notes

* Allocate arguments for lists (#6674)

* Small documentation and code fixes (#6672)

* Fix crash when opening FLX realm after client reset failure (#6671)

* Fix crash when opening FLX realm after client reset failure

* Update changelog

* Don't superceed pending subscriptions in case of a client reset failure

* Add test

* Changes after code review

* Support sorting based on values from a dictionary (#5311)

Co-authored-by: Sebastian Valle <svalle@gascaribe.com>
Co-authored-by: James Stone <james.stone@mongodb.com>

* Filter out external sources from Eclipse (#6682)

Indexer has a hard time dealing with Catch2

* Use cross-compilers instead of CentOS image (#6559)

* Use cross-compilers instead of CentOS image

* changelog

* fix bad merge

* refactor toolchain files

* clarify useToolchain exception circumstances

* Remap github URL to ssh to fix BAAS dependency using https:// (#6685)

* core v13.14.0

* Updated release notes

* Switch to building with Xcode 14 (#6647)

* better fix explanation in the changelog for list of args in the query parser (#6692)

* Remove constructor for GeoPoint and GeoPolygon (#6679)

Co-authored-by: Mathias Stearn <redbeard0531@gmail.com>

* Fix failing "sync: non-synced metadata table doesn't result in non-additive schema change" tests (#6697)

* Reporting correct error message on HTTP errors for Browser target

* User/Server API key provider becomes a single 'API key' provider (#6696)

* Allow frozen Realms to be opened with additive schema changes (#6693)

* allow frozen Realms to be opened with additive schema changes

* lint

* strengthen tests and comments

* Update src/realm/object-store/shared_realm.cpp

Co-authored-by: Thomas Goyne <thomas.goyne@mongodb.com>

---------

Co-authored-by: Thomas Goyne <thomas.goyne@mongodb.com>

* Reverted minimum swift version to fix failing CI tests (#6706)

* core release v13.15.0

* Updated release notes

* Fix client reset test with invalid query (#6711)

* Fix SessionWrapper use-after-free crash when tearing down sessions (#6676)

* Changed SessionWrapper pointer to bind_ptr; added session ident history
* Fix teardown if client is destroyed before session
* Session no longer holds bind_ptr to SessionWrapper; reverted some changes
* Fixed return and updated some comments
* Don't process errors if session is shutting down
* Added extra checks for session state
* Updates from review
* Updated some finalized checks
* Rolled back some changes
* Added output to ASSERTS and moved session history to unordered_set
* Remove session history entry on normal close
* Updated comment in sync tests

* Add [baas] and [local] tags to object store sync tests to identify the tests that rely on BAAS or not (#6710)

* Use Columns<Link> when property is Dictionary of links (#6705)

If a Dictionary property has links as value type, we can use Columns<Link> to handle
the links instead of the basic Columns<Dictionary>. This has the effect that when we
compare with a single value, we will optimize to use LinksToNode. So we need to make
LinksToNode handle the Dictionary case.

When we compare with a list of links, we must ensure that the list is converted to
a list obj ObjKeys - which is the type that Column<Link> evaluates to.

 Use LinksToNode for lists in QueryParser

* better changelog message for the fix related to queries with list of arguments (#6717)

* Fixes for Emscripten target (Passing header from fetch response. Using Config.path for inMemory Realm) (#6716)

* Fixes for Emscripten target: Passing header for fetch response. Passing the RealmConfig.path to be used for inMemory Realm, this is needed for registering SyncSession

Co-authored-by: Jørgen Edelbo <jorgen.edelbo@mongodb.com>

* release 13.15.1

* Updated spec.yml to remove User & Server prefix from ApiKey credentials

---------

Co-authored-by: James Stone <james.stone@mongodb.com>
Co-authored-by: realm-ci <ci@realm.io>
Co-authored-by: Kirill Burtsev <kirill.burtsev@mongodb.com>
Co-authored-by: Daniel Tabacaru <96778637+danieltabacaru@users.noreply.github.com>
Co-authored-by: Christian Melchior <christian.melchior@mongodb.com>
Co-authored-by: Thomas Goyne <tg@realm.io>
Co-authored-by: Thomas Goyne <thomas.goyne@mongodb.com>
Co-authored-by: Jørgen Edelbo <jorgen.edelbo@mongodb.com>
Co-authored-by: Michael Wilkerson-Barker <michael.wilkersonbarker@mongodb.com>
Co-authored-by: Nicola Cabiddu <nicola.cabiddu@mongodb.com>
Co-authored-by: Sebastian Valle <svalle@gascaribe.com>
Co-authored-by: Yavor Georgiev <fealebenpae@users.noreply.github.com>
Co-authored-by: Ferdinando Papale <4850119+papafe@users.noreply.github.com>
Co-authored-by: Mathias Stearn <redbeard0531@gmail.com>
Co-authored-by: Nabil Hachicha <nabil.hachicha@gmail.com>
Co-authored-by: Finn Schiermer Andersen <finn.schiermer.andersen@gmail.com>
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Mar 21, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Remove 'catch' in AsyncOper::do_recycle_and_execute to prevent truncating stack trace
4 participants