try {
if (CONFIG.TRACKER.PRIVATE === false) return cb()
- const videoFileExists = await VideoFileModel.doesInfohashExist(infoHash)
+ const videoFileExists = await VideoFileModel.doesInfohashExistCached(infoHash)
if (videoFileExists === true) return cb()
const playlistExists = await VideoStreamingPlaylistModel.doesInfohashExist(infoHash)
actor.Account = application.Account
return actor
-})
+}, { promise: true })
function generateVideoImportTmpPath (target: string | ParseTorrent) {
const id = typeof target === 'string' ? target : target.infoHash
const HLS_REDUNDANCY_DIRECTORY = join(CONFIG.STORAGE.REDUNDANCY_DIR, 'hls')
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 = {
ACTIVITY_PUB_ACTOR_TYPES,
THUMBNAILS_SIZE,
VIDEO_CATEGORIES,
+ MEMOIZE_LENGTH,
VIDEO_LANGUAGES,
VIDEO_PRIVACIES,
VIDEO_LICENCES,
import { VideoRedundancyModel } from '../redundancy/video-redundancy'
import { VideoStreamingPlaylistModel } from './video-streaming-playlist'
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 { MStreamingPlaylistVideo, MVideo } from '@server/typings/models'
+import * as memoizee from 'memoizee'
@Table({
tableName: 'videoFile',
})
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) {
const query = 'SELECT 1 FROM "videoFile" WHERE "infoHash" = $infoHash LIMIT 1'
const options = {
import { VideoRedundancyModel } from '../redundancy/video-redundancy'
import { VideoStreamingPlaylistType } from '../../../shared/models/videos/video-streaming-playlist.type'
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 { sha1 } from '../../helpers/core-utils'
import { isArrayOf } from '../../helpers/custom-validators/misc'
import { MStreamingPlaylist, MVideoFile } from '@server/typings/models'
import { VideoFileModel } from '@server/models/video/video-file'
import { getTorrentFileName, getVideoFilename } from '@server/lib/video-paths'
+import * as memoizee from 'memoizee'
@Table({
tableName: 'videoStreamingPlaylist',
})
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) {
const query = 'SELECT 1 FROM "videoStreamingPlaylist" WHERE $infoHash = ANY("p2pMediaLoaderInfohashes") LIMIT 1'
const options = {