Avoid update remote runner error
This commit is contained in:
parent
d959b763f0
commit
d874522774
4 changed files with 57 additions and 49 deletions
|
@ -4,12 +4,12 @@ import { proxifyHLS, proxifyWebVideoFile } from '@server/lib/object-storage'
|
|||
import { VideoPathManager } from '@server/lib/video-path-manager'
|
||||
import { getStudioTaskFilePath } from '@server/lib/video-studio'
|
||||
import { apiRateLimiter, asyncMiddleware } from '@server/middlewares'
|
||||
import { jobOfRunnerGetValidator } from '@server/middlewares/validators/runners'
|
||||
import { jobOfRunnerGetValidatorFactory } from '@server/middlewares/validators/runners'
|
||||
import {
|
||||
runnerJobGetVideoStudioTaskFileValidator,
|
||||
runnerJobGetVideoTranscodingFileValidator
|
||||
} from '@server/middlewares/validators/runners/job-files'
|
||||
import { VideoStorage } from '@shared/models'
|
||||
import { RunnerJobState, VideoStorage } from '@shared/models'
|
||||
|
||||
const lTags = loggerTagsFactory('api', 'runner')
|
||||
|
||||
|
@ -17,21 +17,21 @@ const runnerJobFilesRouter = express.Router()
|
|||
|
||||
runnerJobFilesRouter.post('/jobs/:jobUUID/files/videos/:videoId/max-quality',
|
||||
apiRateLimiter,
|
||||
asyncMiddleware(jobOfRunnerGetValidator),
|
||||
asyncMiddleware(jobOfRunnerGetValidatorFactory([ RunnerJobState.PROCESSING ])),
|
||||
asyncMiddleware(runnerJobGetVideoTranscodingFileValidator),
|
||||
asyncMiddleware(getMaxQualityVideoFile)
|
||||
)
|
||||
|
||||
runnerJobFilesRouter.post('/jobs/:jobUUID/files/videos/:videoId/previews/max-quality',
|
||||
apiRateLimiter,
|
||||
asyncMiddleware(jobOfRunnerGetValidator),
|
||||
asyncMiddleware(jobOfRunnerGetValidatorFactory([ RunnerJobState.PROCESSING ])),
|
||||
asyncMiddleware(runnerJobGetVideoTranscodingFileValidator),
|
||||
getMaxQualityVideoPreview
|
||||
)
|
||||
|
||||
runnerJobFilesRouter.post('/jobs/:jobUUID/files/videos/:videoId/studio/task-files/:filename',
|
||||
apiRateLimiter,
|
||||
asyncMiddleware(jobOfRunnerGetValidator),
|
||||
asyncMiddleware(jobOfRunnerGetValidatorFactory([ RunnerJobState.PROCESSING ])),
|
||||
asyncMiddleware(runnerJobGetVideoTranscodingFileValidator),
|
||||
runnerJobGetVideoStudioTaskFileValidator,
|
||||
getVideoStudioTaskFile
|
||||
|
|
|
@ -22,7 +22,7 @@ import {
|
|||
cancelRunnerJobValidator,
|
||||
errorRunnerJobValidator,
|
||||
getRunnerFromTokenValidator,
|
||||
jobOfRunnerGetValidator,
|
||||
jobOfRunnerGetValidatorFactory,
|
||||
runnerJobGetValidator,
|
||||
successRunnerJobValidator,
|
||||
updateRunnerJobValidator
|
||||
|
@ -85,7 +85,7 @@ runnerJobsRouter.post('/jobs/:jobUUID/accept',
|
|||
|
||||
runnerJobsRouter.post('/jobs/:jobUUID/abort',
|
||||
apiRateLimiter,
|
||||
asyncMiddleware(jobOfRunnerGetValidator),
|
||||
asyncMiddleware(jobOfRunnerGetValidatorFactory([ RunnerJobState.PROCESSING ])),
|
||||
abortRunnerJobValidator,
|
||||
asyncMiddleware(abortRunnerJob)
|
||||
)
|
||||
|
@ -93,13 +93,13 @@ runnerJobsRouter.post('/jobs/:jobUUID/abort',
|
|||
runnerJobsRouter.post('/jobs/:jobUUID/update',
|
||||
runnerJobUpdateVideoFiles,
|
||||
apiRateLimiter, // Has to be after multer middleware to parse runner token
|
||||
asyncMiddleware(jobOfRunnerGetValidator),
|
||||
asyncMiddleware(jobOfRunnerGetValidatorFactory([ RunnerJobState.PROCESSING, RunnerJobState.COMPLETING, RunnerJobState.COMPLETED ])),
|
||||
updateRunnerJobValidator,
|
||||
asyncMiddleware(updateRunnerJobController)
|
||||
)
|
||||
|
||||
runnerJobsRouter.post('/jobs/:jobUUID/error',
|
||||
asyncMiddleware(jobOfRunnerGetValidator),
|
||||
asyncMiddleware(jobOfRunnerGetValidatorFactory([ RunnerJobState.PROCESSING ])),
|
||||
errorRunnerJobValidator,
|
||||
asyncMiddleware(errorRunnerJob)
|
||||
)
|
||||
|
@ -107,7 +107,7 @@ runnerJobsRouter.post('/jobs/:jobUUID/error',
|
|||
runnerJobsRouter.post('/jobs/:jobUUID/success',
|
||||
postRunnerJobSuccessVideoFiles,
|
||||
apiRateLimiter, // Has to be after multer middleware to parse runner token
|
||||
asyncMiddleware(jobOfRunnerGetValidator),
|
||||
asyncMiddleware(jobOfRunnerGetValidatorFactory([ RunnerJobState.PROCESSING ])),
|
||||
successRunnerJobValidator,
|
||||
asyncMiddleware(postRunnerJobSuccess)
|
||||
)
|
||||
|
@ -272,6 +272,10 @@ async function updateRunnerJobController (req: express.Request, res: express.Res
|
|||
const runner = runnerJob.Runner
|
||||
const body: RunnerJobUpdateBody = req.body
|
||||
|
||||
if (runnerJob.state === RunnerJobState.COMPLETING || runnerJob.state === RunnerJobState.COMPLETED) {
|
||||
return res.sendStatus(HttpStatusCode.NO_CONTENT_204)
|
||||
}
|
||||
|
||||
const payloadBuilder = jobUpdateBuilders[runnerJob.type]
|
||||
const updatePayload = payloadBuilder
|
||||
? payloadBuilder(body.payload, req.files as UploadFiles)
|
||||
|
|
|
@ -159,44 +159,46 @@ export const runnerJobGetValidator = [
|
|||
}
|
||||
]
|
||||
|
||||
export const jobOfRunnerGetValidator = [
|
||||
param('jobUUID').custom(isUUIDValid),
|
||||
export function jobOfRunnerGetValidatorFactory (allowedStates: RunnerJobState[]) {
|
||||
return [
|
||||
param('jobUUID').custom(isUUIDValid),
|
||||
|
||||
body('runnerToken').custom(isRunnerTokenValid),
|
||||
body('jobToken').custom(isRunnerJobTokenValid),
|
||||
body('runnerToken').custom(isRunnerTokenValid),
|
||||
body('jobToken').custom(isRunnerJobTokenValid),
|
||||
|
||||
async (req: express.Request, res: express.Response, next: express.NextFunction) => {
|
||||
if (areValidationErrors(req, res, { tags })) return cleanUpReqFiles(req)
|
||||
async (req: express.Request, res: express.Response, next: express.NextFunction) => {
|
||||
if (areValidationErrors(req, res, { tags })) return cleanUpReqFiles(req)
|
||||
|
||||
const runnerJob = await RunnerJobModel.loadByRunnerAndJobTokensWithRunner({
|
||||
uuid: req.params.jobUUID,
|
||||
runnerToken: req.body.runnerToken,
|
||||
jobToken: req.body.jobToken
|
||||
})
|
||||
|
||||
if (!runnerJob) {
|
||||
cleanUpReqFiles(req)
|
||||
|
||||
return res.fail({
|
||||
status: HttpStatusCode.NOT_FOUND_404,
|
||||
message: 'Unknown runner job',
|
||||
tags
|
||||
const runnerJob = await RunnerJobModel.loadByRunnerAndJobTokensWithRunner({
|
||||
uuid: req.params.jobUUID,
|
||||
runnerToken: req.body.runnerToken,
|
||||
jobToken: req.body.jobToken
|
||||
})
|
||||
|
||||
if (!runnerJob) {
|
||||
cleanUpReqFiles(req)
|
||||
|
||||
return res.fail({
|
||||
status: HttpStatusCode.NOT_FOUND_404,
|
||||
message: 'Unknown runner job',
|
||||
tags
|
||||
})
|
||||
}
|
||||
|
||||
if (!allowedStates.includes(runnerJob.state)) {
|
||||
cleanUpReqFiles(req)
|
||||
|
||||
return res.fail({
|
||||
status: HttpStatusCode.BAD_REQUEST_400,
|
||||
type: ServerErrorCode.RUNNER_JOB_NOT_IN_PROCESSING_STATE,
|
||||
message: 'Job is not in "processing" state',
|
||||
tags
|
||||
})
|
||||
}
|
||||
|
||||
res.locals.runnerJob = runnerJob
|
||||
|
||||
return next()
|
||||
}
|
||||
|
||||
if (runnerJob.state !== RunnerJobState.PROCESSING) {
|
||||
cleanUpReqFiles(req)
|
||||
|
||||
return res.fail({
|
||||
status: HttpStatusCode.BAD_REQUEST_400,
|
||||
type: ServerErrorCode.RUNNER_JOB_NOT_IN_PROCESSING_STATE,
|
||||
message: 'Job is not in "processing" state',
|
||||
tags
|
||||
})
|
||||
}
|
||||
|
||||
res.locals.runnerJob = runnerJob
|
||||
|
||||
return next()
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ describe('Test managing runners', function () {
|
|||
let completedJobToken: string
|
||||
let completedJobUUID: string
|
||||
|
||||
let cancelledJobToken: string
|
||||
let cancelledJobUUID: string
|
||||
|
||||
before(async function () {
|
||||
|
@ -86,6 +87,7 @@ describe('Test managing runners', function () {
|
|||
|
||||
{
|
||||
const { job } = await server.runnerJobs.autoAccept({ runnerToken })
|
||||
cancelledJobToken = job.jobToken
|
||||
cancelledJobUUID = job.uuid
|
||||
await server.runnerJobs.cancelByAdmin({ jobUUID: cancelledJobUUID })
|
||||
}
|
||||
|
@ -639,10 +641,10 @@ describe('Test managing runners', function () {
|
|||
|
||||
it('Should fail with a job not in processing state', async function () {
|
||||
await server.runnerJobs.update({
|
||||
jobUUID: completedJobUUID,
|
||||
jobToken: completedJobToken,
|
||||
jobUUID: cancelledJobUUID,
|
||||
jobToken: cancelledJobToken,
|
||||
runnerToken,
|
||||
expectedStatus: HttpStatusCode.BAD_REQUEST_400
|
||||
expectedStatus: HttpStatusCode.NOT_FOUND_404
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue