From 5e4f23a2623410dd763cdf3843a127b73276801d Mon Sep 17 00:00:00 2001 From: Grisha Kotler Date: Mon, 9 Dec 2024 09:36:09 +0200 Subject: [PATCH] RavenDB-23100 - use the correct item ID casing to align with the storage state --- .../HandleCompareExchangeCountersReferences.cs | 5 +++++ .../Workers/Counters/HandleCountersReferences.cs | 5 +++++ .../HandleNotNormalizedCompareExchangeReferences.cs | 5 +++++ .../Workers/HandleNotNormalizedDocumentReferences.cs | 5 +++++ .../Documents/Indexes/Workers/HandleReferences.cs | 9 ++++++++- .../HandleCompareExchangeTimeSeriesReferences.cs | 5 +++++ .../Workers/TimeSeries/HandleTimeSeriesReferences.cs | 5 +++++ test/SlowTests/Issues/RavenDB-15754.cs | 12 ++++++++++-- 8 files changed, 48 insertions(+), 3 deletions(-) diff --git a/src/Raven.Server/Documents/Indexes/Workers/Counters/HandleCompareExchangeCountersReferences.cs b/src/Raven.Server/Documents/Indexes/Workers/Counters/HandleCompareExchangeCountersReferences.cs index 3fce512e9ec4..9a371f137c92 100644 --- a/src/Raven.Server/Documents/Indexes/Workers/Counters/HandleCompareExchangeCountersReferences.cs +++ b/src/Raven.Server/Documents/Indexes/Workers/Counters/HandleCompareExchangeCountersReferences.cs @@ -32,6 +32,11 @@ protected override IndexItem GetItem(DocumentsOperationContext databaseContext, return new CounterIndexItem(counter.LuceneKey, counter.DocumentId, counter.Etag, counter.CounterName, counter.Size, counter); } + protected override string GetNextItemId(IndexItem indexItem) + { + return indexItem.LowerSourceDocumentId; + } + public override void HandleDelete(Tombstone tombstone, string collection, Lazy writer, TransactionOperationContext indexContext, IndexingStatsScope stats) { using (DocumentIdWorker.GetSliceFromId(indexContext, tombstone.LowerId, out Slice documentIdPrefixWithCounterKeySeparator, SpecialChars.RecordSeparator)) diff --git a/src/Raven.Server/Documents/Indexes/Workers/Counters/HandleCountersReferences.cs b/src/Raven.Server/Documents/Indexes/Workers/Counters/HandleCountersReferences.cs index a54d5be1dd18..b6bdcf980615 100644 --- a/src/Raven.Server/Documents/Indexes/Workers/Counters/HandleCountersReferences.cs +++ b/src/Raven.Server/Documents/Indexes/Workers/Counters/HandleCountersReferences.cs @@ -28,6 +28,11 @@ protected override IndexItem GetItem(DocumentsOperationContext databaseContext, return new CounterIndexItem(counter.LuceneKey, counter.DocumentId, counter.Etag, counter.CounterName, counter.Size, counter); } + protected override string GetNextItemId(IndexItem indexItem) + { + return indexItem.LowerSourceDocumentId; + } + public override void HandleDelete(Tombstone tombstone, string collection, Lazy writer, TransactionOperationContext indexContext, IndexingStatsScope stats) { using (DocumentIdWorker.GetSliceFromId(indexContext, tombstone.LowerId, out Slice documentIdPrefixWithTsKeySeparator, SpecialChars.RecordSeparator)) diff --git a/src/Raven.Server/Documents/Indexes/Workers/HandleNotNormalizedCompareExchangeReferences.cs b/src/Raven.Server/Documents/Indexes/Workers/HandleNotNormalizedCompareExchangeReferences.cs index 22a1de4b822e..19828aac2fbe 100644 --- a/src/Raven.Server/Documents/Indexes/Workers/HandleNotNormalizedCompareExchangeReferences.cs +++ b/src/Raven.Server/Documents/Indexes/Workers/HandleNotNormalizedCompareExchangeReferences.cs @@ -16,6 +16,11 @@ protected override IndexItem GetItem(DocumentsOperationContext databaseContext, return HandleNotNormalizedDocumentReferences.GetNonNormalizedDocumentItem(databaseContext, key); } + protected override string GetNextItemId(IndexItem indexItem) + { + return indexItem.Id; + } + protected override void DeleteReferences(string collection, IndexingStatsScope stats, DocumentsOperationContext databaseContext, TransactionOperationContext indexContext) { HandleNotNormalizedDocumentReferences.DeleteReferences(collection, stats, _referencesStorage, databaseContext, indexContext); diff --git a/src/Raven.Server/Documents/Indexes/Workers/HandleNotNormalizedDocumentReferences.cs b/src/Raven.Server/Documents/Indexes/Workers/HandleNotNormalizedDocumentReferences.cs index 43a0e023de16..9ce1eedb1ef9 100644 --- a/src/Raven.Server/Documents/Indexes/Workers/HandleNotNormalizedDocumentReferences.cs +++ b/src/Raven.Server/Documents/Indexes/Workers/HandleNotNormalizedDocumentReferences.cs @@ -22,6 +22,11 @@ protected override IndexItem GetItem(DocumentsOperationContext databaseContext, return GetNonNormalizedDocumentItem(databaseContext, key); } + protected override string GetNextItemId(IndexItem indexItem) + { + return indexItem.Id; + } + public static unsafe IndexItem GetNonNormalizedDocumentItem(DocumentsOperationContext databaseContext, Slice key) { using (DocumentIdWorker.GetLower(databaseContext.Allocator, key.Content.Ptr, key.Size, out var loweredKey)) diff --git a/src/Raven.Server/Documents/Indexes/Workers/HandleReferences.cs b/src/Raven.Server/Documents/Indexes/Workers/HandleReferences.cs index 694a647fa54b..b47272dd4382 100644 --- a/src/Raven.Server/Documents/Indexes/Workers/HandleReferences.cs +++ b/src/Raven.Server/Documents/Indexes/Workers/HandleReferences.cs @@ -33,6 +33,11 @@ protected override IndexItem GetItem(DocumentsOperationContext databaseContext, return GetDocumentItem(databaseContext, key); } + protected override string GetNextItemId(IndexItem indexItem) + { + return indexItem.LowerId; + } + public static IndexItem GetDocumentItem(DocumentsOperationContext databaseContext, Slice key) { // when there is conflict, we need to apply same behavior as if the document would not exist @@ -247,7 +252,7 @@ protected HandleReferencesBase(Index index, DocumentsStorage documentsStorage, I if (CanContinueReferenceBatch() == false) { // updating the last reference state in order to continue from the place we left off - referenceState = new ReferencesState.ReferenceState(referencedItem.Key, referencedItem.Etag, current.LowerSourceDocumentId ?? current.Id, lastIndexedParentEtag); + referenceState = new ReferencesState.ReferenceState(referencedItem.Key, referencedItem.Etag, GetNextItemId(current), lastIndexedParentEtag); if (batchContinuationResult != Index.CanContinueBatchResult.RenewTransaction) { @@ -504,6 +509,8 @@ public InMemoryReferencesInfo GetReferencesInfo(string collection) protected abstract IndexItem GetItem(DocumentsOperationContext databaseContext, Slice key); + protected abstract string GetNextItemId(IndexItem indexItem); + protected virtual void DeleteReferences(string collection, IndexingStatsScope stats, DocumentsOperationContext databaseContext, TransactionOperationContext indexContext) { } diff --git a/src/Raven.Server/Documents/Indexes/Workers/TimeSeries/HandleCompareExchangeTimeSeriesReferences.cs b/src/Raven.Server/Documents/Indexes/Workers/TimeSeries/HandleCompareExchangeTimeSeriesReferences.cs index eb48f2edbf8c..180a7ba08159 100644 --- a/src/Raven.Server/Documents/Indexes/Workers/TimeSeries/HandleCompareExchangeTimeSeriesReferences.cs +++ b/src/Raven.Server/Documents/Indexes/Workers/TimeSeries/HandleCompareExchangeTimeSeriesReferences.cs @@ -31,6 +31,11 @@ protected override IndexItem GetItem(DocumentsOperationContext databaseContext, return new TimeSeriesIndexItem(timeSeries.LuceneKey, timeSeries.DocId, timeSeries.Etag, default, timeSeries.Name, timeSeries.SegmentSize, timeSeries); } + protected override string GetNextItemId(IndexItem indexItem) + { + return indexItem.LowerSourceDocumentId; + } + public override void HandleDelete(Tombstone tombstone, string collection, Lazy writer, TransactionOperationContext indexContext, IndexingStatsScope stats) { using (DocumentIdWorker.GetSliceFromId(indexContext, tombstone.LowerId, out Slice documentIdPrefixWithTsKeySeparator, SpecialChars.RecordSeparator)) diff --git a/src/Raven.Server/Documents/Indexes/Workers/TimeSeries/HandleTimeSeriesReferences.cs b/src/Raven.Server/Documents/Indexes/Workers/TimeSeries/HandleTimeSeriesReferences.cs index a30dfbcab09b..f756bf53cef0 100644 --- a/src/Raven.Server/Documents/Indexes/Workers/TimeSeries/HandleTimeSeriesReferences.cs +++ b/src/Raven.Server/Documents/Indexes/Workers/TimeSeries/HandleTimeSeriesReferences.cs @@ -28,6 +28,11 @@ protected override IndexItem GetItem(DocumentsOperationContext databaseContext, return new TimeSeriesIndexItem(timeSeries.LuceneKey, timeSeries.DocId, timeSeries.Etag, default, timeSeries.Name, timeSeries.SegmentSize, timeSeries); } + protected override string GetNextItemId(IndexItem indexItem) + { + return indexItem.LowerSourceDocumentId; + } + public override void HandleDelete(Tombstone tombstone, string collection, Lazy writer, TransactionOperationContext indexContext, IndexingStatsScope stats) { using (DocumentIdWorker.GetSliceFromId(indexContext, tombstone.LowerId, out Slice documentIdPrefixWithTsKeySeparator, SpecialChars.RecordSeparator)) diff --git a/test/SlowTests/Issues/RavenDB-15754.cs b/test/SlowTests/Issues/RavenDB-15754.cs index 3f4e361117e3..a62c09df836d 100644 --- a/test/SlowTests/Issues/RavenDB-15754.cs +++ b/test/SlowTests/Issues/RavenDB-15754.cs @@ -52,11 +52,15 @@ public async Task CanIndexReferencedDocumentChange() using (var bulk = store.BulkInsert()) { + var baseDate = new DateTime(2024, 9, 1); for (var i = 0; i < _employeesCount; i++) { + var date = baseDate.AddDays(i); + var dateString = date.ToString("yyyy-MM-dd"); await bulk.StoreAsync(new Employee { - CompanyId = company.Id + CompanyId = company.Id, + Id = $"Employees/Accounts/937-A/{dateString}" }); } } @@ -447,11 +451,15 @@ public async Task CanIndexReferencedCompareExchangeWithQuery() using (var bulk = store.BulkInsert()) { + var baseDate = new DateTime(2024, 9, 1); for (var i = 0; i < _employeesCount; i++) { + var date = baseDate.AddDays(i); + var dateString = date.ToString("yyyy-MM-dd"); await bulk.StoreAsync(new Employee { - CompanyId = _commonName + CompanyId = _commonName, + Id = $"Employees/Accounts/937-A/{dateString}" }); } }