Browse Source

Fix reset sequelize instance

pull/5340/merge
Chocobozzz 2 weeks ago
parent
commit
823c34c07f
No known key found for this signature in database GPG Key ID: 583A612D890159BE
8 changed files with 13 additions and 23 deletions
  1. +1
    -1
      server/controllers/api/video-channel.ts
  2. +1
    -1
      server/controllers/api/video-playlist.ts
  3. +1
    -1
      server/controllers/api/videos/update.ts
  4. +1
    -10
      server/helpers/database-utils.ts
  5. +2
    -2
      server/lib/activitypub/actors/updater.ts
  6. +3
    -3
      server/lib/activitypub/videos/updater.ts
  7. +3
    -4
      server/tests/api/live/live-fast-restream.ts
  8. +1
    -1
      server/tests/api/videos/single-server.ts

+ 1
- 1
server/controllers/api/video-channel.ts View File

@@ -310,7 +310,7 @@ async function updateVideoChannel (req: express.Request, res: express.Response)

// If the transaction is retried, sequelize will think the object has not changed
// So we need to restore the previous fields
resetSequelizeInstance(videoChannelInstance)
await resetSequelizeInstance(videoChannelInstance)

throw err
}


+ 1
- 1
server/controllers/api/video-playlist.ts View File

@@ -276,7 +276,7 @@ async function updateVideoPlaylist (req: express.Request, res: express.Response)

// If the transaction is retried, sequelize will think the object has not changed
// So we need to restore the previous fields
resetSequelizeInstance(videoPlaylistInstance)
await resetSequelizeInstance(videoPlaylistInstance)

throw err
}


+ 1
- 1
server/controllers/api/videos/update.ts View File

@@ -152,7 +152,7 @@ async function updateVideo (req: express.Request, res: express.Response) {
} catch (err) {
// If the transaction is retried, sequelize will think the object has not changed
// So we need to restore the previous fields
resetSequelizeInstance(videoFromReq)
await resetSequelizeInstance(videoFromReq)

throw err
} finally {


+ 1
- 10
server/helpers/database-utils.ts View File

@@ -70,16 +70,8 @@ function transactionRetryer <T> (func: (err: any, data: T) => any) {

// ---------------------------------------------------------------------------

function updateInstanceWithAnother <M, T extends U, U extends Model<M>> (instanceToUpdate: T, baseInstance: U) {
const obj = baseInstance.toJSON()

for (const key of Object.keys(obj)) {
instanceToUpdate[key] = obj[key]
}
}

function resetSequelizeInstance <T> (instance: Model<T>) {
instance.set(instance.previous())
return instance.reload()
}

function filterNonExistingModels <T extends { hasSameUniqueKeysThan (other: T): boolean }> (
@@ -113,7 +105,6 @@ export {
resetSequelizeInstance,
retryTransactionWrapper,
transactionRetryer,
updateInstanceWithAnother,
afterCommitIfTransaction,
filterNonExistingModels,
deleteAllModels,


+ 2
- 2
server/lib/activitypub/actors/updater.ts View File

@@ -52,11 +52,11 @@ export class APActorUpdater {
logger.info('Remote account %s updated', this.actorObject.url)
} catch (err) {
if (this.actor !== undefined) {
resetSequelizeInstance(this.actor)
await resetSequelizeInstance(this.actor)
}

if (this.accountOrChannel !== undefined) {
resetSequelizeInstance(this.accountOrChannel)
await resetSequelizeInstance(this.accountOrChannel)
}

// This is just a debug because we will retry the insert


+ 3
- 3
server/lib/activitypub/videos/updater.ts View File

@@ -88,7 +88,7 @@ export class APVideoUpdater extends APVideoAbstractBuilder {

return videoUpdated
} catch (err) {
this.catchUpdateError(err)
await this.catchUpdateError(err)
}
}

@@ -154,9 +154,9 @@ export class APVideoUpdater extends APVideoAbstractBuilder {
videoUpdated.VideoLive = null
}

private catchUpdateError (err: Error) {
private async catchUpdateError (err: Error) {
if (this.video !== undefined) {
resetSequelizeInstance(this.video)
await resetSequelizeInstance(this.video)
}

// This is just a debug because we will retry the insert


+ 3
- 4
server/tests/api/live/live-fast-restream.ts View File

@@ -2,11 +2,10 @@

import { expect } from 'chai'
import { wait } from '@shared/core-utils'
import { HttpStatusCode, LiveVideoCreate, VideoPrivacy } from '@shared/models'
import { LiveVideoCreate, VideoPrivacy } from '@shared/models'
import {
cleanupTests,
createSingleServer,
makeRawRequest,
PeerTubeServer,
setAccessTokensToServers,
setDefaultVideoChannel,
@@ -81,8 +80,8 @@ describe('Fast restream in live', function () {

try {
await server.live.getSegmentFile({ videoUUID: liveId, segment: 0, playlistNumber: 0 })
await makeRawRequest({ url: video.streamingPlaylists[0].playlistUrl, expectedStatus: HttpStatusCode.OK_200 })
await makeRawRequest({ url: video.streamingPlaylists[0].segmentsSha256Url, expectedStatus: HttpStatusCode.OK_200 })
await server.streamingPlaylists.get({ url: video.streamingPlaylists[0].playlistUrl })
await server.streamingPlaylists.getSegmentSha256({ url: video.streamingPlaylists[0].segmentsSha256Url })
} catch (err) {
// FIXME: try to debug error in CI "Unexpected end of JSON input"
console.error(err)


+ 1
- 1
server/tests/api/videos/single-server.ts View File

@@ -213,7 +213,7 @@ describe('Test a single server', function () {
})

it('Should upload 6 videos', async function () {
this.timeout(25000)
this.timeout(50000)

const videos = new Set([
'video_short.mp4', 'video_short.ogv', 'video_short.webm',


Loading…
Cancel
Save