@@ -39,9 +39,6 @@ public class ReindexTests : IClassFixture<HttpIntegrationTestFixture>
3939 // multi-replica search-parameter cache convergence in CI (poll interval up to 30s, conformance refresh
4040 // up to 60s, plus reindex worker queue scheduling and retry backoffs).
4141 private static readonly TimeSpan ReindexJobCompletionTimeout = TimeSpan . FromMinutes ( 20 ) ;
42- private static readonly TimeSpan SearchParameterCleanupTimeout = TimeSpan . FromMinutes ( 2 ) ;
43- private static readonly TimeSpan SearchParameterCleanupPollDelay = TimeSpan . FromSeconds ( 5 ) ;
44- private static readonly TimeSpan SearchParameterCleanupStableWindow = TimeSpan . FromSeconds ( 30 ) ;
4542 private const string TestSearchParameterUrlPrefix = "http://my.org/" ;
4643
4744 private readonly HttpIntegrationTestFixture _fixture ;
@@ -1229,12 +1226,6 @@ private async Task CleanupSearchParametersAsync(params SearchParameter[] searchP
12291226 _output . WriteLine ( $ "Failed to delete SearchParameter/{ param ? . Id } : { ex . Message } ") ;
12301227 }
12311228 }
1232-
1233- await WaitForSearchParameterCleanupAsync ( searchParameters ) ;
1234-
1235- // Note: Final reindex is handled by ReindexTestFixture.OnDisposedAsync() which runs
1236- // once at the very end after all tests complete. This eliminates the need to reindex
1237- // after each individual test cleanup.
12381229 }
12391230
12401231 private static string CreateUniqueSearchParameterSuffix ( )
@@ -1247,82 +1238,6 @@ private static string BuildTestSearchParameterUrl(string suffix)
12471238 return $ "{ TestSearchParameterUrlPrefix } { suffix } ";
12481239 }
12491240
1250- private async Task WaitForSearchParameterCleanupAsync ( params SearchParameter [ ] searchParameters )
1251- {
1252- SearchParameter [ ] cleanupTargets = searchParameters
1253- . Where ( param => param != null && ! string . IsNullOrWhiteSpace ( param . Id ) && ! string . IsNullOrWhiteSpace ( param . Url ) )
1254- . ToArray ( ) ;
1255-
1256- if ( cleanupTargets . Length == 0 )
1257- {
1258- return ;
1259- }
1260-
1261- var stopwatch = Stopwatch . StartNew ( ) ;
1262- TimeSpan ? stableSince = null ;
1263- string [ ] lastOutstanding = Array . Empty < string > ( ) ;
1264-
1265- while ( stopwatch . Elapsed < SearchParameterCleanupTimeout )
1266- {
1267- var outstanding = new List < string > ( ) ;
1268-
1269- foreach ( var searchParameter in cleanupTargets )
1270- {
1271- bool resourceDeleted = await IsSearchParameterDeletedAsync ( searchParameter . Id ) ;
1272- bool metadataCleared = await IsSearchParameterMissingFromMetadataAsync ( searchParameter . Url ) ;
1273-
1274- if ( ! resourceDeleted || ! metadataCleared )
1275- {
1276- outstanding . Add ( $ "{ searchParameter . Id } (deleted={ resourceDeleted } , metadataCleared={ metadataCleared } )") ;
1277- }
1278- }
1279-
1280- if ( outstanding . Count == 0 )
1281- {
1282- stableSince ??= stopwatch . Elapsed ;
1283- if ( stopwatch . Elapsed - stableSince . Value >= SearchParameterCleanupStableWindow )
1284- {
1285- return ;
1286- }
1287- }
1288- else
1289- {
1290- stableSince = null ;
1291- lastOutstanding = outstanding . ToArray ( ) ;
1292- _output . WriteLine ( $ "Waiting for SearchParameter cleanup to converge: { string . Join ( ", " , lastOutstanding ) } ") ;
1293- }
1294-
1295- await Task . Delay ( SearchParameterCleanupPollDelay ) ;
1296- }
1297-
1298- Assert . Fail ( $ "Timed out waiting for SearchParameter cleanup to converge. Remaining: { string . Join ( ", " , lastOutstanding ) } ") ;
1299- }
1300-
1301- private async Task < bool > IsSearchParameterDeletedAsync ( string id )
1302- {
1303- try
1304- {
1305- await _fixture . TestFhirClient . ReadAsync < SearchParameter > ( $ "SearchParameter/{ id } ") ;
1306- return false ;
1307- }
1308- catch ( FhirClientException ex ) when ( ex . StatusCode == HttpStatusCode . NotFound || ex . StatusCode == HttpStatusCode . Gone )
1309- {
1310- return true ;
1311- }
1312- }
1313-
1314- private async Task < bool > IsSearchParameterMissingFromMetadataAsync ( string url )
1315- {
1316- using FhirResponse < CapabilityStatement > response = await _fixture . TestFhirClient . ReadAsync < CapabilityStatement > ( "metadata" ) ;
1317-
1318- return response . Resource . Rest
1319- . Where ( rest => rest ? . Resource != null )
1320- . SelectMany ( rest => rest . Resource )
1321- . Where ( resource => resource ? . SearchParam != null )
1322- . SelectMany ( resource => resource . SearchParam )
1323- . All ( searchParam => ! string . Equals ( searchParam ? . Definition , url , StringComparison . Ordinal ) ) ;
1324- }
1325-
13261241 private async Task < OperationStatus > WaitForJobCompletionAsync ( Uri jobUri , TimeSpan timeout )
13271242 {
13281243 var stopwatch = Stopwatch . StartNew ( ) ;
0 commit comments