This is an automated email from the ASF dual-hosted git repository.

virajjasani pushed a commit to branch 5.2
in repository https://gitbox.apache.org/repos/asf/phoenix.git

commit ca0de509c599d9822e9c2a244d897f787fa9ace5
Author: Andrew Purtell <[email protected]>
AuthorDate: Fri Jul 17 10:14:51 2026 -0700

    PHOENIX-7840 UpdateCacheIT recategorize as NeedsOwnMiniClusterTest (#2457)
---
 .../java/org/apache/phoenix/rpc/UpdateCacheIT.java   | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/phoenix-core/src/it/java/org/apache/phoenix/rpc/UpdateCacheIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/rpc/UpdateCacheIT.java
index 98e760a92d..621c220b74 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/rpc/UpdateCacheIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/rpc/UpdateCacheIT.java
@@ -40,8 +40,8 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
+import org.apache.phoenix.end2end.NeedsOwnMiniClusterTest;
 import org.apache.phoenix.end2end.ParallelStatsDisabledIT;
-import org.apache.phoenix.end2end.ParallelStatsDisabledTest;
 import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData;
 import org.apache.phoenix.jdbc.PhoenixEmbeddedDriver;
 import org.apache.phoenix.query.ConnectionQueryServices;
@@ -65,8 +65,24 @@ import 
org.apache.phoenix.thirdparty.com.google.common.util.concurrent.ThreadFac
 /**
  * Verifies the number of RPC calls from {@link MetaDataClient} updateCache() 
for transactional and
  * non-transactional tables.
+ *
+ * <p>Categorized as {@link NeedsOwnMiniClusterTest} so failsafe runs this 
class in its own forked
+ * JVM (reuseForks=false). The {@link #helpTestUpdateCache} helper wraps the 
JVM-singleton
+ * {@link ConnectionQueryServices} returned by {@code 
driver.getConnectionQueryServices(...)} in a
+ * Mockito spy. Because the Phoenix driver caches that CQS as a process-global 
singleton and the
+ * spy delegates to the real instance with {@code this} bound to the spy, 
every internal Phoenix
+ * call back through the services field is recorded in the spy's {@code 
InvocationContainerImpl},
+ * holding strong references to all arguments. Under the {@code 
ParallelStatsDisabledTest}
+ * execution ({@code reuseForks=true}) this class previously ran in a fork 
that had already
+ * accumulated thousands of tests' worth of cached metadata, regions, and live 
ZK clients on the
+ * same singleton; combined with the spy's invocation-history retention, the 
fork was tipping over
+ * with {@code OutOfMemoryError: Java heap space} (5.8 GB heap dump from the ZK
+ * {@code main-SendThread}) on {@link #testUpdateCacheForNonTxnTable}. Running 
in its own JVM
+ * gives the test a fresh CQS singleton with no cross-test accumulation. This 
follows the same
+ * convention as {@code MetaDataEndPointIT} and other 
singleton-state-sensitive tests in this
+ * project.
  */
-@Category(ParallelStatsDisabledTest.class)
+@Category(NeedsOwnMiniClusterTest.class)
 public class UpdateCacheIT extends ParallelStatsDisabledIT {
 
   private static final Logger LOGGER = 
LoggerFactory.getLogger(UpdateCacheIT.class);

Reply via email to