فهرست منبع

Merge pull request #17926 from overleaf/jpa-batched-update-sorting

[web] batchedUpdate: use explicit sorting to find first record to update

GitOrigin-RevId: 6f57b92a4e5907f307618bd98642b4874018e9fa
Jakob Ackermann 2 سال پیش
والد
کامیت
3df0fe82ce
2فایلهای تغییر یافته به همراه39 افزوده شده و 0 حذف شده
  1. 1 0
      services/web/scripts/helpers/batchedUpdate.js
  2. 38 0
      services/web/test/acceptance/src/BatchedUpdateTests.js

+ 1 - 0
services/web/scripts/helpers/batchedUpdate.js

@@ -107,6 +107,7 @@ async function getIdEdgePast(collection) {
   const [first] = await collection
     .find({})
     .project({ _id: 1 })
+    .sort({ _id: 1 })
     .limit(1)
     .toArray()
   if (!first) return null

+ 38 - 0
services/web/test/acceptance/src/BatchedUpdateTests.js

@@ -0,0 +1,38 @@
+const { spawnSync } = require('child_process')
+const { expect } = require('chai')
+const { db, ObjectId } = require('../../../app/src/infrastructure/mongodb')
+
+describe('BatchedUpdateTests', function () {
+  it('can handle non linear insert order', async function () {
+    await db.systemmessages.insertOne({
+      content: '1',
+      _id: new ObjectId('500000000000000000000000'),
+    })
+    await db.systemmessages.insertOne({
+      content: '2',
+      _id: new ObjectId('400000000000000000000000'),
+    })
+    await db.systemmessages.insertOne({
+      content: '3',
+      _id: new ObjectId('600000000000000000000000'),
+    })
+    await db.systemmessages.insertOne({
+      content: '4',
+      _id: new ObjectId('300000000000000000000000'),
+    })
+
+    spawnSync(process.argv0, [
+      '-e',
+      'require("./scripts/helpers/batchedUpdate").batchedUpdateWithResultHandling("systemmessages", { content: { $ne: "42" }}, { $set: { content: "42" } })',
+    ])
+
+    await expect(
+      db.systemmessages.find({}).project({ content: 1, _id: 0 }).toArray()
+    ).to.eventually.deep.equal([
+      { content: '42' },
+      { content: '42' },
+      { content: '42' },
+      { content: '42' },
+    ])
+  })
+})