Fix P2P with object storage

This commit is contained in:
Chocobozzz 2022-12-30 15:05:14 +01:00
parent fc83f323a8
commit 54db8e3d5c
No known key found for this signature in database
GPG key ID: 583A612D890159BE
5 changed files with 29 additions and 2 deletions

View file

@ -483,12 +483,12 @@ class LiveManager {
playlist.p2pMediaLoaderPeerVersion = P2P_MEDIA_LOADER_PEER_VERSION
playlist.type = VideoStreamingPlaylistType.HLS
playlist.assignP2PMediaLoaderInfoHashes(video, allResolutions)
playlist.storage = CONFIG.OBJECT_STORAGE.ENABLED
? VideoStorage.OBJECT_STORAGE
: VideoStorage.FILE_SYSTEM
playlist.assignP2PMediaLoaderInfoHashes(video, allResolutions)
return playlist.save()
}

View file

@ -262,6 +262,8 @@ class MuxingSession extends EventEmitter {
const url = await storeHLSFileFromFilename(this.streamingPlaylist, this.streamingPlaylist.playlistFilename)
this.streamingPlaylist.playlistUrl = url
this.streamingPlaylist.assignP2PMediaLoaderInfoHashes(this.videoLive.Video, this.allResolutions)
await this.streamingPlaylist.save()
} catch (err) {
logger.error('Cannot upload live master file to object storage.', { err, ...this.lTags() })

View file

@ -6,6 +6,7 @@ import { join } from 'path'
import { LiveVideo, VideoStreamingPlaylistType } from '@shared/models'
import { ObjectStorageCommand, PeerTubeServer } from '@shared/server-commands'
import { checkLiveSegmentHash, checkResolutionsInMasterPlaylist } from './streaming-playlists'
import { sha1 } from '@shared/extra-utils'
async function checkLiveCleanup (options: {
server: PeerTubeServer
@ -101,6 +102,13 @@ async function testVideoResolutions (options: {
segmentName,
hlsPlaylist
})
if (originServer.internalServerNumber === server.internalServerNumber) {
const infohash = sha1(`${2 + hlsPlaylist.playlistUrl}+V${i}`)
const dbInfohashes = await originServer.sql.getPlaylistInfohash(hlsPlaylist.id)
expect(dbInfohashes).to.include(infohash)
}
}
}
}

View file

@ -40,6 +40,8 @@ async function checkSegmentHash (options: {
expect(sha256(segmentBody)).to.equal(shaBody[videoName][range])
}
// ---------------------------------------------------------------------------
async function checkLiveSegmentHash (options: {
server: PeerTubeServer
baseUrlSegment: string
@ -56,6 +58,8 @@ async function checkLiveSegmentHash (options: {
expect(sha256(segmentBody)).to.equal(shaBody[segmentName])
}
// ---------------------------------------------------------------------------
async function checkResolutionsInMasterPlaylist (options: {
server: PeerTubeServer
playlistUrl: string

View file

@ -86,6 +86,8 @@ export class SQLCommand extends AbstractCommand {
return seq.query(query, options)
}
// ---------------------------------------------------------------------------
setPluginField (pluginName: string, field: string, value: string) {
const seq = this.getSequelize()
@ -102,6 +104,17 @@ export class SQLCommand extends AbstractCommand {
return this.setPluginField(pluginName, 'latestVersion', newVersion)
}
// ---------------------------------------------------------------------------
async getPlaylistInfohash (playlistId: number) {
const result = await this.selectQuery('SELECT "p2pMediaLoaderInfohashes" FROM "videoStreamingPlaylist" WHERE id = ' + playlistId)
if (!result || result.length === 0) return []
return result[0].p2pMediaLoaderInfohashes
}
// ---------------------------------------------------------------------------
setActorFollowScores (newScore: number) {
const seq = this.getSequelize()