public ScheduledReductionInfo DeleteScheduledReduction(List <object> itemsToDelete) { var result = new ScheduledReductionInfo(); var hasResult = false; var currentEtagBinary = Guid.Empty.ToByteArray(); foreach (RavenJToken token in itemsToDelete) { var readResult = storage.ScheduleReductions.Read(token); if (readResult == null) { continue; } var etagBinary = readResult.Key.Value <byte[]>("etag"); if (new ComparableByteArray(etagBinary).CompareTo(currentEtagBinary) > 0) { hasResult = true; var timestamp = readResult.Key.Value <DateTime>("timestamp"); result.Etag = etagBinary.TransfromToGuidWithProperSorting(); result.Timestamp = timestamp; } storage.ScheduleReductions.Remove(token); } return(hasResult ? result : null); }
public ScheduledReductionInfo DeleteScheduledReduction(List <object> itemsToDelete) { var hasResult = false; var result = new ScheduledReductionInfo(); var currentEtagBinary = Guid.Empty.ToByteArray(); foreach (OptimizedIndexReader reader in itemsToDelete) { foreach (var sortedBookmark in reader.GetSortedBookmarks()) { Api.JetGotoBookmark(session, ScheduledReductions, sortedBookmark.Item1, sortedBookmark.Item2); var etagBinary = Api.RetrieveColumn(session, ScheduledReductions, tableColumnsCache.ScheduledReductionColumns["etag"]); if (new ComparableByteArray(etagBinary).CompareTo(currentEtagBinary) > 0) { hasResult = true; var timestamp = Api.RetrieveColumnAsInt64(session, ScheduledReductions, tableColumnsCache.ScheduledReductionColumns["timestamp"]).Value; result.Etag = etagBinary.TransfromToGuidWithProperSorting(); result.Timestamp = DateTime.FromBinary(timestamp); } Api.JetDelete(session, ScheduledReductions); } } return(hasResult ? result : null); }
public ScheduledReductionInfo DeleteScheduledReduction(IEnumerable <object> itemsToDelete) { if (itemsToDelete == null) { return(null); } var result = new ScheduledReductionInfo(); var hasResult = false; var currentEtag = Etag.Empty; foreach (RavenJToken token in itemsToDelete) { var etag = Etag.Parse(token.Value <byte[]>("etag")); var etagAsString = etag.ToString(); ushort version; var value = LoadJson(tableStorage.ScheduledReductions, etagAsString, writeBatch.Value, out version); if (value == null) { continue; } if (etag.CompareTo(currentEtag) > 0) { hasResult = true; result.Etag = etag; result.Timestamp = value.Value <DateTime>("timestamp"); } var view = value.Value <int>("view"); var level = value.Value <int>("level"); var reduceKey = value.Value <string>("reduceKey"); DeleteScheduledReduction(etagAsString, view, level, reduceKey); } return(hasResult ? result : null); }
public ScheduledReductionInfo DeleteScheduledReduction(IEnumerable<object> itemsToDelete) { if (itemsToDelete == null) return null; var hasResult = false; var result = new ScheduledReductionInfo(); var currentEtagBinary = Guid.Empty.ToByteArray(); foreach (OptimizedDeleter reader in itemsToDelete.Where(x => x != null)) { if (scheduledReductionsPerViewAndLevel != null) { scheduledReductionsPerViewAndLevel.AddOrUpdate(reader.IndexId, new RemainingReductionPerLevel(), (key, oldvalue) => oldvalue.Add(reader.ItemsToDeletePerViewAndLevel)); } foreach (var sortedBookmark in reader.GetSortedBookmarks()) { Api.JetGotoBookmark(session, ScheduledReductions, sortedBookmark.Item1, sortedBookmark.Item2); var etagBinary = Api.RetrieveColumn(session, ScheduledReductions, tableColumnsCache.ScheduledReductionColumns["etag"]); if (new ComparableByteArray(etagBinary).CompareTo(currentEtagBinary) > 0) { hasResult = true; var timestamp = Api.RetrieveColumnAsInt64(session, ScheduledReductions, tableColumnsCache.ScheduledReductionColumns["timestamp"]).Value; result.Etag = Etag.Parse(etagBinary); result.Timestamp = DateTime.FromBinary(timestamp); } Api.JetDelete(session, ScheduledReductions); MaybePulseTransaction(); } } return hasResult ? result : null; }
public ScheduledReductionInfo DeleteScheduledReduction(IEnumerable<object> itemsToDelete) { if (itemsToDelete == null) return null; var result = new ScheduledReductionInfo(); var hasResult = false; var currentEtag = Etag.Empty; foreach (Etag etag in itemsToDelete) { var etagAsString = (Slice)etag.ToString(); ushort version; var value = LoadStruct(tableStorage.ScheduledReductions, etagAsString, writeBatch.Value, out version); if (value == null) continue; if (etag.CompareTo(currentEtag) > 0) { hasResult = true; result.Etag = etag; result.Timestamp = DateTime.FromBinary(value.ReadLong(ScheduledReductionFields.Timestamp)); } var view = value.ReadInt(ScheduledReductionFields.IndexId); var level = value.ReadInt(ScheduledReductionFields.Level); var reduceKey = value.ReadString(ScheduledReductionFields.ReduceKey); DeleteScheduledReduction(etagAsString, view, CreateKey(view), level, reduceKey); } return hasResult ? result : null; }
public ScheduledReductionInfo DeleteScheduledReduction(IEnumerable<object> itemsToDelete) { if (itemsToDelete == null) return null; var result = new ScheduledReductionInfo(); var hasResult = false; var currentEtag = Etag.Empty; foreach (RavenJToken token in itemsToDelete) { var etag = Etag.Parse(token.Value<byte[]>("etag")); var etagAsString = etag.ToString(); ushort version; var value = LoadJson(tableStorage.ScheduledReductions, etagAsString, writeBatch.Value, out version); if (value == null) continue; if (etag.CompareTo(currentEtag) > 0) { hasResult = true; result.Etag = etag; result.Timestamp = value.Value<DateTime>("timestamp"); } var view = value.Value<int>("view"); var level = value.Value<int>("level"); var reduceKey = value.Value<string>("reduceKey"); DeleteScheduledReduction(etagAsString, view, level, reduceKey); } return hasResult ? result : null; }
public ScheduledReductionInfo DeleteScheduledReduction(IEnumerable<object> itemsToDelete) { if (itemsToDelete == null) return null; var result = new ScheduledReductionInfo(); var hasResult = false; var currentEtag = Etag.Empty; foreach (Etag etag in itemsToDelete.Where(x => x != null)) { var etagAsString = (Slice)etag.ToString(); ushort version; var value = LoadStruct(tableStorage.ScheduledReductions, etagAsString, writeBatch.Value, out version); if (value == null) continue; if (etag.CompareTo(currentEtag) > 0) { hasResult = true; result.Etag = etag; result.Timestamp = DateTime.FromBinary(value.ReadLong(ScheduledReductionFields.Timestamp)); } var view = value.ReadInt(ScheduledReductionFields.IndexId); var level = value.ReadInt(ScheduledReductionFields.Level); var reduceKey = value.ReadString(ScheduledReductionFields.ReduceKey); var bucket = value.ReadInt(ScheduledReductionFields.Bucket); DeleteScheduledReduction(etag, etagAsString, CreateScheduleReductionKey(view, level, reduceKey), CreateViewKey(view), bucket); if (scheduledReductionsPerViewAndLevel != null) scheduledReductionsPerViewAndLevel.AddOrUpdate(view, new RemainingReductionPerLevel(level), (key, oldvalue) => oldvalue.DecrementPerLevelCounters(level)); } return hasResult ? result : null; }