Example #1
0
 public LeastFrequentlyUsedJournalEntry(JournalEntry entry, CacheAge age, int hitCount, int newerVersionCount)
 {
     Entry             = entry;
     Age               = age;
     HitCount          = hitCount;
     NewerVersionCount = newerVersionCount;
 }
        public void WhenAJournalEntryIsCommittedAndRetrieved_ThenItShouldBeEquivalentToTheOriginal()
        {
            var journalPath = Path.Combine(testDir, "PackageRetentionJournal.json");

            var thePackage   = CreatePackageIdentity("TestPackage", "0.0.1");
            var cacheAge     = new CacheAge(10);
            var serverTaskId = new ServerTaskId("TaskID-1");

            var journalEntry = new JournalEntry(thePackage, 1);

            journalEntry.AddLock(serverTaskId, cacheAge);
            journalEntry.AddUsage(serverTaskId, cacheAge);

            var writeRepository = new JsonJournalRepository(TestCalamariPhysicalFileSystem.GetPhysicalFileSystem(), new StaticJsonJournalPathProvider(journalPath), Substitute.For <ILog>());

            writeRepository.AddJournalEntry(journalEntry);
            writeRepository.Commit();

            var readRepository = new JsonJournalRepository(TestCalamariPhysicalFileSystem.GetPhysicalFileSystem(), new StaticJsonJournalPathProvider(journalPath), Substitute.For <ILog>());

            readRepository.Load();
            readRepository.TryGetJournalEntry(thePackage, out var retrieved).Should().BeTrue();

            retrieved.Package.Should().BeEquivalentTo(journalEntry.Package);
            retrieved.GetLockDetails().Should().BeEquivalentTo(journalEntry.GetLockDetails());
            retrieved.GetUsageDetails().Should().BeEquivalentTo(journalEntry.GetUsageDetails());
        }
        IEnumerable <LeastFrequentlyUsedJournalEntry> OrderByValue(IList <JournalEntry> journalEntries, CacheAge currentCacheAge)
        {
            if (!journalEntries.Any())
            {
                return(new LeastFrequentlyUsedJournalEntry[0]);
            }
            var details = CreateLeastFrequentlyUsedJournalEntries(journalEntries).ToList();

            var hitCountRange        = GetHitCountRange(details);
            var cacheAgeRange        = GetCacheAgeRange(details, currentCacheAge);
            var newVersionCountRange = GetVersionCountRange(details);

            decimal CalculateValue(LeastFrequentlyUsedJournalEntry pi) =>
            Normalise(pi.HitCount, hitCountRange) * hitFactor
            - Normalise(currentCacheAge.Value - pi.Age.Value, cacheAgeRange) * ageFactor
            - Normalise(pi.NewerVersionCount, newVersionCountRange) * newerVersionFactor;

            return(details.OrderBy(CalculateValue));
        }
Example #4
0
 public PackageCache(CacheAge cacheAge)
 {
     CacheAge = cacheAge;
 }
Example #5
0
 public PackageCache(int cacheAge)
 {
     CacheAge = new CacheAge(cacheAge);
 }
Example #6
0
 public void AddLock(ServerTaskId deploymentTaskId, CacheAge cacheAge)
 {
     locks.Add(new UsageDetails(deploymentTaskId, cacheAge));
 }
Example #7
0
 public void AddUsage(ServerTaskId deploymentTaskId, CacheAge cacheAge)
 {
     usages.Add(new UsageDetails(deploymentTaskId, cacheAge));
 }
Example #8
0
 public UsageDetails(ServerTaskId deploymentTaskId, CacheAge cacheAgeAtUsage, DateTime dateTime)
 {
     CacheAgeAtUsage  = cacheAgeAtUsage;
     DateTime         = dateTime;
     DeploymentTaskId = deploymentTaskId;
 }
Example #9
0
 /// <summary> Defaults DateTime to DateTime.Now </summary>
 public UsageDetails(ServerTaskId deploymentTaskId, CacheAge cacheAge)
     : this(deploymentTaskId, cacheAge, DateTime.Now)
 {
 }