[SERVER-4563] simplify ClientCursor lifecycle Created: 27/Dec/11  Updated: 06/Dec/22  Resolved: 07/Feb/19

Status: Closed
Project: Core Server
Component/s: Querying
Affects Version/s: None
Fix Version/s: None

Type: Improvement Priority: Major - P3
Reporter: Aaron Staple Assignee: Backlog - Query Team (Inactive)
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Related
related to SERVER-8369 kill cursor of an internal only Clien... Closed
Assigned Teams:
Query
Participants:

 Description   

Currently there are a multiple ways to yield, hold a pointer to a client cursor, delete/erase a client cursor, etc and in some cases these alternative routines have different nonobvious properties. I think some of these implementations can be unified and their operations can be simplified.

Also the current implementation will explicitly delete a ClientCursor object once it becomes invalid, often leaving dangling invalid pointers that must be handled properly. This can make yielding and other ClientCursor operations more difficult to implement than necessary.



 Comments   
Comment by David Storch [ 04/Feb/19 ]

We've made many improvements to ClientCursor, ClientCursorPin, and CursorManager since this ticket was filed ~7 years ago. I think this can be safely closed as "Gone Away", but I'm flagging for scheduling first so that the Query Team can assess together.

Comment by Aaron Staple [ 29/Jan/13 ]

As part of this we might want to merge ClientCursor::Pin and ClientCursor::Holder. All cases of ClientCursor usage likely have the same functional requirements. In particular this will fix SERVER-8369 and make processGetMore erase its ClientCursors while they are pinned, which will make the ClientCursor lifecycle easier to reason about.

Generated at Thu Feb 08 03:06:21 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.