Merge pull request #26220 from overleaf/bg-history-redis-fix-loadAtVersion-startVersion

correct startVersion calculation in loadAtVersion

GitOrigin-RevId: b81c30dcab90b137169a4bddef3c22f44a957f68
This commit is contained in:
Brian Gough
2025-06-10 10:42:08 +01:00
committed by Copybot
parent 96a278f8ad
commit 9dd1d3bbb8
2 changed files with 22 additions and 1 deletions

View File

@@ -157,6 +157,7 @@ async function loadAtVersion(projectId, version, opts = {}) {
})
const rawHistory = await historyStore.loadRaw(projectId, chunkRecord.id)
const history = History.fromRaw(rawHistory)
const startVersion = chunkRecord.endVersion - history.countChanges()
if (!opts.persistedOnly) {
const nonPersistedChanges = await getChunkExtension(
@@ -167,7 +168,7 @@ async function loadAtVersion(projectId, version, opts = {}) {
}
await lazyLoadHistoryFiles(history, batchBlobStore)
return new Chunk(history, chunkRecord.endVersion - history.countChanges())
return new Chunk(history, startVersion)
}
/**

View File

@@ -498,6 +498,12 @@ describe('chunkStore', function () {
.getChanges()
.concat(queuedChanges)
expect(chunk.getChanges()).to.deep.equal(expectedChanges)
expect(chunk.getStartVersion()).to.equal(
thirdChunk.getStartVersion()
)
expect(chunk.getEndVersion()).to.equal(
thirdChunk.getEndVersion() + queuedChanges.length
)
})
it('includes the queued changes when getting the latest chunk by timestamp', async function () {
@@ -524,6 +530,10 @@ describe('chunkStore', function () {
)
const expectedChanges = secondChunk.getChanges()
expect(chunk.getChanges()).to.deep.equal(expectedChanges)
expect(chunk.getStartVersion()).to.equal(
secondChunk.getStartVersion()
)
expect(chunk.getEndVersion()).to.equal(secondChunk.getEndVersion())
})
it('includes the queued changes when getting the latest chunk by version', async function () {
@@ -535,6 +545,12 @@ describe('chunkStore', function () {
.getChanges()
.concat(queuedChanges)
expect(chunk.getChanges()).to.deep.equal(expectedChanges)
expect(chunk.getStartVersion()).to.equal(
thirdChunk.getStartVersion()
)
expect(chunk.getEndVersion()).to.equal(
thirdChunk.getEndVersion() + queuedChanges.length
)
})
it("doesn't include the queued changes when getting another chunk by version", async function () {
@@ -544,6 +560,10 @@ describe('chunkStore', function () {
)
const expectedChanges = secondChunk.getChanges()
expect(chunk.getChanges()).to.deep.equal(expectedChanges)
expect(chunk.getStartVersion()).to.equal(
secondChunk.getStartVersion()
)
expect(chunk.getEndVersion()).to.equal(secondChunk.getEndVersion())
})
})