jvarenina commented on a change in pull request #7378: URL: https://github.com/apache/geode/pull/7378#discussion_r820829842
########## File path: geode-wan/src/distributedTest/java/org/apache/geode/internal/cache/wan/parallel/ParallelGatewaySenderConnectionLoadBalanceDistributedTest.java ########## @@ -0,0 +1,318 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. You may obtain a + * copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ +package org.apache.geode.internal.cache.wan.parallel; + +import static org.apache.geode.cache.server.CacheServer.DEFAULT_LOAD_POLL_INTERVAL; +import static org.apache.geode.distributed.ConfigurationProperties.DISTRIBUTED_SYSTEM_ID; +import static org.apache.geode.distributed.ConfigurationProperties.REMOTE_LOCATORS; +import static org.apache.geode.internal.cache.wan.wancommand.WANCommandUtils.getMember; +import static org.apache.geode.internal.cache.wan.wancommand.WANCommandUtils.validateGatewayReceiverMXBeanProxy; +import static org.apache.geode.internal.cache.wan.wancommand.WANCommandUtils.validateGatewaySenderMXBeanProxy; +import static org.apache.geode.internal.cache.wan.wancommand.WANCommandUtils.verifyReceiverState; +import static org.apache.geode.internal.cache.wan.wancommand.WANCommandUtils.verifySenderState; +import static org.apache.geode.test.awaitility.GeodeAwaitility.await; +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.Serializable; +import java.util.Properties; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +import org.apache.geode.cache.Region; +import org.apache.geode.cache.wan.GatewayReceiver; +import org.apache.geode.internal.cache.CacheServerImpl; +import org.apache.geode.internal.cache.tier.sockets.CacheServerStats; +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.ClientVM; +import org.apache.geode.test.dunit.rules.ClusterStartupRule; +import org.apache.geode.test.dunit.rules.MemberVM; +import org.apache.geode.test.junit.categories.WanTest; +import org.apache.geode.test.junit.rules.GfshCommandRule; + +@Category({WanTest.class}) +public class ParallelGatewaySenderConnectionLoadBalanceDistributedTest implements Serializable { + + @Rule + public ClusterStartupRule clusterStartupRule = new ClusterStartupRule(9); + + @Rule + public transient GfshCommandRule gfsh = new GfshCommandRule(); + + private MemberVM locator1Site2; + private MemberVM locator1Site1; + private MemberVM locator2Site1; + private MemberVM server1Site1; + private MemberVM server2Site1; + private MemberVM server3Site1; + private MemberVM server1Site2; + private MemberVM server2Site2; + + private ClientVM clientSite2; + + private static final String DISTRIBUTED_SYSTEM_ID_SITE1 = "1"; + private static final String DISTRIBUTED_SYSTEM_ID_SITE2 = "2"; + private static final String REGION_NAME = "test1"; + private static final int NUMBER_OF_DISPATCHER_THREADS = 20; + private static final int NUM_CONNECTION_PER_SERVER_OFFSET = 4; Review comment: It was determined this way: 1) I have added +2 because of possible ping connections. There are two servers with configured gateway-sender, so that means that there could be up to two additional ping connections per gateway-receiver. 2) I have added +1 because there are 20 gateway-sender threads configured, so if you divide 40 (threads)/3(servers) you get difference in number of connections between receivers. 3) I have added +1 just to be on safe side. I know this is not perfect as there is still possible race condition explained here https://github.com/apache/geode/pull/7378#issuecomment-1048513322 that could possibly cause connection imbalance between receivers. Regardless of this, I still decided to push this solution because these tests reproduce the issue and I was hoping to get some feedback or advice from community before trying to further improve tests and solution e.g. why it is implemented like this in a first place?, is there maybe a better way to solve this issue?, If the solution in this PR is acceptable? and so on... I really appreciate your feedback on this PR, and I will apply you comments and push the commit as soon as possible. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: notifications-unsubscr...@geode.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org