You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bs...@apache.org on 2020/01/31 19:10:14 UTC
[geode] 01/01: Revert "GEODE-7652: MembershipBuilder lets you set
the local locator (#4614)"
This is an automated email from the ASF dual-hosted git repository.
bschuchardt pushed a commit to branch feature/GEODE-7652revert
in repository https://gitbox.apache.org/repos/asf/geode.git
commit e252ab2a70d05b97f98bc6f04c724737186ae889
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Fri Jan 31 11:08:57 2020 -0800
Revert "GEODE-7652: MembershipBuilder lets you set the local locator (#4614)"
This reverts commit d2947640af8c6bf16a650348bf09a28d11d27997.
---
...ReconnectWithClusterConfigurationDUnitTest.java | 1 +
.../apache/geode/distributed/LocatorDUnitTest.java | 13 +++-
.../internal/membership/MembershipJUnitTest.java | 48 ++++++-------
.../membership/gms/MembershipOnlyTest.java | 17 +++--
.../locator/GMSLocatorRecoveryIntegrationTest.java | 5 +-
.../internal/ClusterDistributionManager.java | 18 ++---
.../distributed/internal/DistributionImpl.java | 26 +++++---
.../internal/InternalDistributedSystem.java | 78 ++++------------------
.../distributed/internal/InternalLocator.java | 17 ++---
.../gms/locator/GMSLocatorIntegrationTest.java | 8 +--
.../internal/membership/api/LifecycleListener.java | 7 ++
.../internal/membership/api/MembershipBuilder.java | 5 +-
.../internal/membership/gms/GMSMembership.java | 1 +
.../membership/gms/LifecycleListenerNoOp.java | 5 ++
.../membership/gms/MembershipBuilderImpl.java | 16 +----
.../internal/membership/gms/Services.java | 25 ++-----
.../membership/gms/locator/GMSLocator.java | 19 +++---
.../gms/locator/MembershipLocatorImpl.java | 17 +----
18 files changed, 125 insertions(+), 201 deletions(-)
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/cache30/ReconnectWithClusterConfigurationDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/cache30/ReconnectWithClusterConfigurationDUnitTest.java
index 6a7c262..b51d7f2 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/cache30/ReconnectWithClusterConfigurationDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/cache30/ReconnectWithClusterConfigurationDUnitTest.java
@@ -91,6 +91,7 @@ public class ReconnectWithClusterConfigurationDUnitTest implements Serializable
locator = Locator.startLocatorAndDS(locatorPorts[locatorNumber], new File(""), props);
system = locator.getDistributedSystem();
cache = ((InternalLocator) locator).getCache();
+ ReconnectDUnitTest.savedSystem = locator.getDistributedSystem();
IgnoredException.addIgnoredException(
"org.apache.geode.ForcedDisconnectException||Possible loss of quorum");
} catch (IOException e) {
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorDUnitTest.java
index 348fdad..2e6bf6b 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorDUnitTest.java
@@ -1357,8 +1357,17 @@ public class LocatorDUnitTest implements Serializable {
public void testHostingMultipleLocators() throws Exception {
Locator.startLocator(port1, null);
- assertThatThrownBy(() -> Locator.startLocator(port2, null))
- .isInstanceOf(IllegalStateException.class);
+ try {
+ Locator.startLocator(port2, null);
+ fail("expected second locator start to fail.");
+ } catch (IllegalStateException expected) {
+ }
+
+ String locators = hostName + "[" + port1 + "]," + hostName + "[" + port2 + "]";
+
+ Properties props = getBasicProperties(locators);
+
+ getConnectedDistributedSystem(props);
}
/**
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/MembershipJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/MembershipJUnitTest.java
index 3d21f69..d70e603 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/MembershipJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/MembershipJUnitTest.java
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.isA;
+import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -45,10 +46,12 @@ import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.apache.geode.distributed.ConfigurationProperties;
+import org.apache.geode.distributed.Locator;
import org.apache.geode.distributed.internal.ClusterDistributionManager;
import org.apache.geode.distributed.internal.DMStats;
import org.apache.geode.distributed.internal.DistributionConfig;
import org.apache.geode.distributed.internal.DistributionConfigImpl;
+import org.apache.geode.distributed.internal.DistributionImpl;
import org.apache.geode.distributed.internal.InternalDistributedSystem;
import org.apache.geode.distributed.internal.InternalLocator;
import org.apache.geode.distributed.internal.SerialAckedMessage;
@@ -63,7 +66,6 @@ import org.apache.geode.distributed.internal.membership.api.Membership;
import org.apache.geode.distributed.internal.membership.api.MembershipBuilder;
import org.apache.geode.distributed.internal.membership.api.MembershipConfig;
import org.apache.geode.distributed.internal.membership.api.MembershipListener;
-import org.apache.geode.distributed.internal.membership.api.MembershipLocator;
import org.apache.geode.distributed.internal.membership.api.MembershipView;
import org.apache.geode.distributed.internal.membership.api.MessageListener;
import org.apache.geode.distributed.internal.tcpserver.TcpClient;
@@ -129,7 +131,7 @@ public class MembershipJUnitTest {
throws Exception {
Membership<InternalDistributedMember> m1 = null, m2 = null;
- InternalLocator internalLocator = null;
+ Locator l = null;
// int mcastPort = AvailablePortHelper.getRandomAvailableUDPPort();
try {
@@ -140,9 +142,8 @@ public class MembershipJUnitTest {
// this locator will hook itself up with the first Membership
// to be created
- internalLocator =
- InternalLocator.startLocator(port, new File(""), null, null, localHost, false,
- new Properties(), null, temporaryFolder.getRoot().toPath());
+ l = InternalLocator.startLocator(port, new File(""), null, null, localHost, false,
+ new Properties(), null, temporaryFolder.getRoot().toPath());
// create configuration objects
Properties nonDefault = new Properties();
@@ -158,14 +159,11 @@ public class MembershipJUnitTest {
new RemoteTransportConfig(config, ClusterDistributionManager.LOCATOR_DM_TYPE);
// start the first membership manager
- final MembershipLocator<InternalDistributedMember> membershipLocator =
- internalLocator.getMembershipLocator();
-
- m1 = createMembershipManager(config, transport, membershipLocator).getLeft();
+ m1 = createMembershipManager(config, transport).getLeft();
// start the second membership manager
final Pair<Membership, MessageListener> pair =
- createMembershipManager(config, transport, membershipLocator);
+ createMembershipManager(config, transport);
m2 = pair.getLeft();
final MessageListener listener2 = pair.getRight();
@@ -243,16 +241,15 @@ public class MembershipJUnitTest {
if (m1 != null) {
m1.shutdown();
}
- if (internalLocator != null) {
- internalLocator.stop();
+ if (l != null) {
+ l.stop();
}
}
}
private Pair<Membership, MessageListener> createMembershipManager(
final DistributionConfigImpl config,
- final RemoteTransportConfig transport,
- final MembershipLocator<InternalDistributedMember> locator) throws MemberStartupException {
+ final RemoteTransportConfig transport) throws MemberStartupException {
final MembershipListener<InternalDistributedMember> listener = mock(MembershipListener.class);
final MessageListener<InternalDistributedMember> messageListener = mock(MessageListener.class);
final DMStats stats1 = mock(DMStats.class);
@@ -293,7 +290,6 @@ public class MembershipJUnitTest {
final Membership<InternalDistributedMember> m1 =
MembershipBuilder.<InternalDistributedMember>newMembershipBuilder(
socketCreator, locatorClient, serializer, memberIdentifierFactory)
- .setMembershipLocator(locator)
.setAuthenticator(authenticator)
.setStatistics(stats1)
.setMessageListener(messageListener)
@@ -301,6 +297,10 @@ public class MembershipJUnitTest {
.setConfig(new ServiceConfig(transport, config))
.setLifecycleListener(lifeCycleListener)
.create();
+ doAnswer(invocation -> {
+ DistributionImpl.connectLocatorToServices(m1);
+ return null;
+ }).when(lifeCycleListener).started();
m1.start();
m1.startEventProcessing();
return Pair.of(m1, messageListener);
@@ -319,7 +319,7 @@ public class MembershipJUnitTest {
public void testLocatorAndTwoServersJoinUsingDiffeHellman() throws Exception {
Membership<InternalDistributedMember> m1 = null, m2 = null;
- InternalLocator internalLocator = null;
+ Locator l = null;
int mcastPort = AvailablePortHelper.getRandomAvailableUDPPort();
try {
@@ -331,9 +331,8 @@ public class MembershipJUnitTest {
p.setProperty(ConfigurationProperties.SECURITY_UDP_DHALGO, "AES:128");
// this locator will hook itself up with the first Membership
// to be created
- internalLocator =
- InternalLocator.startLocator(port, new File(""), null, null, localHost, false, p, null,
- temporaryFolder.getRoot().toPath());
+ l = InternalLocator.startLocator(port, new File(""), null, null, localHost, false, p, null,
+ temporaryFolder.getRoot().toPath());
// create configuration objects
Properties nonDefault = new Properties();
@@ -350,14 +349,11 @@ public class MembershipJUnitTest {
new RemoteTransportConfig(config, ClusterDistributionManager.LOCATOR_DM_TYPE);
// start the first membership manager
- final MembershipLocator<InternalDistributedMember> membershipLocator =
- internalLocator.getMembershipLocator();
-
- m1 = createMembershipManager(config, transport, membershipLocator).getLeft();
+ m1 = createMembershipManager(config, transport).getLeft();
// start the second membership manager
final Pair<Membership, MessageListener> pair =
- createMembershipManager(config, transport, membershipLocator);
+ createMembershipManager(config, transport);
m2 = pair.getLeft();
final MessageListener listener2 = pair.getRight();
@@ -427,8 +423,8 @@ public class MembershipJUnitTest {
if (m1 != null) {
m1.disconnect(false);
}
- if (internalLocator != null) {
- internalLocator.stop();
+ if (l != null) {
+ l.stop();
}
}
}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/MembershipOnlyTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/MembershipOnlyTest.java
index 9718e0b..c1ba5bd 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/MembershipOnlyTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/MembershipOnlyTest.java
@@ -16,6 +16,7 @@ package org.apache.geode.distributed.internal.membership.gms;
import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import java.io.IOException;
@@ -95,6 +96,7 @@ public class MembershipOnlyTest {
assertThat(membership.getView().getMembers()).hasSize(1);
}
+
@Test
public void twoMembersCanConnect() throws MemberStartupException {
Membership<MemberIdentifierImpl> member1 = startMember("member1", membershipLocator);
@@ -135,15 +137,20 @@ public class MembershipOnlyTest {
final Membership<MemberIdentifierImpl> membership =
MembershipBuilder.<MemberIdentifierImpl>newMembershipBuilder(
- socketCreator,
- locatorClient,
- dsfidSerializer,
- memberIdFactory)
- .setMembershipLocator(membershipLocator)
+ socketCreator, locatorClient, dsfidSerializer, memberIdFactory)
.setConfig(config)
.setLifecycleListener(lifeCycleListener)
.create();
+ // TODO - the membership *must* be installed in the locator at this special
+ // point during membership startup for the start to succeed
+ if (embeddedLocator != null) {
+ doAnswer(invocation -> {
+ embeddedLocator.setMembership(membership);
+ return null;
+ }).when(lifeCycleListener).started();
+ }
+
membership.start();
membership.startEventProcessing();
return membership;
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryIntegrationTest.java
index 94a7e7e..dcc49d4 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryIntegrationTest.java
@@ -41,6 +41,7 @@ import org.junit.rules.TemporaryFolder;
import org.junit.rules.TestName;
import org.apache.geode.DataSerializer;
+import org.apache.geode.distributed.Locator;
import org.apache.geode.distributed.internal.ClusterDistributionManager;
import org.apache.geode.distributed.internal.DMStats;
import org.apache.geode.distributed.internal.Distribution;
@@ -77,7 +78,7 @@ public class GMSLocatorRecoveryIntegrationTest {
private File stateFile;
private GMSLocator gmsLocator;
- private InternalLocator locator;
+ private Locator locator;
private DSFIDSerializer serializer;
private Distribution distribution;
@@ -192,7 +193,7 @@ public class GMSLocatorRecoveryIntegrationTest {
distribution =
new DistributionImpl(mockClusterDistributionManager, transport, mockSystem, mockListener,
- mockMessageListener, locator.getMembershipLocator());
+ mockMessageListener);
distribution.start();
GMSLocator gmsLocator = new GMSLocator(localHost,
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java
index 0ece626..4d765ac 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java
@@ -67,7 +67,6 @@ import org.apache.geode.distributed.internal.membership.api.MemberDisconnectedEx
import org.apache.geode.distributed.internal.membership.api.MemberIdentifier;
import org.apache.geode.distributed.internal.membership.api.MemberIdentifierFactory;
import org.apache.geode.distributed.internal.membership.api.Membership;
-import org.apache.geode.distributed.internal.membership.api.MembershipLocator;
import org.apache.geode.distributed.internal.membership.api.MembershipView;
import org.apache.geode.distributed.internal.membership.api.Message;
import org.apache.geode.internal.Assert;
@@ -296,8 +295,7 @@ public class ClusterDistributionManager implements DistributionManager {
*
* @param system The distributed system to which this distribution manager will send messages.
*/
- static ClusterDistributionManager create(InternalDistributedSystem system,
- final MembershipLocator<InternalDistributedMember> membershipLocator) {
+ static ClusterDistributionManager create(InternalDistributedSystem system) {
ClusterDistributionManager distributionManager = null;
boolean beforeJoined = true;
@@ -324,8 +322,7 @@ public class ClusterDistributionManager implements DistributionManager {
long start = System.currentTimeMillis();
distributionManager =
- new ClusterDistributionManager(system, transport, system.getAlertingService(),
- membershipLocator);
+ new ClusterDistributionManager(system, transport, system.getAlertingService());
distributionManager.assertDistributionManagerType();
beforeJoined = false; // we have now joined the system
@@ -429,8 +426,7 @@ public class ClusterDistributionManager implements DistributionManager {
*
*/
private ClusterDistributionManager(RemoteTransportConfig transport,
- InternalDistributedSystem system, AlertingService alertingService,
- MembershipLocator<InternalDistributedMember> locator) {
+ InternalDistributedSystem system, AlertingService alertingService) {
this.system = system;
this.transport = transport;
@@ -463,7 +459,7 @@ public class ClusterDistributionManager implements DistributionManager {
DMListener listener = new DMListener(this);
distribution = DistributionImpl
.createDistribution(this, transport, system, listener,
- this::handleIncomingDMsg, locator);
+ this::handleIncomingDMsg);
sb.append(System.currentTimeMillis() - start);
@@ -492,10 +488,8 @@ public class ClusterDistributionManager implements DistributionManager {
* @param system The distributed system to which this distribution manager will send messages.
*/
private ClusterDistributionManager(InternalDistributedSystem system,
- RemoteTransportConfig transport,
- AlertingService alertingService,
- final MembershipLocator<InternalDistributedMember> membershipLocator) {
- this(transport, system, alertingService, membershipLocator);
+ RemoteTransportConfig transport, AlertingService alertingService) {
+ this(transport, system, alertingService);
boolean finishedConstructor = false;
try {
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java
index b81d2ac..482fe9d 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java
@@ -57,7 +57,6 @@ import org.apache.geode.distributed.internal.membership.api.MembershipBuilder;
import org.apache.geode.distributed.internal.membership.api.MembershipClosedException;
import org.apache.geode.distributed.internal.membership.api.MembershipConfigurationException;
import org.apache.geode.distributed.internal.membership.api.MembershipListener;
-import org.apache.geode.distributed.internal.membership.api.MembershipLocator;
import org.apache.geode.distributed.internal.membership.api.MembershipStatistics;
import org.apache.geode.distributed.internal.membership.api.MembershipView;
import org.apache.geode.distributed.internal.membership.api.Message;
@@ -110,11 +109,9 @@ public class DistributionImpl implements Distribution {
public DistributionImpl(final ClusterDistributionManager clusterDistributionManager,
- final RemoteTransportConfig transport,
- final InternalDistributedSystem system,
+ final RemoteTransportConfig transport, final InternalDistributedSystem system,
final MembershipListener<InternalDistributedMember> listener,
- final MessageListener<InternalDistributedMember> messageListener,
- final MembershipLocator<InternalDistributedMember> locator) {
+ final MessageListener<InternalDistributedMember> messageListener) {
this.clusterDistributionManager = clusterDistributionManager;
this.transportConfig = transport;
this.tcpDisabled = transportConfig.isTcpDisabled();
@@ -140,7 +137,6 @@ public class DistributionImpl implements Distribution {
locatorClient,
InternalDataSerializer.getDSFIDSerializer(),
new ClusterDistributionManager.ClusterDistributionManagerIDFactory())
- .setMembershipLocator(locator)
.setAuthenticator(
new GMSAuthenticator(system.getSecurityProperties(), system.getSecurityService(),
system.getSecurityLogWriter(), system.getInternalLogWriter()))
@@ -160,6 +156,14 @@ public class DistributionImpl implements Distribution {
}
}
+ public static void connectLocatorToServices(Membership<InternalDistributedMember> membership) {
+ // see if a locator was started and put it in GMS Services
+ InternalLocator l = (InternalLocator) Locator.getLocator();
+ if (l != null && l.getMembershipLocator() != null) {
+ l.getMembershipLocator().setMembership(membership);
+ }
+ }
+
@Override
public Membership<InternalDistributedMember> getMembership() {
return membership;
@@ -213,12 +217,11 @@ public class DistributionImpl implements Distribution {
ClusterDistributionManager clusterDistributionManager, RemoteTransportConfig transport,
InternalDistributedSystem system,
MembershipListener<InternalDistributedMember> listener,
- MessageListener<InternalDistributedMember> messageListener,
- final MembershipLocator<InternalDistributedMember> locator) {
+ MessageListener<InternalDistributedMember> messageListener) {
DistributionImpl distribution =
new DistributionImpl(clusterDistributionManager, transport, system, listener,
- messageListener, locator);
+ messageListener);
distribution.start();
return distribution;
}
@@ -913,6 +916,11 @@ public class DistributionImpl implements Distribution {
}
@Override
+ public void started() {
+ connectLocatorToServices(distribution.getMembership());
+ }
+
+ @Override
public void forcedDisconnect() {
// stop server locators immediately since they may not have correct
// information. This has caused client failures in bridge/wan
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalDistributedSystem.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalDistributedSystem.java
index 2ed25ae..fa53678 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalDistributedSystem.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalDistributedSystem.java
@@ -77,7 +77,6 @@ import org.apache.geode.distributed.DurableClientAttributes;
import org.apache.geode.distributed.internal.locks.GrantorRequestProcessor;
import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
import org.apache.geode.distributed.internal.membership.api.MembershipInformation;
-import org.apache.geode.distributed.internal.membership.api.MembershipLocator;
import org.apache.geode.distributed.internal.membership.api.QuorumChecker;
import org.apache.geode.internal.Assert;
import org.apache.geode.internal.InternalDataSerializer;
@@ -199,23 +198,6 @@ public class InternalDistributedSystem extends DistributedSystem
private final AtomicReference<ClusterAlertMessaging> clusterAlertMessaging =
new AtomicReference<>();
- // captured in initialize() when starting so that we can hand it to new instance when restarting
- private MembershipLocator<InternalDistributedMember> membershipLocator;
-
- /**
- * If the experimental multiple-system feature is enabled, always create a new system.
- *
- * <p>
- * Otherwise, create a new InternalDistributedSystem with the given properties, or connect to an
- * existing one with the same properties.
- */
- public static InternalDistributedSystem connectInternal(
- Properties config,
- SecurityConfig securityConfig,
- MetricsService.Builder metricsSessionBuilder) {
- return connectInternal(config, securityConfig, metricsSessionBuilder, null);
- }
-
/**
* If the experimental multiple-system feature is enabled, always create a new system.
*
@@ -223,11 +205,8 @@ public class InternalDistributedSystem extends DistributedSystem
* Otherwise, create a new InternalDistributedSystem with the given properties, or connect to an
* existing one with the same properties.
*/
- public static InternalDistributedSystem connectInternal(
- Properties config,
- SecurityConfig securityConfig,
- MetricsService.Builder metricsSessionBuilder,
- final MembershipLocator<InternalDistributedMember> locator) {
+ public static InternalDistributedSystem connectInternal(Properties config,
+ SecurityConfig securityConfig, MetricsService.Builder metricsSessionBuilder) {
if (config == null) {
config = new Properties();
}
@@ -235,7 +214,6 @@ public class InternalDistributedSystem extends DistributedSystem
if (Boolean.getBoolean(ALLOW_MULTIPLE_SYSTEMS_PROPERTY)) {
return new Builder(config, metricsSessionBuilder)
.setSecurityConfig(securityConfig)
- .setLocator(locator)
.build();
}
@@ -286,7 +264,6 @@ public class InternalDistributedSystem extends DistributedSystem
// Make a new connection to the distributed system
InternalDistributedSystem newSystem = new Builder(config, metricsSessionBuilder)
.setSecurityConfig(securityConfig)
- .setLocator(locator)
.build();
addSystem(newSystem);
return newSystem;
@@ -674,9 +651,7 @@ public class InternalDistributedSystem extends DistributedSystem
* Initializes this connection to a distributed system with the current configuration state.
*/
private void initialize(SecurityManager securityManager, PostProcessor postProcessor,
- MetricsService.Builder metricsServiceBuilder,
- final MembershipLocator<InternalDistributedMember> membershipLocatorArg) {
-
+ MetricsService.Builder metricsServiceBuilder) {
if (originalConfig.getLocators().equals("")) {
if (originalConfig.getMcastPort() != 0) {
throw new GemFireConfigException("The " + LOCATORS + " attribute can not be empty when the "
@@ -765,7 +740,7 @@ public class InternalDistributedSystem extends DistributedSystem
}
try {
- startInitLocator(membershipLocatorArg);
+ startInitLocator();
} catch (InterruptedException e) {
throw new SystemConnectException("Startup has been interrupted", e);
}
@@ -776,13 +751,12 @@ public class InternalDistributedSystem extends DistributedSystem
if (!isLoner) {
try {
- dm = ClusterDistributionManager.create(this, membershipLocator);
+ dm = ClusterDistributionManager.create(this);
// fix bug #46324
if (InternalLocator.hasLocator()) {
- InternalLocator internalLocator = InternalLocator.getLocator();
+ InternalLocator locator = InternalLocator.getLocator();
getDistributionManager().addHostedLocators(getDistributedMember(),
- InternalLocator.getLocatorStrings(),
- internalLocator.isSharedConfigurationEnabled());
+ InternalLocator.getLocatorStrings(), locator.isSharedConfigurationEnabled());
}
} finally {
if (dm == null && quorumChecker != null) {
@@ -806,7 +780,7 @@ public class InternalDistributedSystem extends DistributedSystem
}
if (attemptingToReconnect && (startedLocator == null)) {
try {
- startInitLocator(membershipLocatorArg);
+ startInitLocator();
} catch (InterruptedException e) {
throw new SystemConnectException("Startup has been interrupted", e);
}
@@ -879,25 +853,11 @@ public class InternalDistributedSystem extends DistributedSystem
}
/**
- * Starts a locator in this JVM iff the distribution config wants one started.
- *
- * @return the membershipLocatorArg if the distribution config has no locator specified;
- * otherwise starts a new InternalLocator and returns its associated MembershipLocator
- *
* @since GemFire 5.7
- * @param membershipLocatorArg on initial startup, a MembershipLocator provided explicitly by
- * a caller, or null; on restart, the old MembershipLocator (from the previous instance of
- * InternalDistributedSystem.)
*/
- private void startInitLocator(
- final MembershipLocator<InternalDistributedMember> membershipLocatorArg)
- throws InterruptedException {
-
- final String locatorString = originalConfig.getStartLocator();
- final boolean shouldStartLocator = locatorString.length() > 0;
-
- if (!shouldStartLocator) {
- membershipLocator = membershipLocatorArg;
+ private void startInitLocator() throws InterruptedException {
+ String locatorString = originalConfig.getStartLocator();
+ if (locatorString.length() == 0) {
return;
}
@@ -926,13 +886,10 @@ public class InternalDistributedSystem extends DistributedSystem
boolean startedPeerLocation = false;
try {
startedLocator.startPeerLocation();
- membershipLocator = startedLocator.getMembershipLocator();
startedPeerLocation = true;
} finally {
if (!startedPeerLocation) {
startedLocator.stop();
- startedLocator = null;
- membershipLocator = null;
}
}
} catch (IOException e) {
@@ -2611,8 +2568,7 @@ public class InternalDistributedSystem extends DistributedSystem
try {
- newDS = connectInternal(configProps, null, metricsService.getRebuilder(),
- membershipLocator);
+ newDS = connectInternal(configProps, null, metricsService.getRebuilder());
} catch (CancelException e) {
if (isReconnectCancelled()) {
@@ -3005,8 +2961,6 @@ public class InternalDistributedSystem extends DistributedSystem
private SecurityConfig securityConfig;
private MetricsService.Builder metricsServiceBuilder;
- private MembershipLocator<InternalDistributedMember> locator;
-
public Builder(Properties configProperties, MetricsService.Builder metricsServiceBuilder) {
this.configProperties = configProperties;
this.metricsServiceBuilder = metricsServiceBuilder;
@@ -3017,12 +2971,6 @@ public class InternalDistributedSystem extends DistributedSystem
return this;
}
- public Builder setLocator(
- final MembershipLocator<InternalDistributedMember> locator) {
- this.locator = locator;
- return this;
- }
-
/**
* Builds and initializes new instance of InternalDistributedSystem.
*/
@@ -3041,7 +2989,7 @@ public class InternalDistributedSystem extends DistributedSystem
FunctionStatsManager::new);
newSystem
.initialize(securityConfig.getSecurityManager(), securityConfig.getPostProcessor(),
- metricsServiceBuilder, locator);
+ metricsServiceBuilder);
notifyConnectListeners(newSystem);
stopThreads = false;
return newSystem;
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalLocator.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalLocator.java
index b7475ad..8466dfb 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalLocator.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalLocator.java
@@ -110,7 +110,6 @@ import org.apache.geode.management.internal.configuration.handlers.SharedConfigu
import org.apache.geode.management.internal.configuration.messages.ClusterManagementServiceInfoRequest;
import org.apache.geode.management.internal.configuration.messages.SharedConfigurationStatusRequest;
import org.apache.geode.management.internal.configuration.messages.SharedConfigurationStatusResponse;
-import org.apache.geode.metrics.internal.InternalDistributedSystemMetricsService;
import org.apache.geode.security.AuthTokenEnabledComponents;
/**
@@ -562,9 +561,9 @@ public class InternalLocator extends Locator implements ConnectListener, LogConf
membershipLocator.addHandler(InfoRequest.class, new InfoRequestHandler());
restartHandlers.add((ds, cache, sharedConfig) -> {
- final InternalDistributedSystem ids = (InternalDistributedSystem) ds;
- // let old locator know about new membership object
- membershipLocator.setMembership(ids.getDM().getDistribution().getMembership());
+ InternalDistributedSystem ids = (InternalDistributedSystem) ds;
+ Distribution distribution = ids.getDM().getDistribution();
+ membershipLocator.setMembership(distribution.getMembership());
});
}
@@ -659,7 +658,7 @@ public class InternalLocator extends Locator implements ConnectListener, LogConf
/**
* @return the TcpHandler for peer to peer discovery
*/
- public MembershipLocator<InternalDistributedMember> getMembershipLocator() {
+ public MembershipLocator getMembershipLocator() {
return membershipLocator;
}
@@ -734,17 +733,13 @@ public class InternalLocator extends Locator implements ConnectListener, LogConf
logger.info("Starting distributed system");
internalDistributedSystem =
- InternalDistributedSystem
- .connectInternal(distributedSystemProperties, null,
- new InternalDistributedSystemMetricsService.Builder(),
- membershipLocator);
+ (InternalDistributedSystem) DistributedSystem.connect(distributedSystemProperties);
if (peerLocator) {
// We've created a peer location message handler - it needs to be connected to
// the membership service in order to get membership view notifications
membershipLocator
- .setMembership(internalDistributedSystem.getDM()
- .getDistribution().getMembership());
+ .setMembership(internalDistributedSystem.getDM().getDistribution().getMembership());
}
internalDistributedSystem.addDisconnectListener(sys -> stop(false, false, false));
diff --git a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorIntegrationTest.java b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorIntegrationTest.java
index 7086f34..cab82dc 100644
--- a/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorIntegrationTest.java
+++ b/geode-membership/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorIntegrationTest.java
@@ -30,7 +30,7 @@ import org.apache.geode.distributed.internal.membership.api.MemberDataBuilder;
import org.apache.geode.distributed.internal.membership.api.MemberIdentifier;
import org.apache.geode.distributed.internal.membership.api.MemberIdentifierFactoryImpl;
import org.apache.geode.distributed.internal.membership.api.MembershipConfigurationException;
-import org.apache.geode.distributed.internal.membership.api.MembershipLocator;
+import org.apache.geode.distributed.internal.membership.gms.GMSMembership;
import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
import org.apache.geode.distributed.internal.membership.gms.MembershipLocatorStatisticsNoOp;
import org.apache.geode.distributed.internal.membership.gms.Services;
@@ -85,9 +85,9 @@ public class GMSLocatorIntegrationTest {
services.getSerializer().getObjectDeserializer()),
services.getSerializer().getObjectSerializer(),
services.getSerializer().getObjectDeserializer());
-
- final MembershipLocator membershipLocator = mock(MembershipLocator.class);
- gmsLocator.setServices(services);
+ GMSMembership membership = mock(GMSMembership.class);
+ when(membership.getServices()).thenReturn(services);
+ gmsLocator.setMembership(membership);
}
@Test
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/LifecycleListener.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/LifecycleListener.java
index 68118ff..32f5c49 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/LifecycleListener.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/LifecycleListener.java
@@ -33,6 +33,13 @@ public interface LifecycleListener<ID extends MemberIdentifier> {
final ID memberID);
/**
+ * Invoked when the Membership is starting. All membership services will have been
+ * initialized and had their "started" methods invoked but we will not yet have joined
+ * the cluster.
+ */
+ void started();
+
+ /**
* Invoked when the Membership has successfully joined the cluster. At this point the
* membership address is stable.
*/
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MembershipBuilder.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MembershipBuilder.java
index 220a0d0..d3f491a 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MembershipBuilder.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/api/MembershipBuilder.java
@@ -32,8 +32,6 @@ public interface MembershipBuilder<ID extends MemberIdentifier> {
MembershipBuilder<ID> setMembershipListener(MembershipListener<ID> membershipListener);
- MembershipBuilder<ID> setMembershipLocator(MembershipLocator<ID> membershipLocator);
-
MembershipBuilder<ID> setMessageListener(MessageListener<ID> messageListener);
MembershipBuilder<ID> setConfig(MembershipConfig membershipConfig);
@@ -47,7 +45,6 @@ public interface MembershipBuilder<ID extends MemberIdentifier> {
final TcpClient locatorClient,
final DSFIDSerializer serializer,
final MemberIdentifierFactory<ID> memberFactory) {
- return new MembershipBuilderImpl<>(
- socketCreator, locatorClient, serializer, memberFactory);
+ return new MembershipBuilderImpl<>(socketCreator, locatorClient, serializer, memberFactory);
}
}
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java
index 4406939..ccef4ef 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java
@@ -1890,6 +1890,7 @@ public class GMSMembership<ID extends MemberIdentifier> implements Membership<ID
@Override
public void started() throws MemberStartupException {
startCleanupTimer();
+ lifecycleListener.started();
}
/* Service interface */
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/LifecycleListenerNoOp.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/LifecycleListenerNoOp.java
index 5f3f8f0..3924467 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/LifecycleListenerNoOp.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/LifecycleListenerNoOp.java
@@ -43,6 +43,11 @@ public class LifecycleListenerNoOp<ID extends MemberIdentifier> implements Lifec
}
@Override
+ public void started() {
+
+ }
+
+ @Override
public void forcedDisconnect() {
}
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MembershipBuilderImpl.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MembershipBuilderImpl.java
index 742c046..f6a46db 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MembershipBuilderImpl.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/MembershipBuilderImpl.java
@@ -24,10 +24,8 @@ import org.apache.geode.distributed.internal.membership.api.MembershipBuilder;
import org.apache.geode.distributed.internal.membership.api.MembershipConfig;
import org.apache.geode.distributed.internal.membership.api.MembershipConfigurationException;
import org.apache.geode.distributed.internal.membership.api.MembershipListener;
-import org.apache.geode.distributed.internal.membership.api.MembershipLocator;
import org.apache.geode.distributed.internal.membership.api.MembershipStatistics;
import org.apache.geode.distributed.internal.membership.api.MessageListener;
-import org.apache.geode.distributed.internal.membership.gms.locator.MembershipLocatorImpl;
import org.apache.geode.distributed.internal.tcpserver.TcpClient;
import org.apache.geode.distributed.internal.tcpserver.TcpSocketCreator;
import org.apache.geode.internal.serialization.DSFIDSerializer;
@@ -49,8 +47,6 @@ public class MembershipBuilderImpl<ID extends MemberIdentifier> implements Membe
private final MemberIdentifierFactory<ID> memberFactory;
private LifecycleListener<ID> lifecycleListener = new LifecycleListenerNoOp();
- private MembershipLocatorImpl<ID> membershipLocator;
-
public MembershipBuilderImpl(
final TcpSocketCreator socketCreator,
final TcpClient locatorClient,
@@ -81,13 +77,6 @@ public class MembershipBuilderImpl<ID extends MemberIdentifier> implements Membe
}
@Override
- public MembershipBuilder<ID> setMembershipLocator(
- final MembershipLocator<ID> membershipLocator) {
- this.membershipLocator = (MembershipLocatorImpl<ID>) membershipLocator;
- return this;
- }
-
- @Override
public MembershipBuilder<ID> setMessageListener(MessageListener<ID> messageListener) {
this.messageListener = messageListener;
return this;
@@ -110,12 +99,9 @@ public class MembershipBuilderImpl<ID extends MemberIdentifier> implements Membe
public Membership<ID> create() throws MembershipConfigurationException {
GMSMembership<ID> gmsMembership =
new GMSMembership<>(membershipListener, messageListener, lifecycleListener);
- final Services<ID> services =
+ Services<ID> services =
new Services<>(gmsMembership.getGMSManager(), statistics, authenticator,
membershipConfig, serializer, memberFactory, locatorClient, socketCreator);
- if (membershipLocator != null) {
- services.setLocators(membershipLocator.getGMSLocator(), membershipLocator);
- }
services.init();
return gmsMembership;
}
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java
index 334dc9c..a994e42 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java
@@ -46,7 +46,6 @@ import org.apache.geode.distributed.internal.membership.api.MemberStartupExcepti
import org.apache.geode.distributed.internal.membership.api.MembershipClosedException;
import org.apache.geode.distributed.internal.membership.api.MembershipConfig;
import org.apache.geode.distributed.internal.membership.api.MembershipConfigurationException;
-import org.apache.geode.distributed.internal.membership.api.MembershipLocator;
import org.apache.geode.distributed.internal.membership.api.MembershipStatistics;
import org.apache.geode.distributed.internal.membership.gms.fd.GMSHealthMonitor;
import org.apache.geode.distributed.internal.membership.gms.interfaces.HealthMonitor;
@@ -58,7 +57,6 @@ import org.apache.geode.distributed.internal.membership.gms.locator.FindCoordina
import org.apache.geode.distributed.internal.membership.gms.locator.FindCoordinatorResponse;
import org.apache.geode.distributed.internal.membership.gms.locator.GetViewRequest;
import org.apache.geode.distributed.internal.membership.gms.locator.GetViewResponse;
-import org.apache.geode.distributed.internal.membership.gms.locator.MembershipLocatorImpl;
import org.apache.geode.distributed.internal.membership.gms.membership.GMSJoinLeave;
import org.apache.geode.distributed.internal.membership.gms.messages.FinalCheckPassedMessage;
import org.apache.geode.distributed.internal.membership.gms.messages.HeartbeatMessage;
@@ -105,7 +103,6 @@ public class Services<ID extends MemberIdentifier> {
private volatile Exception shutdownCause;
private Locator<ID> locator;
- private MembershipLocator<ID> membershipLocator;
private final Timer timer = new Timer("Geode Membership Timer", true);
@@ -212,18 +209,6 @@ public class Services<ID extends MemberIdentifier> {
this.joinLeave.started();
this.healthMon.started();
this.manager.started();
-
- if (membershipLocator != null) {
- /*
- * Now that all the services have started we can let the membership locator know
- * about them. We must do this before telling the manager to joinDistributedSystem()
- * later in this method
- */
- final MembershipLocatorImpl locatorImpl =
- (MembershipLocatorImpl) this.membershipLocator;
- locatorImpl.setServices(this);
- }
-
logger.debug("All membership services have been started");
started = true;
} catch (RuntimeException e) {
@@ -345,14 +330,12 @@ public class Services<ID extends MemberIdentifier> {
return this.manager;
}
- public void setLocators(final Locator<ID> locator,
- final MembershipLocator<ID> membershipLocator) {
- this.locator = locator;
- this.membershipLocator = membershipLocator;
+ public Locator<ID> getLocator() {
+ return this.locator;
}
- public Locator<ID> getLocator() {
- return locator;
+ public void setLocator(Locator<ID> locator) {
+ this.locator = locator;
}
public JoinLeave<ID> getJoinLeave() {
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
index 815b28e..f295362 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
@@ -39,8 +39,10 @@ import org.apache.logging.log4j.Logger;
import org.apache.geode.annotations.VisibleForTesting;
import org.apache.geode.distributed.internal.membership.api.MemberIdentifier;
+import org.apache.geode.distributed.internal.membership.api.Membership;
import org.apache.geode.distributed.internal.membership.api.MembershipConfigurationException;
import org.apache.geode.distributed.internal.membership.api.MembershipLocatorStatistics;
+import org.apache.geode.distributed.internal.membership.gms.GMSMembership;
import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
import org.apache.geode.distributed.internal.membership.gms.GMSUtil;
import org.apache.geode.distributed.internal.membership.gms.Services;
@@ -130,20 +132,15 @@ public class GMSLocator<ID extends MemberIdentifier> implements Locator<ID>, Tcp
this.objectDeserializer = objectDeserializer;
}
- /**
- * Called initially and after each auto-reconnect. See restart handlers in InternalLocator
- * up in geode-core. Services must be started before this call.
- *
- */
- public synchronized boolean setServices(
- final Services<ID> services) {
- if (this.services == null || this.services.isStopped()) {
- this.services = services;
- localAddress = this.services.getMessenger().getMemberID();
+ public synchronized boolean setMembership(Membership<ID> membership) {
+ if (services == null || services.isStopped()) {
+ services = ((GMSMembership<ID>) membership).getServices();
+ localAddress = services.getMessenger().getMemberID();
Objects.requireNonNull(localAddress, "member address should have been established");
logger.info("Peer locator is connecting to local membership services with ID {}",
localAddress);
- GMSMembershipView<ID> newView = this.services.getJoinLeave().getView();
+ services.setLocator(this);
+ GMSMembershipView<ID> newView = services.getJoinLeave().getView();
if (newView != null) {
view = newView;
recoveredView = null;
diff --git a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java
index 9009d66..7a0a2d3 100644
--- a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java
+++ b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java
@@ -34,8 +34,6 @@ import org.apache.geode.distributed.internal.membership.api.MembershipConfig;
import org.apache.geode.distributed.internal.membership.api.MembershipConfigurationException;
import org.apache.geode.distributed.internal.membership.api.MembershipLocator;
import org.apache.geode.distributed.internal.membership.api.MembershipLocatorStatistics;
-import org.apache.geode.distributed.internal.membership.gms.GMSMembership;
-import org.apache.geode.distributed.internal.membership.gms.Services;
import org.apache.geode.distributed.internal.tcpserver.ProtocolChecker;
import org.apache.geode.distributed.internal.tcpserver.TcpClient;
import org.apache.geode.distributed.internal.tcpserver.TcpHandler;
@@ -143,9 +141,8 @@ public class MembershipLocatorImpl<ID extends MemberIdentifier> implements Membe
}
@Override
- public void setMembership(final Membership<ID> membership) {
- final GMSMembership<ID> gmsMembership = (GMSMembership<ID>) membership;
- setServices(gmsMembership.getServices());
+ public void setMembership(Membership<ID> membership) {
+ gmsLocator.setMembership(membership);
}
@Override
@@ -159,18 +156,10 @@ public class MembershipLocatorImpl<ID extends MemberIdentifier> implements Membe
}
@VisibleForTesting
- public GMSLocator<ID> getGMSLocator() {
+ public GMSLocator getGMSLocator() {
return this.gmsLocator;
}
- /**
- * Services is a class internal to the membership module. As such, the ability to setServices
- * is available ony within the module. It's not part of the external API.
- */
- public void setServices(final Services<ID> services) {
- gmsLocator.setServices(services);
- }
-
public void stop() {
if (isAlive()) {
logger.info("Stopping {}", this);