Explorar el Código

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

correct startVersion calculation in loadAtVersion

GitOrigin-RevId: b81c30dcab90b137169a4bddef3c22f44a957f68
Brian Gough hace 1 año
padre
commit
c81cc4055e

+ 2 - 1
services/history-v1/storage/lib/chunk_store/index.js

@@ -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)
 }
 
 /**

+ 20 - 0
services/history-v1/test/acceptance/js/storage/chunk_store.test.js

@@ -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())
           })
         })