Add infohash cache
This commit is contained in:
parent
562724a1ed
commit
35f28e94c7
|
@ -48,7 +48,7 @@ const trackerServer = new TrackerServer({
|
||||||
try {
|
try {
|
||||||
if (CONFIG.TRACKER.PRIVATE === false) return cb()
|
if (CONFIG.TRACKER.PRIVATE === false) return cb()
|
||||||
|
|
||||||
const videoFileExists = await VideoFileModel.doesInfohashExist(infoHash)
|
const videoFileExists = await VideoFileModel.doesInfohashExistCached(infoHash)
|
||||||
if (videoFileExists === true) return cb()
|
if (videoFileExists === true) return cb()
|
||||||
|
|
||||||
const playlistExists = await VideoStreamingPlaylistModel.doesInfohashExist(infoHash)
|
const playlistExists = await VideoStreamingPlaylistModel.doesInfohashExist(infoHash)
|
||||||
|
|
|
@ -40,7 +40,7 @@ const getServerActor = memoizee(async function () {
|
||||||
actor.Account = application.Account
|
actor.Account = application.Account
|
||||||
|
|
||||||
return actor
|
return actor
|
||||||
})
|
}, { promise: true })
|
||||||
|
|
||||||
function generateVideoImportTmpPath (target: string | ParseTorrent) {
|
function generateVideoImportTmpPath (target: string | ParseTorrent) {
|
||||||
const id = typeof target === 'string' ? target : target.infoHash
|
const id = typeof target === 'string' ? target : target.infoHash
|
||||||
|
|
|
@ -572,7 +572,12 @@ const HLS_STREAMING_PLAYLIST_DIRECTORY = join(CONFIG.STORAGE.STREAMING_PLAYLISTS
|
||||||
const HLS_REDUNDANCY_DIRECTORY = join(CONFIG.STORAGE.REDUNDANCY_DIR, 'hls')
|
const HLS_REDUNDANCY_DIRECTORY = join(CONFIG.STORAGE.REDUNDANCY_DIR, 'hls')
|
||||||
|
|
||||||
const MEMOIZE_TTL = {
|
const MEMOIZE_TTL = {
|
||||||
OVERVIEWS_SAMPLE: 1000 * 3600 * 4 // 4 hours
|
OVERVIEWS_SAMPLE: 1000 * 3600 * 4, // 4 hours
|
||||||
|
INFO_HASH_EXISTS: 1000 * 3600 * 12 // 12 hours
|
||||||
|
}
|
||||||
|
|
||||||
|
const MEMOIZE_LENGTH = {
|
||||||
|
INFO_HASH_EXISTS: 200
|
||||||
}
|
}
|
||||||
|
|
||||||
const QUEUE_CONCURRENCY = {
|
const QUEUE_CONCURRENCY = {
|
||||||
|
@ -728,6 +733,7 @@ export {
|
||||||
ACTIVITY_PUB_ACTOR_TYPES,
|
ACTIVITY_PUB_ACTOR_TYPES,
|
||||||
THUMBNAILS_SIZE,
|
THUMBNAILS_SIZE,
|
||||||
VIDEO_CATEGORIES,
|
VIDEO_CATEGORIES,
|
||||||
|
MEMOIZE_LENGTH,
|
||||||
VIDEO_LANGUAGES,
|
VIDEO_LANGUAGES,
|
||||||
VIDEO_PRIVACIES,
|
VIDEO_PRIVACIES,
|
||||||
VIDEO_LICENCES,
|
VIDEO_LICENCES,
|
||||||
|
|
|
@ -24,9 +24,10 @@ import { VideoModel } from './video'
|
||||||
import { VideoRedundancyModel } from '../redundancy/video-redundancy'
|
import { VideoRedundancyModel } from '../redundancy/video-redundancy'
|
||||||
import { VideoStreamingPlaylistModel } from './video-streaming-playlist'
|
import { VideoStreamingPlaylistModel } from './video-streaming-playlist'
|
||||||
import { FindOptions, Op, QueryTypes, Transaction } from 'sequelize'
|
import { FindOptions, Op, QueryTypes, Transaction } from 'sequelize'
|
||||||
import { MIMETYPES } from '../../initializers/constants'
|
import { MIMETYPES, MEMOIZE_LENGTH, MEMOIZE_TTL } from '../../initializers/constants'
|
||||||
import { MVideoFile, MVideoFileStreamingPlaylistVideo, MVideoFileVideo } from '../../typings/models/video/video-file'
|
import { MVideoFile, MVideoFileStreamingPlaylistVideo, MVideoFileVideo } from '../../typings/models/video/video-file'
|
||||||
import { MStreamingPlaylistVideo, MVideo } from '@server/typings/models'
|
import { MStreamingPlaylistVideo, MVideo } from '@server/typings/models'
|
||||||
|
import * as memoizee from 'memoizee'
|
||||||
|
|
||||||
@Table({
|
@Table({
|
||||||
tableName: 'videoFile',
|
tableName: 'videoFile',
|
||||||
|
@ -138,6 +139,12 @@ export class VideoFileModel extends Model<VideoFileModel> {
|
||||||
})
|
})
|
||||||
RedundancyVideos: VideoRedundancyModel[]
|
RedundancyVideos: VideoRedundancyModel[]
|
||||||
|
|
||||||
|
static doesInfohashExistCached = memoizee(VideoFileModel.doesInfohashExist, {
|
||||||
|
promise: true,
|
||||||
|
max: MEMOIZE_LENGTH.INFO_HASH_EXISTS,
|
||||||
|
maxAge: MEMOIZE_TTL.INFO_HASH_EXISTS
|
||||||
|
})
|
||||||
|
|
||||||
static doesInfohashExist (infoHash: string) {
|
static doesInfohashExist (infoHash: string) {
|
||||||
const query = 'SELECT 1 FROM "videoFile" WHERE "infoHash" = $infoHash LIMIT 1'
|
const query = 'SELECT 1 FROM "videoFile" WHERE "infoHash" = $infoHash LIMIT 1'
|
||||||
const options = {
|
const options = {
|
||||||
|
|
|
@ -5,7 +5,14 @@ import { VideoModel } from './video'
|
||||||
import { VideoRedundancyModel } from '../redundancy/video-redundancy'
|
import { VideoRedundancyModel } from '../redundancy/video-redundancy'
|
||||||
import { VideoStreamingPlaylistType } from '../../../shared/models/videos/video-streaming-playlist.type'
|
import { VideoStreamingPlaylistType } from '../../../shared/models/videos/video-streaming-playlist.type'
|
||||||
import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc'
|
import { isActivityPubUrlValid } from '../../helpers/custom-validators/activitypub/misc'
|
||||||
import { CONSTRAINTS_FIELDS, P2P_MEDIA_LOADER_PEER_VERSION, STATIC_DOWNLOAD_PATHS, STATIC_PATHS } from '../../initializers/constants'
|
import {
|
||||||
|
CONSTRAINTS_FIELDS,
|
||||||
|
MEMOIZE_LENGTH,
|
||||||
|
MEMOIZE_TTL,
|
||||||
|
P2P_MEDIA_LOADER_PEER_VERSION,
|
||||||
|
STATIC_DOWNLOAD_PATHS,
|
||||||
|
STATIC_PATHS
|
||||||
|
} from '../../initializers/constants'
|
||||||
import { join } from 'path'
|
import { join } from 'path'
|
||||||
import { sha1 } from '../../helpers/core-utils'
|
import { sha1 } from '../../helpers/core-utils'
|
||||||
import { isArrayOf } from '../../helpers/custom-validators/misc'
|
import { isArrayOf } from '../../helpers/custom-validators/misc'
|
||||||
|
@ -13,6 +20,7 @@ import { Op, QueryTypes } from 'sequelize'
|
||||||
import { MStreamingPlaylist, MVideoFile } from '@server/typings/models'
|
import { MStreamingPlaylist, MVideoFile } from '@server/typings/models'
|
||||||
import { VideoFileModel } from '@server/models/video/video-file'
|
import { VideoFileModel } from '@server/models/video/video-file'
|
||||||
import { getTorrentFileName, getVideoFilename } from '@server/lib/video-paths'
|
import { getTorrentFileName, getVideoFilename } from '@server/lib/video-paths'
|
||||||
|
import * as memoizee from 'memoizee'
|
||||||
|
|
||||||
@Table({
|
@Table({
|
||||||
tableName: 'videoStreamingPlaylist',
|
tableName: 'videoStreamingPlaylist',
|
||||||
|
@ -89,6 +97,12 @@ export class VideoStreamingPlaylistModel extends Model<VideoStreamingPlaylistMod
|
||||||
})
|
})
|
||||||
RedundancyVideos: VideoRedundancyModel[]
|
RedundancyVideos: VideoRedundancyModel[]
|
||||||
|
|
||||||
|
static doesInfohashExistCached = memoizee(VideoStreamingPlaylistModel.doesInfohashExist, {
|
||||||
|
promise: true,
|
||||||
|
max: MEMOIZE_LENGTH.INFO_HASH_EXISTS,
|
||||||
|
maxAge: MEMOIZE_TTL.INFO_HASH_EXISTS
|
||||||
|
})
|
||||||
|
|
||||||
static doesInfohashExist (infoHash: string) {
|
static doesInfohashExist (infoHash: string) {
|
||||||
const query = 'SELECT 1 FROM "videoStreamingPlaylist" WHERE $infoHash = ANY("p2pMediaLoaderInfohashes") LIMIT 1'
|
const query = 'SELECT 1 FROM "videoStreamingPlaylist" WHERE $infoHash = ANY("p2pMediaLoaderInfohashes") LIMIT 1'
|
||||||
const options = {
|
const options = {
|
||||||
|
|
Loading…
Reference in New Issue