Add redundancy check interval in config
authorChocobozzz <me@florianbigard.com>
Wed, 19 Sep 2018 14:21:09 +0000 (16:21 +0200)
committerChocobozzz <me@florianbigard.com>
Wed, 19 Sep 2018 14:21:30 +0000 (16:21 +0200)
config/default.yaml
config/production.yaml.example
config/test.yaml
server/initializers/checker.ts
server/initializers/constants.ts
server/lib/schedulers/videos-redundancy-scheduler.ts

index 00eeaea8c4d22c5d28b94ae53ec062873bbe1424..fa1fb628a55394728c6f791e114368e1760a97f0 100644 (file)
@@ -71,6 +71,7 @@ trending:
 # Once you have defined your strategies, choose which instances you want to cache in admin -> manage follows -> following
 redundancy:
   videos:
+    check_interval: '1 hour' # How often you want to check new videos to cache
     strategies:
 #      -
 #        size: '10GB'
index 28770e480c70e013b75e588f57d9871abc889eb8..4d8752206aa0d446de612a42959ba048cb6bf27f 100644 (file)
@@ -72,6 +72,7 @@ trending:
 # Once you have defined your strategies, choose which instances you want to cache in admin -> manage follows -> following
 redundancy:
   videos:
+    check_interval: '1 hour' # How often you want to check new videos to cache
     strategies:
 #      -
 #        size: '10GB'
index d36d90bbd71d1ea636c4f09c5be2bd72ef39bab3..ad94b00cd2230e12429acdbd4906f3bf9f64953d 100644 (file)
@@ -23,6 +23,7 @@ log:
 
 redundancy:
   videos:
+    check_interval: '5 seconds'
     strategies:
       -
         size: '10MB'
index 8b528084873d133e570e46183bab7a43a1119997..a54f6155be410612129293efe2f765387984dd36 100644 (file)
@@ -75,7 +75,7 @@ function checkMissedConfig () {
     'cache.previews.size', 'admin.email',
     'signup.enabled', 'signup.limit', 'signup.requires_email_verification',
     'signup.filters.cidr.whitelist', 'signup.filters.cidr.blacklist',
-    'redundancy.videos.strategies',
+    'redundancy.videos.strategies', 'redundancy.videos.check_interval',
     'transcoding.enabled', 'transcoding.threads',
     'import.videos.http.enabled', 'import.videos.torrent.enabled',
     'trending.videos.interval_days',
index 881978753b73e9b1c955690540134adf24d9bef5..03424ffb8f4d2ffc4f9adea006d728c14673c33f 100644 (file)
@@ -5,7 +5,7 @@ import { ActivityPubActorType } from '../../shared/models/activitypub'
 import { FollowState } from '../../shared/models/actors'
 import { VideoAbuseState, VideoImportState, VideoPrivacy } from '../../shared/models/videos'
 // Do not use barrels, remain constants as independent as possible
-import { buildPath, isTestInstance, root, sanitizeHost, sanitizeUrl } from '../helpers/core-utils'
+import { buildPath, isTestInstance, parseDuration, root, sanitizeHost, sanitizeUrl } from '../helpers/core-utils'
 import { NSFWPolicyType } from '../../shared/models/videos/nsfw-policy.type'
 import { invert } from 'lodash'
 import { CronRepeatOptions, EveryRepeatOptions } from 'bull'
@@ -139,8 +139,7 @@ let SCHEDULER_INTERVALS_MS = {
   badActorFollow: 60000 * 60, // 1 hour
   removeOldJobs: 60000 * 60, // 1 hour
   updateVideos: 60000, // 1 minute
-  youtubeDLUpdate: 60000 * 60 * 24, // 1 day
-  videosRedundancy: 60000 * 2 // 2 hours
+  youtubeDLUpdate: 60000 * 60 * 24 // 1 day
 }
 
 // ---------------------------------------------------------------------------
@@ -213,6 +212,7 @@ const CONFIG = {
   },
   REDUNDANCY: {
     VIDEOS: {
+      CHECK_INTERVAL: parseDuration(config.get<string>('redundancy.videos.check_interval')),
       STRATEGIES: buildVideosRedundancy(config.get<any[]>('redundancy.videos.strategies'))
     }
   },
@@ -651,7 +651,6 @@ if (isTestInstance() === true) {
   SCHEDULER_INTERVALS_MS.badActorFollow = 10000
   SCHEDULER_INTERVALS_MS.removeOldJobs = 10000
   SCHEDULER_INTERVALS_MS.updateVideos = 5000
-  SCHEDULER_INTERVALS_MS.videosRedundancy = 5000
   REPEAT_JOBS['videos-views'] = { every: 5000 }
 
   REDUNDANCY.VIDEOS.RANDOMIZED_FACTOR = 1
index 5f9fd991129103bc96267670f4b8c566ee7a0fc1..96065171298d755fae9a2586673786cdb9ed7909 100644 (file)
@@ -18,7 +18,7 @@ export class VideosRedundancyScheduler extends AbstractScheduler {
   private static instance: AbstractScheduler
   private executing = false
 
-  protected schedulerIntervalMs = SCHEDULER_INTERVALS_MS.videosRedundancy
+  protected schedulerIntervalMs = CONFIG.REDUNDANCY.VIDEOS.CHECK_INTERVAL
 
   private constructor () {
     super()
@@ -50,6 +50,16 @@ export class VideosRedundancyScheduler extends AbstractScheduler {
       }
     }
 
+    await this.removeExpired()
+
+    this.executing = false
+  }
+
+  static get Instance () {
+    return this.instance || (this.instance = new this())
+  }
+
+  private async removeExpired () {
     const expired = await VideoRedundancyModel.listAllExpired()
 
     for (const m of expired) {
@@ -61,12 +71,6 @@ export class VideosRedundancyScheduler extends AbstractScheduler {
         logger.error('Cannot remove %s video from our redundancy system.', this.buildEntryLogId(m))
       }
     }
-
-    this.executing = false
-  }
-
-  static get Instance () {
-    return this.instance || (this.instance = new this())
   }
 
   private findVideoToDuplicate (cache: VideosRedundancy) {