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

reiabreu pushed a commit to branch isolation-scheduler-visible-for-testing
in repository https://gitbox.apache.org/repos/asf/storm.git

commit f6ce363a9230bd8eb395214579edfd772d746b7c
Author: Rui Abreu <[email protected]>
AuthorDate: Sun Jun 28 15:18:54 2026 +0100

    scheduler: replace reflection with @VisibleForTesting in 
IsolationSchedulerTest
    
    Make IsolationScheduler#hostAssignableSlots package-private and annotate
    it with @VisibleForTesting so the test can call it directly instead of
    using reflection, which is fragile under refactoring.
    
    Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
---
 .../org/apache/storm/scheduler/IsolationScheduler.java  |  4 +++-
 .../apache/storm/scheduler/IsolationSchedulerTest.java  | 17 ++++-------------
 2 files changed, 7 insertions(+), 14 deletions(-)

diff --git 
a/storm-server/src/main/java/org/apache/storm/scheduler/IsolationScheduler.java 
b/storm-server/src/main/java/org/apache/storm/scheduler/IsolationScheduler.java
index 4ec48b554..0e2c283a6 100644
--- 
a/storm-server/src/main/java/org/apache/storm/scheduler/IsolationScheduler.java
+++ 
b/storm-server/src/main/java/org/apache/storm/scheduler/IsolationScheduler.java
@@ -26,6 +26,7 @@ import java.util.TreeMap;
 import org.apache.commons.lang3.Validate;
 import org.apache.storm.DaemonConfig;
 import org.apache.storm.metric.StormMetricsRegistry;
+import org.apache.storm.shade.com.google.common.annotations.VisibleForTesting;
 import org.apache.storm.utils.Utils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -309,7 +310,8 @@ public class IsolationScheduler implements IScheduler {
     //                                                         need fewer 
evictions
     //   3. (tertiary)  host name,                 ascending  — deterministic 
order
     //                                                         for testability
-    private LinkedList<HostAssignableSlots> hostAssignableSlots(Cluster 
cluster) {
+    @VisibleForTesting
+    LinkedList<HostAssignableSlots> hostAssignableSlots(Cluster cluster) {
         List<WorkerSlot> assignableSlots = cluster.getAssignableSlots();
         Map<String, List<WorkerSlot>> hostAssignableSlots = new 
HashMap<String, List<WorkerSlot>>();
         Map<String, Integer> hostFreeSlotCounts = new HashMap<String, 
Integer>();
diff --git 
a/storm-server/src/test/java/org/apache/storm/scheduler/IsolationSchedulerTest.java
 
b/storm-server/src/test/java/org/apache/storm/scheduler/IsolationSchedulerTest.java
index 3fbc43e15..6c8cd2464 100644
--- 
a/storm-server/src/test/java/org/apache/storm/scheduler/IsolationSchedulerTest.java
+++ 
b/storm-server/src/test/java/org/apache/storm/scheduler/IsolationSchedulerTest.java
@@ -12,7 +12,6 @@
 
 package org.apache.storm.scheduler;
 
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -50,14 +49,6 @@ public class IsolationSchedulerTest {
                            topologies, new HashMap<String, Object>());
     }
 
-    @SuppressWarnings("unchecked")
-    private static LinkedList<IsolationScheduler.HostAssignableSlots> 
hostAssignableSlots(
-        IsolationScheduler scheduler, Cluster cluster) throws Exception {
-        Method method = 
IsolationScheduler.class.getDeclaredMethod("hostAssignableSlots", 
Cluster.class);
-        method.setAccessible(true);
-        return (LinkedList<IsolationScheduler.HostAssignableSlots>) 
method.invoke(scheduler, cluster);
-    }
-
     private static List<String> 
hostOrder(LinkedList<IsolationScheduler.HostAssignableSlots> slots) {
         List<String> hosts = new ArrayList<>();
         for (IsolationScheduler.HostAssignableSlots slot : slots) {
@@ -67,7 +58,7 @@ public class IsolationSchedulerTest {
     }
 
     @Test
-    public void hostAssignableSlots_prefersHostWithMoreFreeSlots() throws 
Exception {
+    public void hostAssignableSlots_prefersHostWithMoreFreeSlots() {
         Map<String, SupervisorDetails> supervisors = new HashMap<>();
         supervisors.put("sup-busy", mkSupervisor("sup-busy", "host-busy", 2));
         supervisors.put("sup-free", mkSupervisor("sup-free", "host-free", 2));
@@ -83,7 +74,7 @@ public class IsolationSchedulerTest {
                        
Collections.singletonList(filler.getExecutors().iterator().next()));
 
         LinkedList<IsolationScheduler.HostAssignableSlots> ranked =
-            hostAssignableSlots(new IsolationScheduler(), cluster);
+            new IsolationScheduler().hostAssignableSlots(cluster);
 
         assertEquals(2, ranked.size());
         assertEquals("host-free", ranked.get(0).getHostName());
@@ -94,7 +85,7 @@ public class IsolationSchedulerTest {
     }
 
     @Test
-    public void hostAssignableSlots_breaksTiesByHostName() throws Exception {
+    public void hostAssignableSlots_breaksTiesByHostName() {
         Map<String, SupervisorDetails> supervisors = new HashMap<>();
         supervisors.put("sup-a", mkSupervisor("sup-a", "host-aaa", 2));
         supervisors.put("sup-b", mkSupervisor("sup-b", "host-bbb", 2));
@@ -102,7 +93,7 @@ public class IsolationSchedulerTest {
         Cluster cluster = mkCluster(supervisors, new Topologies());
 
         LinkedList<IsolationScheduler.HostAssignableSlots> ranked =
-            hostAssignableSlots(new IsolationScheduler(), cluster);
+            new IsolationScheduler().hostAssignableSlots(cluster);
 
         assertEquals(2, ranked.size());
         assertEquals(2, ranked.get(0).getWorkerSlots().size());

Reply via email to