Example #1
0
        public void ExistingDataFilesAreCompactedOnCompactCall()
        {
            // Create one bucket at present time so that remaining buckets
            // being created are out of compaction
            var timeStamp = DateTime.UtcNow;
            var bucket    =
                new DataBucket <InternalHitCount>(this.dimensionSet, timeStamp, TimeSpan.TicksPerMinute,
                                                  this.storagePath,
                                                  this.properties.MemoryStreamManager);

            bucket.AddValue(this.dimensions, 5);
            bucket.Seal();
            bucket.Persist();

            // Create buckets manually at 1 min and 5 min quantum
            // but they actually belong at a 10 min once compacted
            var expectedNewBucketQuantum = customCompaction.Intervals.ElementAt(2).Interval.Ticks;
            var timeStamp2 = RoundTimeStamp(timeStamp.Subtract(new TimeSpan(2, 20, 0)), expectedNewBucketQuantum);

            // The buckets will have files written out but not be
            // part of the dataset until it is created
            var bucket1 =
                new DataBucket <InternalHitCount>(this.dimensionSet, timeStamp2, TimeSpan.TicksPerMinute,
                                                  this.storagePath,
                                                  this.properties.MemoryStreamManager);

            bucket1.AddValue(this.dimensions, 5);
            bucket1.Seal();
            bucket1.Persist();
            var timeStamp3 = timeStamp2.Add(new TimeSpan(0, 5, 0));
            var bucket2    =
                new DataBucket <InternalHitCount>(this.dimensionSet, timeStamp3,
                                                  TimeSpan.TicksPerMinute * 5,
                                                  this.storagePath,
                                                  this.properties.MemoryStreamManager);

            bucket2.AddValue(this.dimensions, 2);
            bucket2.Seal();
            bucket2.Persist();

            bucket.Dispose();
            bucket1.Dispose();
            bucket2.Dispose();

            this.InitializeDataSet(null);
            this.dataSet.Compact();

            // Verify that a 10 minute compacted bucket was created
            var newBucket = this.dataSet.GetDataBucket(timeStamp2);

            Assert.AreEqual(timeStamp2.Ticks, newBucket.StartTicks);
            Assert.AreEqual(expectedNewBucketQuantum, newBucket.EndTicks - newBucket.StartTicks);
            var matches = newBucket.GetMatches(this.dimensions).ToList();

            Assert.AreEqual(1, matches.Count);
            var result = matches[0].Data;

            Assert.AreEqual((ulong)7, result.HitCount);
        }
        public void ExistingDataFilesAreCompactedOnCompactCall()
        {
            // Create one bucket at present time so that remaining buckets
            // being created are out of compaction
            var timeStamp = DateTime.UtcNow;
            var bucket =
                new DataBucket<InternalHitCount>(this.dimensionSet, timeStamp, TimeSpan.TicksPerMinute,
                                                                            this.storagePath,
                                                                            this.properties.MemoryStreamManager);
            bucket.AddValue(this.dimensions, 5);
            bucket.Seal();
            bucket.Persist();

            // Create buckets manually at 1 min and 5 min quantum
            // but they actually belong at a 10 min once compacted
            var expectedNewBucketQuantum = customCompaction.Intervals.ElementAt(2).Interval.Ticks;
            var timeStamp2 = RoundTimeStamp(timeStamp.Subtract(new TimeSpan(2, 20, 0)), expectedNewBucketQuantum);

            // The buckets will have files written out but not be 
            // part of the dataset until it is created
            var bucket1 =
                new DataBucket<InternalHitCount>(this.dimensionSet, timeStamp2, TimeSpan.TicksPerMinute,
                                                                            this.storagePath,
                                                                            this.properties.MemoryStreamManager);
            bucket1.AddValue(this.dimensions, 5);
            bucket1.Seal();
            bucket1.Persist();
            var timeStamp3 = timeStamp2.Add(new TimeSpan(0, 5, 0));
            var bucket2 =
                new DataBucket<InternalHitCount>(this.dimensionSet, timeStamp3,
                                                                            TimeSpan.TicksPerMinute * 5,
                                                                            this.storagePath,
                                                                            this.properties.MemoryStreamManager);
            bucket2.AddValue(this.dimensions, 2);
            bucket2.Seal();
            bucket2.Persist();

            bucket.Dispose();
            bucket1.Dispose();
            bucket2.Dispose();

            this.InitializeDataSet(null);
            this.dataSet.Compact();

            // Verify that a 10 minute compacted bucket was created
            var newBucket = this.dataSet.GetDataBucket(timeStamp2);
            Assert.AreEqual(timeStamp2.Ticks, newBucket.StartTicks);
            Assert.AreEqual(expectedNewBucketQuantum, newBucket.EndTicks - newBucket.StartTicks);
            var matches = newBucket.GetMatches(this.dimensions).ToList();
            Assert.AreEqual(1, matches.Count);
            var result = matches[0].Data;
            Assert.AreEqual((ulong)7, result.HitCount);
        }