Details
-
Task
-
Resolution: Fixed
-
Major - P3
-
None
-
Fully Compatible
-
v5.0
-
Sharding 2021-07-12
-
1
Description
We should add a guard around the call to resharding::data_copy::fillBatchForInsert() to call Pipeline::dispose() if Pipeline::getNext() throws.
auto guard = makeGuard([&] { pipeline->dispose(opCtx); pipeline.reset() });
|
pipeline->reattachToOperationContext(opCtx);
|
auto doc = pipeline->getNext();
|
pipeline->detachFromOperationContext();
|
guard.dismiss();
|
Note that this other call to Pipeline::getNext() doesn't an explicit guard to call Pipeline::dispose() because PipelineDeleter::dismissDisposal() hasn't been called yet.
Attachments
Issue Links
- is related to
-
SERVER-56437 ReshardingDonorOplogIterator destroys OperationContext with Pipeline still attached on exception
-
- Closed
-
-
SERVER-57653 ReshardingDonorOplogIterator must call Pipeline::dispose() if Pipeline::getNext() throws
-
- Closed
-