X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fschedulers%2Fremove-dangling-resumable-uploads-scheduler.ts;h=61e93eafa89402d6508b3da15956ce7f2d210da4;hb=a2be43f5700460d3afdc194abc788690b79e66cd;hp=099fa56513e308554bc32e7445dc53c5e2ea4099;hpb=41fb13c330de629df2d23379209e79c7af0f2e9a;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/schedulers/remove-dangling-resumable-uploads-scheduler.ts b/server/lib/schedulers/remove-dangling-resumable-uploads-scheduler.ts index 099fa5651..61e93eafa 100644 --- a/server/lib/schedulers/remove-dangling-resumable-uploads-scheduler.ts +++ b/server/lib/schedulers/remove-dangling-resumable-uploads-scheduler.ts @@ -1,9 +1,7 @@ -import { map } from 'bluebird' -import { readdir, remove, stat } from 'fs-extra' + import { logger, loggerTagsFactory } from '@server/helpers/logger' -import { getResumableUploadPath } from '@server/helpers/upload' import { SCHEDULER_INTERVALS_MS } from '@server/initializers/constants' -import { METAFILE_EXTNAME } from '@uploadx/core' +import { uploadx } from '../uploadx' import { AbstractScheduler } from './abstract-scheduler' const lTags = loggerTagsFactory('scheduler', 'resumable-upload', 'cleaner') @@ -13,7 +11,7 @@ export class RemoveDanglingResumableUploadsScheduler extends AbstractScheduler { private static instance: AbstractScheduler private lastExecutionTimeMs: number - protected schedulerIntervalMs = SCHEDULER_INTERVALS_MS.removeDanglingResumableUploads + protected schedulerIntervalMs = SCHEDULER_INTERVALS_MS.REMOVE_DANGLING_RESUMABLE_UPLOADS private constructor () { super() @@ -22,36 +20,17 @@ export class RemoveDanglingResumableUploadsScheduler extends AbstractScheduler { } protected async internalExecute () { - const path = getResumableUploadPath() - const files = await readdir(path) - - const metafiles = files.filter(f => f.endsWith(METAFILE_EXTNAME)) + logger.debug('Removing dangling resumable uploads', lTags()) - if (metafiles.length === 0) return - - logger.debug('Reading resumable video upload folder %s with %d files', path, metafiles.length, lTags()) + const now = new Date().getTime() try { - await map(metafiles, metafile => { - return this.deleteIfOlderThan(metafile, this.lastExecutionTimeMs) - }, { concurrency: 5 }) + // Remove files that were not updated since the last execution + await uploadx.storage.purge(now - this.lastExecutionTimeMs) } catch (error) { logger.error('Failed to handle file during resumable video upload folder cleanup', { error, ...lTags() }) } finally { - this.lastExecutionTimeMs = new Date().getTime() - } - } - - private async deleteIfOlderThan (metafile: string, olderThan: number) { - const metafilePath = getResumableUploadPath(metafile) - const statResult = await stat(metafilePath) - - // Delete uploads that started since a long time - if (statResult.ctimeMs < olderThan) { - await remove(metafilePath) - - const datafile = metafilePath.replace(new RegExp(`${METAFILE_EXTNAME}$`), '') - await remove(datafile) + this.lastExecutionTimeMs = now } }