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); }
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); }
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); }
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; }