Time-series bucket can be created that violates max time-span

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Fixed
    • Priority: Major - P3
    • 5.0.10, 6.0.0-rc10, 6.1.0-rc0
    • Affects Version/s: 6.0.0-rc7
    • Component/s: None
    • None
    • Fully Compatible
    • ALL
    • v6.0, v5.0
    • Hide
      > db.weather.drop()
      false
      > db.createCollection(     "weather",     {        timeseries: {           timeField: "timestamp",           metaField: "metadata",           granularity: "hours"        }     } )
      { "ok" : 1 }
      > db.weather.insertMany( [    {       "metadata": { "sensorId": 5578, "type": "temperature" },       "timestamp": ISODate("2105-06-24T06:28:16Z"),       "temp": 12    }])
      {
      	"acknowledged" : true,
      	"insertedIds" : [
      		ObjectId("628d0c27231ed7a35f109c7f")
      	]
      }
      > db.weather.insertMany( [    {       "metadata": { "sensorId": 5578, "type": "temperature" },       "timestamp": ISODate("1969-05-18T00:00:00.000Z"),       "temp": 12    }])
      {
      	"acknowledged" : true,
      	"insertedIds" : [
      		ObjectId("628d0c31231ed7a35f109c81")
      	]
      }
      > db.system.buckets.weather.find()
      { "_id" : ObjectId("fed30f004d9e3cfa51f88755"), "control" : { "version" : 1, "min" : { "_id" : ObjectId("628d0c27231ed7a35f109c7f"), "timestamp" : ISODate("1969-05-18T00:00:00Z"), "temp" : 12 }, "max" : { "_id" : ObjectId("628d0c31231ed7a35f109c81"), "timestamp" : ISODate("2105-06-24T06:28:16Z"), "temp" : 12 } }, "meta" : { "sensorId" : 5578, "type" : "temperature" }, "data" : { "_id" : { "0" : ObjectId("628d0c27231ed7a35f109c7f"), "1" : ObjectId("628d0c31231ed7a35f109c81") }, "timestamp" : { "0" : ISODate("2105-06-24T06:28:16Z"), "1" : ISODate("1969-05-18T00:00:00Z") }, "temp" : { "0" : 12, "1" : 12 } } }
      > 
      
      Show
      > db.weather.drop() false > db.createCollection( "weather" , { timeseries: { timeField: "timestamp" , metaField: "metadata" , granularity: "hours" } } ) { "ok" : 1 } > db.weather.insertMany( [ { "metadata" : { "sensorId" : 5578, "type" : "temperature" }, "timestamp" : ISODate( "2105-06-24T06:28:16Z" ), "temp" : 12 }]) { "acknowledged" : true , "insertedIds" : [ ObjectId( "628d0c27231ed7a35f109c7f" ) ] } > db.weather.insertMany( [ { "metadata" : { "sensorId" : 5578, "type" : "temperature" }, "timestamp" : ISODate( "1969-05-18T00:00:00.000Z" ), "temp" : 12 }]) { "acknowledged" : true , "insertedIds" : [ ObjectId( "628d0c31231ed7a35f109c81" ) ] } > db.system.buckets.weather.find() { "_id" : ObjectId( "fed30f004d9e3cfa51f88755" ), "control" : { "version" : 1, "min" : { "_id" : ObjectId( "628d0c27231ed7a35f109c7f" ), "timestamp" : ISODate( "1969-05-18T00:00:00Z" ), "temp" : 12 }, "max" : { "_id" : ObjectId( "628d0c31231ed7a35f109c81" ), "timestamp" : ISODate( "2105-06-24T06:28:16Z" ), "temp" : 12 } }, "meta" : { "sensorId" : 5578, "type" : "temperature" }, "data" : { "_id" : { "0" : ObjectId( "628d0c27231ed7a35f109c7f" ), "1" : ObjectId( "628d0c31231ed7a35f109c81" ) }, "timestamp" : { "0" : ISODate( "2105-06-24T06:28:16Z" ), "1" : ISODate( "1969-05-18T00:00:00Z" ) }, "temp" : { "0" : 12, "1" : 12 } } } >
    • Execution Team 2022-05-30, Execution Team 2022-06-13
    • 76
    • None
    • 3
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      The time-series bucket _id field contains bucket min time, which is held as an ObjectId in unix epoch form. Inserting dates prior to Jan 1st 1970 (which aren't supported by our ObjectId timestamp representation) leads to a value that represents a future date. It is possible to insert 2 measurements one with a pre-1970 date and one with a future date that are incorrectly included in the same bucket.

              Assignee:
              Dan Larkin-York
              Reporter:
              James Wahlin
              Votes:
              0 Vote for this issue
              Watchers:
              10 Start watching this issue

                Created:
                Updated:
                Resolved: