-
Type: Improvement
-
Resolution: Unresolved
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Performance
-
Server Programmability
-
Sharding 2021-02-22, Sharding 2021-03-08
Background: this is the follow up to https://jira.mongodb.org/browse/SERVER-53505 trying to prevent the service entry point from blocking waiting for the tenant migration critical section blocker.
The motivation to fix is is based on the anticipated outage when a tenant whose database is migrated to another replica set is sending too many clustered reads that are blocked by the migration critical section. The executor serving client reads will run out of free threads and/or create too many threads to accommodate the thread unavailability.
Besides the blocker, we also have a prototype for asynchronous execution in runAsync, however it also returns a synchronous future, which will not unblock the thread when it's waiting.
At the end, the service command invocation does something like `handleRequest().get()` like here. No matter how asynchronous the processing is, the `get()` is still blocking the thread.
This ticket is to discuss what we can do about that.
- depends on
-
SERVER-52783 [cleanup] Make tenant_migration_donor_util::checkIfCanReadOrBlock return a Future
- Closed
- related to
-
SERVER-54208 Remove blocking call to Fetcher::join from TenantMigrationDonorService
- Closed