GEODE-8742: fix list gateways command when dispatcher-threads is set … (#5803)
* GEODE-8742: fix list gateways command when dispatcher-threads is set to 1
* empty commit to re-launch CI
* using CommandStringBuilder instead of hard-coding command
* small test change
* empty commit to re-launch CI
* empty commit to re-launch CI
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/beans/GatewaySenderMBeanBridge.java b/geode-core/src/main/java/org/apache/geode/management/internal/beans/GatewaySenderMBeanBridge.java
index 7eda2b4..c07802b 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/beans/GatewaySenderMBeanBridge.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/beans/GatewaySenderMBeanBridge.java
@@ -324,10 +324,20 @@
}
}
} else {
- ConcurrentSerialGatewaySenderEventProcessor cProc =
- (ConcurrentSerialGatewaySenderEventProcessor) ((AbstractGatewaySender) sender)
- .getEventProcessor();
- for (SerialGatewaySenderEventProcessor lProc : cProc.getProcessors()) {
+ if (getDispatcherThreads() > 1) {
+ ConcurrentSerialGatewaySenderEventProcessor cProc =
+ (ConcurrentSerialGatewaySenderEventProcessor) ((AbstractGatewaySender) sender)
+ .getEventProcessor();
+ for (SerialGatewaySenderEventProcessor lProc : cProc.getProcessors()) {
+ if (lProc.getDispatcher() != null && lProc.getDispatcher().isConnectedToRemote()) {
+ this.dispatcher = lProc.getDispatcher();
+ return true;
+ }
+ }
+ } else {
+ SerialGatewaySenderEventProcessor lProc =
+ (SerialGatewaySenderEventProcessor) ((AbstractGatewaySender) sender)
+ .getEventProcessor();
if (lProc.getDispatcher() != null && lProc.getDispatcher().isConnectedToRemote()) {
this.dispatcher = lProc.getDispatcher();
return true;
diff --git a/geode-wan/src/distributedTest/java/org/apache/geode/internal/cache/wan/wancommand/ListGatewaysCommandDUnitTest.java b/geode-wan/src/distributedTest/java/org/apache/geode/internal/cache/wan/wancommand/ListGatewaysCommandDUnitTest.java
index ba1de8e..b90159c 100644
--- a/geode-wan/src/distributedTest/java/org/apache/geode/internal/cache/wan/wancommand/ListGatewaysCommandDUnitTest.java
+++ b/geode-wan/src/distributedTest/java/org/apache/geode/internal/cache/wan/wancommand/ListGatewaysCommandDUnitTest.java
@@ -35,6 +35,7 @@
import org.junit.experimental.categories.Category;
import org.apache.geode.management.GatewayReceiverMXBean;
+import org.apache.geode.management.internal.cli.util.CommandStringBuilder;
import org.apache.geode.management.internal.i18n.CliStrings;
import org.apache.geode.test.awaitility.GeodeAwaitility;
import org.apache.geode.test.dunit.rules.ClusterStartupRule;
@@ -450,6 +451,35 @@
.hasRowSize(expectedGwReceiverSectionSize).hasColumns().contains("Port", "Member");
}
+ @Test
+ public void testListGatewaysWithOneDispatcherThread() {
+ String command = new CommandStringBuilder(CliStrings.CREATE_GATEWAYSENDER)
+ .addOption(CliStrings.CREATE_GATEWAYSENDER__ID, "ln_Serial")
+ .addOption(CliStrings.CREATE_GATEWAYSENDER__REMOTEDISTRIBUTEDSYSTEMID, "2")
+ .addOption(CliStrings.CREATE_GATEWAYSENDER__DISPATCHERTHREADS, "1")
+ .getCommandString();
+
+ int lnPort = locatorSite1.getPort();
+
+ // setup servers in Site #1 (London)
+ server1 = clusterStartupRule.startServerVM(3, lnPort);
+ server2 = clusterStartupRule.startServerVM(4, lnPort);
+ server3 = clusterStartupRule.startServerVM(5, lnPort);
+
+ gfsh.executeAndAssertThat(command).statusIsSuccess();
+
+ gfsh.executeAndAssertThat(CliStrings.LIST_GATEWAY).statusIsSuccess()
+ .hasTableSection("gatewaySenders")
+ .hasRowSize(3).hasColumn("Status").contains("Running, not Connected");
+
+ gfsh.executeAndAssertThat(
+ CliStrings.LIST_GATEWAY + " --" + CliStrings.LIST_GATEWAY__SHOW_SENDERS_ONLY)
+ .statusIsSuccess()
+ .hasNoSection("gatewayReceivers")
+ .hasTableSection("gatewaySenders")
+ .hasRowSize(3).hasColumn("Status").contains("Running, not Connected");
+ }
+
void setupClusters() {
Integer lnPort = locatorSite1.getPort();
Integer nyPort = locatorSite2.getPort();