From f4e97242a5435c298ecfb701f42e6b6960018be9 Mon Sep 17 00:00:00 2001 From: Andrew Purtell Date: Fri, 1 May 2026 16:51:39 -0700 Subject: [PATCH] PHOENIX-7831 PhoenixQueryTimeoutIT wait for DelayedRegionObserver to load --- .../phoenix/iterate/PhoenixQueryTimeoutIT.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/phoenix-core/src/it/java/org/apache/phoenix/iterate/PhoenixQueryTimeoutIT.java b/phoenix-core/src/it/java/org/apache/phoenix/iterate/PhoenixQueryTimeoutIT.java index ffd0bbaf257..98724c8dc64 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/iterate/PhoenixQueryTimeoutIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/iterate/PhoenixQueryTimeoutIT.java @@ -43,6 +43,7 @@ import org.apache.hadoop.hbase.coprocessor.ObserverContext; import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment; import org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver; +import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.phoenix.coprocessorclient.BaseScannerRegionObserverConstants; import org.apache.phoenix.end2end.NeedsOwnMiniClusterTest; import org.apache.phoenix.end2end.ParallelStatsDisabledIT; @@ -191,6 +192,22 @@ public void testScanningResultIteratorQueryTimeoutForPagingWithVeryLowTimeout() DelayedRegionObserver.setDelay(5); // Add delay on the server so that the query times out TestUtil.addCoprocessor(conn, tableName, DelayedRegionObserver.class); + // modifyTable updates the master descriptor but region servers reopen + // asynchronously. Poll until the coprocessor is actually loaded. + final TableName tn = TableName.valueOf(tableName); + getUtility().waitFor(10000, 100, () -> { + List regions = getUtility().getHBaseCluster().getRegions(tn); + if (regions.isEmpty()) { + return false; + } + for (HRegion region : regions) { + if (region.getCoprocessorHost().findCoprocessor( + DelayedRegionObserver.class.getName()) == null) { + return false; + } + } + return true; + }); // Do not let BaseResultIterators throw Timeout Exception Let ScanningResultIterator handle // it. BaseResultIterators.setForTestingSetTimeoutToMaxToLetQueryPassHere(true);