Add infohash cache
authorChocobozzz <me@florianbigard.com>
Fri, 3 Jan 2020 12:47:45 +0000 (13:47 +0100)
committerChocobozzz <me@florianbigard.com>
Fri, 3 Jan 2020 12:47:45 +0000 (13:47 +0100)
server/controllers/tracker.ts
server/helpers/utils.ts
server/initializers/constants.ts
server/models/video/video-file.ts
server/models/video/video-streaming-playlist.ts

index 912f82b869efefdca5c0a19139152c93b1f74e23..2ae1cf86c5d979225929685b5a65c81c980413af 100644 (file)
@@ -48,7 +48,7 @@ const trackerServer = new TrackerServer({
     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)
index ba07eaaf342c450410f323982b48c5c217729aa1..4c6f200f86f91f07a2f18b9e37a3b2a1ab67a137 100644 (file)
@@ -40,7 +40,7 @@ const getServerActor = memoizee(async function () {
   actor.Account = application.Account
 
   return actor
-})
+}, { promise: true })
 
 function generateVideoImportTmpPath (target: string | ParseTorrent) {
   const id = typeof target === 'string' ? target : target.infoHash
index 1b7b94d744a320b3aa2f2fa51834115fbc7c200a..f4a2b358b4f048e1da746ae44fa9c920509c104c 100644 (file)
@@ -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 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 = {
@@ -728,6 +733,7 @@ export {
   ACTIVITY_PUB_ACTOR_TYPES,
   THUMBNAILS_SIZE,
   VIDEO_CATEGORIES,
+  MEMOIZE_LENGTH,
   VIDEO_LANGUAGES,
   VIDEO_PRIVACIES,
   VIDEO_LICENCES,
index fa5a6e76de55bf375d408d9e55ae4c50c6508cf9..e08999385b5bb7ee9367ba99f343b3d11c2f03bf 100644 (file)
@@ -24,9 +24,10 @@ import { VideoModel } from './video'
 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',
@@ -138,6 +139,12 @@ export class VideoFileModel extends Model<VideoFileModel> {
   })
   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 = {
index faad4cc2d511a62e82012f6943d7fc04adfe3600..0099add4ef6b6a779bf1dece083d5ae39268ae7f 100644 (file)
@@ -5,7 +5,14 @@ import { VideoModel } from './video'
 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'
@@ -13,6 +20,7 @@ import { Op, QueryTypes } from 'sequelize'
 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',
@@ -89,6 +97,12 @@ export class VideoStreamingPlaylistModel extends Model<VideoStreamingPlaylistMod
   })
   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 = {