diff --git a/services/track-changes/app/coffee/MongoManager.coffee b/services/track-changes/app/coffee/MongoManager.coffee index ff3dea4cab..13df864c7b 100644 --- a/services/track-changes/app/coffee/MongoManager.coffee +++ b/services/track-changes/app/coffee/MongoManager.coffee @@ -136,9 +136,7 @@ module.exports = MongoManager = # For finding all updates that go into a diff for a doc db.docHistory.ensureIndex { doc_id: 1, v: 1 }, { background: true } # For finding all updates that affect a project - db.docHistory.ensureIndex { project_id: 1, "meta.end_ts": 1 }, { background: true } - # For finding all packs that affect a project (use a sparse index so only packs are included) - db.docHistory.ensureIndex { project_id: 1, "pack.0.meta.end_ts": 1, "meta.end_ts": 1}, { background: true, sparse: true } + db.docHistory.ensureIndex { project_id: 1, "meta.end_ts": 1, "meta.start_ts": -1 }, { background: true } # For finding updates that don't yet have a project_id and need it inserting db.docHistory.ensureIndex { doc_id: 1, project_id: 1 }, { background: true } # For finding project meta-data diff --git a/services/track-changes/app/coffee/PackManager.coffee b/services/track-changes/app/coffee/PackManager.coffee index f328cc0939..e838c8b001 100644 --- a/services/track-changes/app/coffee/PackManager.coffee +++ b/services/track-changes/app/coffee/PackManager.coffee @@ -178,20 +178,25 @@ module.exports = PackManager = .find(tailQuery, projection) .sort(sort) - # now find any packs that overlap with the time window + # now find any packs that overlap with the time window from outside + # cutoff before + # --|-----wanted-range--|------------------ time=> + # |-------------|pack(end_ts) + # + # these were not picked up by the original query because + # end_ts>before but the beginning of the pack may be in the time range overlapQuery = _.clone(query) if before? && cutoff? overlapQuery['meta.end_ts'] = {"$gte": before} - overlapQuery['pack.0.meta.end_ts'] = {"$lte": before } + overlapQuery['meta.start_ts'] = {"$lte": before } else if before? && not cutoff? overlapQuery['meta.end_ts'] = {"$gte": before} - overlapQuery['pack.0.meta.end_ts'] = {"$lte": before } + overlapQuery['meta.start_ts'] = {"$lte": before } else if not before? && cutoff? - overlapQuery['meta.end_ts'] = {"$gte": cutoff} - overlapQuery['pack.0.meta.end_ts'] = {"$gte": 0 } + overlapQuery['meta.end_ts'] = {"$gte": cutoff} # we already have these?? else if not before? && not cutoff? - overlapQuery['meta.end_ts'] = {"$gte": 0 } - overlapQuery['pack.0.meta.end_ts'] = {"$gte": 0 } + overlapQuery['meta.end_ts'] = {"$gte": 0 } # shouldn't happen?? + overlap = collection .find(overlapQuery, projection) .sort(sort)