Exemplo n.º 1
0
        public CleanupManager(ILogger logger, ICleanableCache cache, CleanupStrategy cs)
        {
            this.cache  = cache;
            this.cs     = cs;
            this.logger = logger;
            queue       = new CleanupQueue();
            //Called each request
            cache.CacheResultReturned += delegate(ICleanableCache sender, CacheResult r) {
                if (r.Result == CacheQueryResult.Miss)
                {
                    this.AddedFile(r.RelativePath); //It was either updated or added.
                }
                else
                {
                    this.BeLazy();
                }
            };
            //Called when the file system changes unexpectedly.
            cache.Index.FileDisappeared += delegate(string relativePath, string physicalPath) {
                logger?.LogWarning("File disappeared from the cache unexpectedly - reindexing entire cache. File name: {0}", relativePath);
                //Stop everything ASAP and start a brand new cleaning run.
                queue.ReplaceWith(new CleanupWorkItem(CleanupWorkItem.Kind.CleanFolderRecursive, "", cache.PhysicalCachePath));
                worker.MayHaveWork();
            };

            worker = new CleanupWorker(this.logger, cs, queue, cache);
        }
Exemplo n.º 2
0
        public HardPruneCacheCleaner(ICleanableCache cache, 
            int maximumQueries, 
            int maximumValues,
            int reductionFactor,
            int cleanFrequency)
        {
            if (null == cache)
            {
                throw new ArgumentNullException("cache");
            }
            _cache = cache;
            _maxQueries = maximumQueries;
            _maxValues = maximumValues;
            _reductionFactor = Math.Max(2, reductionFactor);
            _cleanFrequency = cleanFrequency;

            if (cleanFrequency > 0)
            {
                _cleanTimer = new Timer((target) =>
                {
                    CacheTotals totals = _cache.Totals;
                    if (_NeedsCleaning(totals))
                    {
                        _Clean(totals);
                    }
                }, null, cleanFrequency, cleanFrequency);
            }
        }
Exemplo n.º 3
0
 public HardPruneCacheCleaner(ICleanableCache cache)
     : this(cache, 
     DefaultMaxQueries, 
     DefaultMaxValues, 
     DefaultReductionFactor, 
     DefaultCleanFrequency)
 {
 }
Exemplo n.º 4
0
 /// <summary>
 /// Creates and starts a thread that consumes the queue, pausing until notified when 'queue' empties.
 /// </summary>
 /// <param name="lp"></param>
 /// <param name="cs"></param>
 /// <param name="queue"></param>
 /// <param name="cache"></param>
 public CleanupWorker(ILoggerProvider lp, CleanupStrategy cs, CleanupQueue queue, ICleanableCache cache) : base("DiskCache-CleanupWorker")
 {
     this.cs        = cs;
     this.queue     = queue;
     this.cache     = cache;
     this.lp        = lp;
     t              = new Thread(main);
     t.IsBackground = true;
     t.Start();
 }
Exemplo n.º 5
0
 /// <summary>
 /// Creates and starts a thread that consumes the queue, pausing until notified when 'queue' empties.
 /// </summary>
 /// <param name="logger"></param>
 /// <param name="cs"></param>
 /// <param name="queue"></param>
 /// <param name="cache"></param>
 public CleanupWorker(ILogger logger, CleanupStrategy cs, CleanupQueue queue, ICleanableCache cache) : base("DiskCache-CleanupWorker")
 {
     this.cs     = cs;
     this.queue  = queue;
     this.cache  = cache;
     this.logger = logger;
     t           = new Thread(Main)
     {
         IsBackground = true
     };
     t.Start();
 }