From 187b0e8ac711d42ef53894057e3e5d3d710ea517 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Wed, 31 Jan 2024 20:01:51 -0800 Subject: [PATCH] Use ReadOnly Session when indixing content items (#15216) --- .../Services/AzureAISearchIndexingService.cs | 21 ++++++------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/src/OrchardCore/OrchardCore.Search.AzureAI.Core/Services/AzureAISearchIndexingService.cs b/src/OrchardCore/OrchardCore.Search.AzureAI.Core/Services/AzureAISearchIndexingService.cs index e9f43a2edcf..34d4b2c18ec 100644 --- a/src/OrchardCore/OrchardCore.Search.AzureAI.Core/Services/AzureAISearchIndexingService.cs +++ b/src/OrchardCore/OrchardCore.Search.AzureAI.Core/Services/AzureAISearchIndexingService.cs @@ -21,7 +21,7 @@ public class AzureAISearchIndexingService private readonly IIndexingTaskManager _indexingTaskManager; private readonly AzureAISearchIndexSettingsService _azureAISearchIndexSettingsService; private readonly AzureAIIndexDocumentManager _indexDocumentManager; - private readonly ISession _session; + private readonly IStore _store; private readonly IContentManager _contentManager; private readonly IEnumerable _contentItemIndexHandlers; private readonly ILogger _logger; @@ -30,7 +30,7 @@ public class AzureAISearchIndexingService IIndexingTaskManager indexingTaskManager, AzureAISearchIndexSettingsService azureAISearchIndexSettingsService, AzureAIIndexDocumentManager indexDocumentManager, - ISession session, + IStore store, IContentManager contentManager, IEnumerable contentItemIndexHandlers, ILogger logger) @@ -38,7 +38,7 @@ public class AzureAISearchIndexingService _indexingTaskManager = indexingTaskManager; _azureAISearchIndexSettingsService = azureAISearchIndexSettingsService; _indexDocumentManager = indexDocumentManager; - _session = session; + _store = store; _contentManager = contentManager; _contentItemIndexHandlers = contentItemIndexHandlers; _logger = logger; @@ -81,6 +81,7 @@ public async Task ProcessContentItemsAsync(params string[] indexNames) var tasks = new List(); var allContentTypes = indexSettings.SelectMany(x => x.IndexedContentTypes ?? []).Distinct().ToList(); + var readOnlySession = _store.CreateSession(withTracking: false); while (tasks.Count <= _batchSize) { @@ -107,25 +108,15 @@ public async Task ProcessContentItemsAsync(params string[] indexNames) if (indexSettings.Any(x => !x.IndexLatest)) { - var publishedContentItems = await _session.Query(index => index.Published && index.ContentType.IsIn(allContentTypes) && index.ContentItemId.IsIn(updatedContentItemIds)).ListAsync(); + var publishedContentItems = await readOnlySession.Query(index => index.Published && index.ContentType.IsIn(allContentTypes) && index.ContentItemId.IsIn(updatedContentItemIds)).ListAsync(); allPublished = publishedContentItems.DistinctBy(x => x.ContentItemId) .ToDictionary(k => k.ContentItemId); - - foreach (var publishedContentItem in publishedContentItems) - { - _session.Detach(publishedContentItem); - } } if (indexSettings.Any(x => x.IndexLatest)) { - var latestContentItems = await _session.Query(index => index.Latest && index.ContentType.IsIn(allContentTypes) && index.ContentItemId.IsIn(updatedContentItemIds)).ListAsync(); + var latestContentItems = await readOnlySession.Query(index => index.Latest && index.ContentType.IsIn(allContentTypes) && index.ContentItemId.IsIn(updatedContentItemIds)).ListAsync(); allLatest = latestContentItems.DistinctBy(x => x.ContentItemId).ToDictionary(k => k.ContentItemId); - - foreach (var latestContentItem in latestContentItems) - { - _session.Detach(latestContentItem); - } } foreach (var task in tasks)