diff --git a/src/ServiceControl.Persistence.RavenDB/RetryStagingStore.cs b/src/ServiceControl.Persistence.RavenDB/RetryStagingStore.cs index e6e43b123e..1c64c3bc67 100644 --- a/src/ServiceControl.Persistence.RavenDB/RetryStagingStore.cs +++ b/src/ServiceControl.Persistence.RavenDB/RetryStagingStore.cs @@ -1,4 +1,4 @@ -namespace ServiceControl.Persistence.RavenDB +namespace ServiceControl.Persistence.RavenDB { using System.Collections.Generic; using System.Linq; @@ -22,7 +22,9 @@ class RetryStagingStore( { using var session = await sessionProvider.OpenSession(cancellationToken: cancellationToken); - var batch = await session.Query() + // Query through the static index. A dynamic query makes RavenDB create and keep an + // Auto/RetryBatches/ByStatus index, which has no per-index search engine setting. + var batch = await session.Query() .FirstOrDefaultAsync(b => b.Status == RetryBatchStatus.Staging, cancellationToken); return batch?.ToContract(); diff --git a/src/ServiceControl.Persistence.Tests.RavenDB/Recoverability/RetryStagingStoreIndexTests.cs b/src/ServiceControl.Persistence.Tests.RavenDB/Recoverability/RetryStagingStoreIndexTests.cs new file mode 100644 index 0000000000..14166c62b1 --- /dev/null +++ b/src/ServiceControl.Persistence.Tests.RavenDB/Recoverability/RetryStagingStoreIndexTests.cs @@ -0,0 +1,24 @@ +namespace ServiceControl.Persistence.Tests.RavenDB.Recoverability +{ + using System.Linq; + using System.Threading.Tasks; + using NUnit.Framework; + using Raven.Client.Documents.Operations.Indexes; + + // The staging query must use a static index. A dynamic query makes RavenDB create an + // Auto/RetryBatches/ByStatus index. An auto index has no per-index search engine setting, so it + // keeps the "Error Database Search Engine" custom check failing after all static indexes use Lucene. + [TestFixture] + class RetryStagingStoreIndexTests : RavenPersistenceTestBase + { + [Test] + public async Task Getting_the_staging_batch_creates_no_auto_index() + { + await RetryStagingStore.GetStagingBatch(); + + var indexNames = await DocumentStore.Maintenance.SendAsync(new GetIndexNamesOperation(0, int.MaxValue)); + + Assert.That(indexNames.Where(name => name.StartsWith("Auto/")), Is.Empty); + } + } +}