first commit

This commit is contained in:
2025-04-24 13:11:28 +08:00
commit ff9c54d5e4
5960 changed files with 834111 additions and 0 deletions

View File

@@ -0,0 +1,82 @@
const crypto = require('node:crypto')
const benny = require('benny')
const { Blob } = require('overleaf-editor-core')
const mongoBackend = require('../storage/lib/blob_store/mongo')
const postgresBackend = require('../storage/lib/blob_store/postgres')
const cleanup = require('../test/acceptance/js/storage/support/cleanup')
const MONGO_PROJECT_ID = '637386deb4ce3c62acd3848e'
const POSTGRES_PROJECT_ID = '123'
async function run() {
for (const blobCount of [1, 10, 100, 1000, 10000, 100000, 500000]) {
await cleanup.everything()
const blobs = createBlobs(blobCount)
await insertBlobs(blobs)
const randomHashes = getRandomHashes(blobs, 100)
await benny.suite(
`Read a blob in a project with ${blobCount} blobs`,
benny.add('Mongo backend', async () => {
await mongoBackend.findBlob(MONGO_PROJECT_ID, randomHashes[0])
}),
benny.add('Postgres backend', async () => {
await postgresBackend.findBlob(POSTGRES_PROJECT_ID, randomHashes[0])
}),
benny.cycle(),
benny.complete()
)
await benny.suite(
`Read 100 blobs in a project with ${blobCount} blobs`,
benny.add('Mongo backend', async () => {
await mongoBackend.findBlobs(MONGO_PROJECT_ID, randomHashes)
}),
benny.add('Postgres backend', async () => {
await postgresBackend.findBlobs(POSTGRES_PROJECT_ID, randomHashes)
}),
benny.cycle(),
benny.complete()
)
await benny.suite(
`Insert a blob in a project with ${blobCount} blobs`,
benny.add('Mongo backend', async () => {
const [newBlob] = createBlobs(1)
await mongoBackend.insertBlob(MONGO_PROJECT_ID, newBlob)
}),
benny.add('Postgres backend', async () => {
const [newBlob] = createBlobs(1)
await postgresBackend.insertBlob(POSTGRES_PROJECT_ID, newBlob)
}),
benny.cycle(),
benny.complete()
)
}
}
function createBlobs(blobCount) {
const blobs = []
for (let i = 0; i < blobCount; i++) {
const hash = crypto.randomBytes(20).toString('hex')
blobs.push(new Blob(hash, 42, 42))
}
return blobs
}
async function insertBlobs(blobs) {
for (const blob of blobs) {
await Promise.all([
mongoBackend.insertBlob(MONGO_PROJECT_ID, blob),
postgresBackend.insertBlob(POSTGRES_PROJECT_ID, blob),
])
}
}
function getRandomHashes(blobs, count) {
const hashes = []
for (let i = 0; i < count; i++) {
const index = Math.floor(Math.random() * blobs.length)
hashes.push(blobs[index].getHash())
}
return hashes
}
module.exports = run

View File

@@ -0,0 +1,17 @@
const testSetup = require('../test/setup')
const blobStoreSuite = require('./blob_store')
async function main() {
await testSetup.setupPostgresDatabase()
await testSetup.createGcsBuckets()
await blobStoreSuite()
}
main()
.then(() => {
process.exit(0)
})
.catch(err => {
console.error(err)
process.exit(1)
})