]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/controllers/api/videos.js
Server: fix update remote video infohash
[github/Chocobozzz/PeerTube.git] / server / controllers / api / videos.js
index 55d671f5b1a16fa932faf682fa0a5410ee368918..2c4af520e65f62ae2f1c98f4e90b131bbf18e45e 100644 (file)
@@ -259,6 +259,7 @@ function updateVideoRetryWrapper (req, res, next) {
 
 function updateVideo (req, res, finalCallback) {
   const videoInstance = res.locals.video
+  const videoFieldsSave = videoInstance.toJSON()
   const videoInfosToUpdate = req.body
 
   waterfall([
@@ -280,12 +281,13 @@ function updateVideo (req, res, finalCallback) {
     },
 
     function updateVideoIntoDB (t, tagInstances, callback) {
-      const options = { transaction: t }
+      const options = {
+        transaction: t
+      }
 
       if (videoInfosToUpdate.name) videoInstance.set('name', videoInfosToUpdate.name)
       if (videoInfosToUpdate.description) videoInstance.set('description', videoInfosToUpdate.description)
 
-      // Add tags association
       videoInstance.save(options).asCallback(function (err) {
         return callback(err, t, tagInstances)
       })
@@ -321,6 +323,14 @@ function updateVideo (req, res, finalCallback) {
       // Abort transaction?
       if (t) t.rollback()
 
+      // Force fields we want to update
+      // If the transaction is retried, sequelize will think the object has not changed
+      // So it will skip the SQL request, even if the last one was ROLLBACKed!
+      Object.keys(videoFieldsSave).forEach(function (key) {
+        const value = videoFieldsSave[key]
+        videoInstance.set(key, value)
+      })
+
       return finalCallback(err)
     }