[SERVER-77889] Timeseries sharded on time can route pre-1970 inserts incorrectly Created: 07/Jun/23  Updated: 26/Dec/23

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

Type: Bug Priority: Major - P3
Reporter: David Percy Assignee: Backlog - Query Integration
Resolution: Unresolved Votes: 0
Labels: qi-timeseries
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Related
related to SERVER-77888 Timeseries last-point query is incorr... Backlog
related to SERVER-67825 Investigate where time-series functio... Closed
is related to SERVER-67816 Time-series bucket rounding for pre-1... Open
Assigned Teams:
Query Integration
Operating System: ALL
Participants:

 Description   

Timeseries collections can include time and/or metadata in the shard key. A key assumption mongos makes is that whenever an insert creates a bucket, the 'control.min.time' is initialized by rounding the even time.

However, inserting events before 1970 results in a non-rounded 'control.min.time' value:

> db.createCollection('ts', {timeseries:{timeField:'t',metaField:'m'}})
{ "ok" : 1 }
> db.ts.insert({t: ISODate('1969-01-01T00:00:12.345')})
WriteResult({ "nInserted" : 1 })
> db.system.buckets.ts.find().pretty()
{
        "_id" : ObjectId("fe1eccbc6f22cc96f1dd557f"),
        "control" : {
                "min" : {
                        // Tight lower bound, not rounded.
                        "t" : ISODate("1969-01-01T00:00:12.345Z")
                },
                "max" : {
                        // Rounded upper bound, not tight.
                        "t" : ISODate("1969-01-01T00:01:00Z")
                }
        },
        "data" : ...
}

If a shard owns the rounded value, but not the actual non-rounded 'control.min.time' value, then this bucket is now an orphan. Shard-filtering queries exclude it, and presumably the balancer could delete it at some point.

Note that this is unrelated to time-series filter pushdown rewrites. The problem is that the insert path creates orphan buckets; queries will exclude those orphans regardless of optimization.


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