Unverified Commit ded9ae5e authored by vector-of-bool's avatar vector-of-bool Committed by GitHub
Browse files

CDRIVER-4114: Reduce contention on the topology description (#854)



* Additional atomic operations

* 64bit and pointer atomics for MSVC

* Revive some old exported symbols, clean up some unused code, and mark unreachable code.

* No 64bit atomics for x86 GCC either. Fix several warnings

* Token balance in case of empty macro expansion

* Fix extra semicolon, plus macOS posix detection

* Fix check on 32-bit, and missing 'default' case.

Closes: CDRIVER-4124

* Missing ptr_fetch

* CXX-4113: Thread-safe pool for server session objects

* Remove unused node pointers on server sessions

* Track pool size, and don't loop while holding the lock to clear

* Closes: CDRIVER-4124

* Wrong arg names in i64 compare_exchange emul

* Missing dist listing for ts-pool files

* Cleanup and some redesign of pool API

* Declare special pool for server sessions

* Fix pruning pool not leaking the 10,001st session

* Use typed pool fns

* Visiting pool items, and checking that items are returned to the pool

* Fix unacknowledged sessions tests

* Additional atomic operations

* A simple shared pointer construct

* More atomics

* Fix atomic intrinsics on MSVC

* Topology description is a shared ptr

* Give sptr._aux a type to aid in debugging. And no spinlocks!

* Fix race on updating server rtt

* Assertion macro for asserting pointers inline

* Refactoring many locations to copy the shared topology description

* Undo accidental local dev changes

* Give the topology scanner its own mutex for the handshake_cmd

This requires a refactor of how the handshake_cmd is passed around.
Instead of the scanner returning a pointer to contended data and expecting
the caller to bring their own synchronization, the scanner duplicates the
handshake into an output parameter and performs its own synchronization
internally.

* Instead of using a mutex to guard monitor thread startup, use an atomic compare-exchange.

* Pull from new-atomics

* Fix: 'release' is not valid for GCC compare-exchange

* Lots of "const" weeds out threading a mutation issues

* Fix const-init from non-constant-expr

* Use BSON_OS_UNIX

* fetch() is `const`, and no `release` in cmpxch

* Fix missing 'inline's

* Mention the LIFO nature of the thread-pool, and the non-conformance of the 'push' operation

* auditing the pool is compile-time optional

* A shared-pointer abstraction

* Make mongoc-shared a private API

* typo

* init the shared_ptr_mtx in a Windows-compatible way.

* Update names to reflect C11 names, strong/weak cmpxchg

* Fix const-to-mutable bind in MSVC

* PR and impl updates for shared_ptr:

- Rename to more closely match stdlib equivs
- Delete macros that are unneeded
- Tweak impl of atomic_store to be more efficient
- Update doc comments

* Address various PR comments

* More tests for atomic operations

* Restore bson_memory_barrier with a deprecation notice

* Spelling is hard

* No 'consume' memorder for atomic exchange

* Fix detection of 64bit, plus unused intrin value

* Missing i64_fetch and i64_fetch_sub on 32-bit playforms

* Fix spinlock logic inversion for i64 emul

* Remove config checks for atomics

* Just use `int`

* Thread-safe CSE startup without a mutex

* Set march=i686 for 32bit builds

* Update src/libmongoc/src/mongoc/mongoc-shared.c

Co-authored-by: default avatarEzra Chung <88335979+eramongodb@users.noreply.github.com>

* PR comments, use bson_assert_param, protect from self-assignment

* CheckAtomics.cmake is gone

* PR comments, and an assertion fix

* Update doc comments from PR comments

* Test aliasing to subobject, and fix C99 usage

* Remove C99 usage, unneeded assertions, and warnings

* Fix lost topology update with mongoc_topology_reconcile

* Refresh td ptr after making changes in a test

* Fix deadlocks in topology shutdown

* Guard against a zero-allocated mongoc_set

* Fix invalid test result JSON generation

* Fix warnings from MSVC. Fix unexported symbols used on 32bit DLL

* That is not 'const'

* Remove C++ comments

* Fix leak from misuse of bson_copy_to

* Simplify scanner handshake setup

* Fix leak of shared pointer when committing topo updates

* Fix unsafe use-after free in test case

* Missing cast-from-const in int64 atomic emul

* Remove unneeded NULL checks. Fix doubled events when racing to invalidate servers

* Use generation to validate server description

* Fix attempt to double-reconnect

* Update _mongoc_cluster_create_server_stream in conditional code segments

* Conditionally set error in _cluster_fetch_sream_single

* Refresh topology after requesting a scan

* Fix race with the scanner to finish the initial handshake

* Fix leak of topology descr reference

* Fix leaked alloc of bson_t in _stream_run_hello

* More leaks with dup_handshake_cmd

* BSON initializer that is safe to destroy or to leak.

* Undo incorrect changes for bson memcheck code

* Less macro magic

* Propagate the random seed when cloning a topology description

* Prevent recursive topology modifications, which deadlock

* Update comments and cleanup.

- Remove mentions of topology->mutex.
- Update comments that refer to locking.
- Remove some redundant APIs.
- Move some APIs to have internal linkage.

* Guard against a deadlock with an assertion

* Revert "Guard against a deadlock with an assertion"

This reverts commit 4b9892ed2196a2f8274885a9f5b844685dbeb814.

* Update for PR comments. Cleanup, const, and typos

* Fix use-after free of server description in test. Remove unneeded locking

* Fix decl-after-stmt

* Fix shadowed name

* Pin docutils version when installing sphinx

* Separate mutex for srv polling, document more usage of tpld_modification_mtx

* Suppress unused-var warning

* ThreadSanitizer calls me out for wrong atomics.

* Fix race in on counters in counter test

* Release the topology description outside of the mutex

* Thread-safe direct topology modification for testing purposes

* Fix unnecessary race on getting topology event counts

* Thread-safety in tests around topology reconciliation

* Fix regression in counters test

* Switch sign in counters tests

* More thread safety in tests around topology descriptions

* Spell

* Update to comments, docs, and fixes from PR

* Score scanner_state as an int, so we can perform well-defined atomic ops on it

* temporarily disable silence in 'run auth tests'

* Fix missing close quote in evergreen test script

* Temporarily enable logging for 'run auth tests'

* Give generation map const-correctness

The generation map is owned by its server description, so the pointer
member should have deep-const semantics. This uncovers new potential
correctness issues, which are fixed now.

* Fix TSan warning on server sets when running down

* Clean up test usages of unsafe tpld access

* Copy the maxElectionId for the topology description

* Clear last_hello_response when invalidating server descriptions

* Missed modification begin on topology

* Remove redundant casts

* Re-silence 'run auth tests'

Co-authored-by: default avatarEzra Chung <88335979+eramongodb@users.noreply.github.com>
parent 0eeff0a4
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment