- 
    Type:Task 
- 
    Resolution: Fixed
- 
    Priority:Major - P3 
- 
    Affects Version/s: None
- 
    Component/s: None
- 
        Fully Compatible
- 
        Execution Team 2021-10-04, Execution Team 2021-10-18
- 
        None
- 
        None
- 
        None
- 
        None
- 
        None
- 
        None
- 
        None
Inside collection_scan.cpp atEndOfRangeInclusive() is used to determine if a recordId is exceeds beyond the end bound. However, there is no check whether a recordId is before the start bound.Consider the following:
Recall RecordIds generated from type ‘objectId’ begin with typebits 78, RecordIds generated from type ‘date’ begin with typebits 64
- Suppose recId0 is generated from a date type (begins with 64)
- maxRecord = 78***, minRecord = 78** (both of type ObjectId)
- Inside CollectionScan::returnIfMatches(), we are not inside at the end of the rangeBound, and there is no filter provided so it passes the filter and returns PlanStage::Advanced
- The caller of returnIfMatches will think there is new work to be done with the document found (recId0)
- This means a result of different type than the bounds may be misinterpreted as within the bounds
Instead of returning PlanStage::Advanced, returnIfMatches should check if the recId found is outside the start bound, and return PlanStage::NEED_TIME if so to prompt another pass
- is depended on by
- 
                    SERVER-60002 Enable TTLDeletions on clustered collections -         
- Closed
 
-