Server: Fix video propagation with transcoding enabled

This commit is contained in:
Chocobozzz 2017-05-05 12:15:16 +02:00
parent fce897f326
commit 62326afb15
4 changed files with 26 additions and 13 deletions

View File

@ -379,6 +379,9 @@ function addVideo (req, res, videoFile, finalCallback) {
}, },
function sendToFriends (t, video, callback) { function sendToFriends (t, video, callback) {
// Let transcoding job send the video to friends because the videofile extension might change
if (constants.CONFIG.TRANSCODING.ENABLED === true) return callback(null, t)
video.toAddRemoteJSON(function (err, remoteVideo) { video.toAddRemoteJSON(function (err, remoteVideo) {
if (err) return callback(err) if (err) return callback(err)

View File

@ -2,6 +2,7 @@
const db = require('../../../initializers/database') const db = require('../../../initializers/database')
const logger = require('../../../helpers/logger') const logger = require('../../../helpers/logger')
const friends = require('../../../lib/friends')
const VideoTranscoderHandler = { const VideoTranscoderHandler = {
process, process,
@ -12,21 +13,29 @@ const VideoTranscoderHandler = {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
function process (data, callback) { function process (data, callback) {
db.Video.load(data.id, function (err, video) { db.Video.loadAndPopulateAuthorAndPodAndTags(data.id, function (err, video) {
if (err) return callback(err) if (err) return callback(err)
video.transcodeVideofile(callback) video.transcodeVideofile(function (err) {
return callback(err, video)
})
}) })
} }
function onError (err, jobId, callback) { function onError (err, jobId, video, callback) {
logger.error('Error when transcoding video file in job %d.', jobId, { error: err }) logger.error('Error when transcoding video file in job %d.', jobId, { error: err })
return callback() return callback()
} }
function onSuccess (data, jobId, callback) { function onSuccess (data, jobId, video, callback) {
logger.info('Job %d is a success.', jobId) logger.info('Job %d is a success.', jobId)
return callback()
video.toAddRemoteJSON(function (err, remoteVideo) {
if (err) return callback(err)
// Now we'll add the video's meta data to our friends
friends.addVideoToFriends(remoteVideo, null, callback)
})
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

View File

@ -76,31 +76,31 @@ function processJob (job, callback) {
return jobHandler.process(job.handlerInputData, function (err, result) { return jobHandler.process(job.handlerInputData, function (err, result) {
if (err) { if (err) {
logger.error('Error in job handler %s.', job.handlerName, { error: err }) logger.error('Error in job handler %s.', job.handlerName, { error: err })
return onJobError(jobHandler, job, callback) return onJobError(jobHandler, job, result, callback)
} }
return onJobSuccess(jobHandler, job, callback) return onJobSuccess(jobHandler, job, result, callback)
}) })
}) })
} }
function onJobError (jobHandler, job, callback) { function onJobError (jobHandler, job, jobResult, callback) {
job.state = constants.JOB_STATES.ERROR job.state = constants.JOB_STATES.ERROR
job.save().asCallback(function (err) { job.save().asCallback(function (err) {
if (err) return cannotSaveJobError(err, callback) if (err) return cannotSaveJobError(err, callback)
return jobHandler.onError(err, job.id, callback) return jobHandler.onError(err, job.id, jobResult, callback)
}) })
} }
function onJobSuccess (jobHandler, job, callback) { function onJobSuccess (jobHandler, job, jobResult, callback) {
job.state = constants.JOB_STATES.SUCCESS job.state = constants.JOB_STATES.SUCCESS
job.save().asCallback(function (err) { job.save().asCallback(function (err) {
if (err) return cannotSaveJobError(err, callback) if (err) return cannotSaveJobError(err, callback)
return jobHandler.onSuccess(err, job.id, callback) return jobHandler.onSuccess(err, job.id, jobResult, callback)
}) })
} }

View File

@ -76,6 +76,7 @@ describe('Test multiple pods', function () {
describe('Should upload the video and propagate on each pod', function () { describe('Should upload the video and propagate on each pod', function () {
it('Should upload the video on pod 1 and propagate on each pod', function (done) { it('Should upload the video on pod 1 and propagate on each pod', function (done) {
// Pod 1 has video transcoding activated
this.timeout(15000) this.timeout(15000)
series([ series([
@ -152,7 +153,7 @@ describe('Test multiple pods', function () {
}) })
it('Should upload the video on pod 2 and propagate on each pod', function (done) { it('Should upload the video on pod 2 and propagate on each pod', function (done) {
this.timeout(15000) this.timeout(30000)
series([ series([
function (next) { function (next) {
@ -169,7 +170,7 @@ describe('Test multiple pods', function () {
videosUtils.uploadVideo(servers[1].url, servers[1].accessToken, videoAttributes, next) videosUtils.uploadVideo(servers[1].url, servers[1].accessToken, videoAttributes, next)
}, },
function (next) { function (next) {
setTimeout(next, 11000) setTimeout(next, 22000)
}], }],
// All pods should have this video // All pods should have this video
function (err) { function (err) {