-
Type: Task
-
Resolution: Unresolved
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
None
-
Query Optimization
Add concurrency crud test with data movement with emphasis on verifying results, especially query results, as opposed to verifying integrity of the data. Some of the basic query variations we could include are: point queries, queries that need getMores, queries on shard key, queries without shard key, etc.
Motivation: We currently have a variety of testing ops together with moveChunk/movePrimary/resharding in the background. However, most of these are very generic. For example, passthrough tests use the _id as the shard key to ensure that it will be suitable for all tests. A lot of the existing concurrency testing also focuses more on the database being consistent and doesn't care about errors while running the tests. This would also help in capturing issues like SERVER-78071.
This test looks like a good candidate to emulate. Each thread owns a range of data and it keeps track of the changes being made. Although this is not included in the existing test, it will be easy to add tests to verify query results on the range of data being tracked. We can have variations that swap out movePrimary for different data movement primitives and run specific types of queries (w/ or w/o shard key and other types mentioned in description) while verifying the results.
We can also tune some settings that we know are not often exercised in tests and are more likely to make things break (like aggressively yielding).
- related to
-
SERVER-78071 A targeted query with a concurrent yield and chunk migration can miss results
- Backlog