示例#1
0
        private static bool RequiredForNextPolicy(DocumentsOperationContext context, TimeSeriesCollectionConfiguration config, TimeSeriesPolicy policy, Slice item, DateTime to)
        {
            var tss  = context.DocumentDatabase.DocumentsStorage.TimeSeriesStorage;
            var next = config.GetNextPolicy(policy);

            if (ReferenceEquals(next, TimeSeriesPolicy.AfterAllPolices) == false)
            {
                TimeSeriesRollups.SplitKey(item, out var docId, out var name);
                var raw          = name.Split(TimeSeriesConfiguration.TimeSeriesRollupSeparator)[0];
                var currentStats = tss.Stats.GetStats(context, docId, policy.GetTimeSeriesName(raw));
                var nextStats    = tss.Stats.GetStats(context, docId, next.GetTimeSeriesName(raw));

                var nextEnd = nextStats.End.Add(next.AggregationTime).AddMilliseconds(-1);

                if (nextEnd > currentStats.End)
                {
                    return(false);
                }

                if (nextEnd < to)
                {
                    return(true);
                }
            }

            return(false);
        }
示例#2
0
        public void MarkForPolicy(DocumentsOperationContext context, TimeSeriesSliceHolder slicerHolder, DateTime timestamp, ulong status)
        {
            if (Configuration.Collections.TryGetValue(slicerHolder.Collection, out var config) == false)
            {
                return;
            }

            if (config.Disabled)
            {
                return;
            }

            var currentIndex = config.GetPolicyIndexByTimeSeries(slicerHolder.Name);

            if (currentIndex == -1) // policy not found
            {
                return;
            }

            var nextPolicy = config.GetNextPolicy(currentIndex);

            if (nextPolicy == null)
            {
                return;
            }

            if (ReferenceEquals(nextPolicy, TimeSeriesPolicy.AfterAllPolices))
            {
                return; // this is the last policy
            }
            if (status == TimeSeriesValuesSegment.Dead)
            {
                var currentPolicy = config.GetPolicy(currentIndex);
                if (currentPolicy.RetentionTime < TimeValue.MaxValue)
                {
                    var now         = context.DocumentDatabase.Time.GetUtcNow();
                    var startRollup = new DateTime(TimeSeriesRollups.NextRollup(timestamp, nextPolicy)).Add(-currentPolicy.RetentionTime);
                    if (startRollup.Add(currentPolicy.RetentionTime) < now)
                    {
                        return; // ignore this value since it is outside our retention frame
                    }
                }
            }

            _database.DocumentsStorage.TimeSeriesStorage.Rollups.MarkForPolicy(context, slicerHolder, nextPolicy, timestamp);
        }
示例#3
0
        public void MarkSegmentForPolicy(DocumentsOperationContext context, TimeSeriesSliceHolder slicerHolder, DateTime timestamp,
                                         string changeVector,
                                         int numberOfEntries)
        {
            if (Configuration.Collections.TryGetValue(slicerHolder.Collection, out var config) == false)
            {
                return;
            }

            var currentIndex = config.GetPolicyIndexByTimeSeries(slicerHolder.Name);

            if (currentIndex == -1) // policy not found
            {
                return;
            }

            var nextPolicy = config.GetNextPolicy(currentIndex);

            if (nextPolicy == null)
            {
                return;
            }

            if (ReferenceEquals(nextPolicy, TimeSeriesPolicy.AfterAllPolices))
            {
                return; // this is the last policy
            }
            if (numberOfEntries == 0)
            {
                var currentPolicy = config.GetPolicy(currentIndex);
                var now           = context.DocumentDatabase.Time.GetUtcNow();
                var nextRollup    = new DateTime(TimeSeriesRollups.NextRollup(timestamp, nextPolicy));
                var startRollup   = nextRollup.Add(-currentPolicy.RetentionTime);
                if (now - startRollup > currentPolicy.RetentionTime)
                {
                    return; // ignore this segment since it is outside our retention frame
                }
            }

            _database.DocumentsStorage.TimeSeriesStorage.Rollups.MarkSegmentForPolicy(context, slicerHolder, nextPolicy, timestamp, changeVector);
        }
示例#4
0
        private bool ShouldMarkForPolicy(
            DocumentsOperationContext context, 
            TimeSeriesSliceHolder slicerHolder, 
            DateTime timestamp, 
            ulong status,
            out TimeSeriesPolicy nextPolicy)
        {
            nextPolicy = default;
            if (Configuration.Collections.TryGetValue(slicerHolder.Collection, out var config) == false)
                return false;

            var currentIndex = config.GetPolicyIndexByTimeSeries(slicerHolder.Name);
            if (currentIndex == -1) // policy not found
                return false;

            nextPolicy = config.GetNextPolicy(currentIndex);
            if (nextPolicy == null)
                return false;

            if (ReferenceEquals(nextPolicy, TimeSeriesPolicy.AfterAllPolices))
                return false;

            if (status == TimeSeriesValuesSegment.Dead)
            {
                var currentPolicy = config.GetPolicy(currentIndex);
                if (currentPolicy.RetentionTime < TimeValue.MaxValue)
                {
                    var now = context.DocumentDatabase.Time.GetUtcNow();
                    var startRollup = new DateTime(TimeSeriesRollups.NextRollup(timestamp, nextPolicy)).Add(-currentPolicy.RetentionTime);
                    if (startRollup.Add(currentPolicy.RetentionTime) < now)
                        return false; // ignore this since it is outside our retention frame
                }
            }

            return true;
        }