Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Main] Simplify and synchronized the way config is updated or checked #1354

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
333 changes: 285 additions & 48 deletions tc-server/src/main/java/com/tc/config/ServerConfigurationManager.java

Large diffs are not rendered by default.

7 changes: 3 additions & 4 deletions tc-server/src/main/java/com/tc/l2/ha/L2HACoordinator.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import com.tc.l2.api.L2Coordinator;
import com.tc.l2.api.ReplicatedClusterStateManager;
import com.tc.l2.state.ConsistencyManager;
import com.tc.l2.state.ServerMode;
import com.tc.l2.state.StateManager;
import com.tc.net.NodeID;
import com.tc.net.groups.AbstractGroupMessage;
Expand Down Expand Up @@ -103,12 +102,12 @@ public void connectionIDDestroyed(ConnectionID connectionID) {

@Override
public void start() {
if (this.server.getConfigSetupManager().getConfiguration().isPartialConfiguration()) {
if (this.server.getConfigSetupManager().isPartialConfiguration()) {
this.stateManager.moveToDiagnosticMode();
consoleLogger.info("Started the server in diagnostic mode");
} else if (this.server.getConfigSetupManager().getConfiguration().isRelaySource()) {
} else if (this.server.getConfigSetupManager().isRelaySource()) {
this.stateManager.moveToRelayMode();
} else if (this.server.getConfigSetupManager().getConfiguration().isRelayDestination()) {
} else if (this.server.getConfigSetupManager().isRelayDestination()) {
this.stateManager.moveToRelayMode();
}
this.stateManager.initializeAndStartElection();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,24 @@
*/
package com.tc.l2.ha;

import com.tc.config.ServerConfigurationManager;
import com.tc.l2.ha.WeightGeneratorFactory.WeightGenerator;
import org.terracotta.configuration.Configuration;


public class TopologyWeightGenerator implements WeightGenerator {

private final Configuration configuration;
private final ServerConfigurationManager configuration;
private final int initialSize;

public TopologyWeightGenerator(Configuration config) {
public TopologyWeightGenerator(ServerConfigurationManager config) {
this.configuration = config;
this.initialSize = config.getServerConfigurations().size();
this.initialSize = config.getGroupConfiguration().getNodes().size();
}

@Override
public long getWeight() {
try {
return configuration.getServerConfigurations().size();
return configuration.getGroupConfiguration().getNodes().size();
} catch (Throwable t) {
return initialSize;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,9 +167,9 @@ public TCGroupManagerImpl(ServerConfigurationManager configSetupManager, Connect
this.thisNodeID = thisNodeID;
this.bufferManagerFactory = bufferManagerFactory;
this.version = configSetupManager.getProductInfo().version();
this.relayLocation = configSetupManager.getConfiguration().getRelayPeer();
this.relayLocation = configSetupManager.getRelayPeer();
this.configuredNodes = ()-> {
if (configSetupManager.getConfiguration().isRelayDestination()) {
if (configSetupManager.isRelayDestination()) {
return configSetupManager.getGroupConfiguration().directConnect(relayLocation).getNodes();
} else {
return configSetupManager.getGroupConfiguration().getNodes();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -316,8 +316,7 @@ public DistributedObjectServer(ServerConfigurationManager configSetupManager, TC
this.serverBuilder = createServerBuilder(configSetupManager.getGroupConfiguration(), logger, server);
this.serviceRegistry = new TerracottaServiceProviderRegistryImpl();
this.topologyManager = new TopologyManager(()->this.configSetupManager.getGroupConfiguration().getHostPorts(), ()-> {
Configuration config = this.configSetupManager.getConfiguration();
FailoverBehavior consistent = config.getFailoverPriority();
FailoverBehavior consistent = this.configSetupManager.getFailoverPriority();
if (this.configSetupManager.isPartialConfiguration() || consistent == null || consistent.isAvailability()) {
return -1;
} else {
Expand Down Expand Up @@ -484,10 +483,9 @@ public synchronized void bootstrap() throws IOException, LocationNotCreatedExcep
this.sampledCounterManager = new CounterManagerImpl();

// Set up the ServiceRegistry.
Configuration configuration = this.configSetupManager.getConfiguration();
PlatformConfiguration platformConfiguration =
new PlatformConfigurationImpl(configSetupManager.getServerConfiguration(), configuration);
serviceRegistry.initialize(platformConfiguration, configuration);
new PlatformConfigurationImpl(configSetupManager);
serviceRegistry.initialize(platformConfiguration, configSetupManager);
serviceRegistry.registerImplementationProvided(new PlatformServiceProvider(server));

final EntityMessengerProvider messengerProvider = new EntityMessengerProvider();
Expand Down Expand Up @@ -526,7 +524,7 @@ public synchronized void bootstrap() throws IOException, LocationNotCreatedExcep
}
}

if (configuration.isPartialConfiguration() || configuration.isRelaySource()) {
if (configSetupManager.isPartialConfiguration() || configSetupManager.isRelaySource()) {
// don't persist anything for partial configurations
persistor = new NullPersistor();
} else {
Expand Down Expand Up @@ -587,7 +585,7 @@ public synchronized void bootstrap() throws IOException, LocationNotCreatedExcep
ClientStatePersistor clientStateStore = this.persistor.getClientStatePersistor();
this.connectionIdFactory = new ConnectionIDFactoryImpl(infoConnections, clientStateStore, capablities);
int voteCount =
ConsistencyManager.parseVoteCount(configuration.getFailoverPriority(), configuration.getServerConfigurations().size());
ConsistencyManager.parseVoteCount(configSetupManager.getFailoverPriority(), configSetupManager.getGroupConfiguration().getNodes().size());
int knownPeers = this.configSetupManager.allCurrentlyKnownServers().length - 1;

if (voteCount >= 0 && (voteCount + knownPeers + 1) % 2 == 0) {
Expand Down Expand Up @@ -615,9 +613,9 @@ public synchronized void bootstrap() throws IOException, LocationNotCreatedExcep
final DSOChannelManager channelManager = new DSOChannelManagerImpl(this.l1Listener.getChannelManager(), pInfo.version());
channelManager.addEventListener(this.connectionIdFactory);

ServerPersistentState serverPersistentState = configuration.isRelaySource() ? new RelayPersistentState() : new ClusterPersistentState(this.persistor.getClusterStatePersistor());
ServerPersistentState serverPersistentState = configSetupManager.isRelaySource() ? new RelayPersistentState() : new ClusterPersistentState(this.persistor.getClusterStatePersistor());

if (serverPersistentState.getInitialMode() == ServerMode.ACTIVE && configuration.isRelayDestination()) {
if (serverPersistentState.getInitialMode() == ServerMode.ACTIVE && configSetupManager.isRelayDestination()) {
throw new TCShutdownServerException("Unable to start as a relay destination. The server was shutdown as active");
}

Expand All @@ -641,7 +639,7 @@ public synchronized void bootstrap() throws IOException, LocationNotCreatedExcep
final InitialStateWeightGenerator initialState = new InitialStateWeightGenerator(serverPersistentState);
weightGeneratorFactory.add(initialState);
// 5) Topology weight is the number nodes this stripe believes are in the cluster
final TopologyWeightGenerator topoWeight = new TopologyWeightGenerator(this.configSetupManager.getConfiguration());
final TopologyWeightGenerator topoWeight = new TopologyWeightGenerator(this.configSetupManager);
weightGeneratorFactory.add(topoWeight);
// 6) SequenceID weight is the number of replication activities handled by this passive server
final SequenceIDWeightGenerator sequenceWeight = new SequenceIDWeightGenerator();
Expand Down Expand Up @@ -721,7 +719,7 @@ public synchronized void bootstrap() throws IOException, LocationNotCreatedExcep
HASettingsChecker haChecker = new HASettingsChecker(configSetupManager, tcProperties);
haChecker.validateHealthCheckSettingsForHighAvailability();

StateManager state = new StateManagerImpl(consoleLogger, (n)->!configuration.isRelayDestination(), this.groupCommManager,
StateManager state = new StateManagerImpl(consoleLogger, (n)->!configSetupManager.isRelayDestination(), this.groupCommManager,
createStageController(processTransactionHandler), eventCollector, stageManager,
configSetupManager.getGroupConfiguration().getNodes().size(),
configSetupManager.getGroupConfiguration().getElectionTimeInSecs(),
Expand All @@ -733,13 +731,13 @@ public synchronized void bootstrap() throws IOException, LocationNotCreatedExcep
new GenericHandler<>(), 1);
// routing for passive to receive replication
EventHandler<ReplicationMessage> replicationEvents = null;
if (configSetupManager.getConfiguration().isRelaySource()) {
if (configSetupManager.isRelaySource()) {
replicationEvents = createAndRouteRelayTransactionHandler(replicationResponseStage);
} else {
ReplicatedTransactionHandler replicatedTransactionHandler = new ReplicatedTransactionHandler(state, replicationResponseStage, this.persistor, entityManager, groupCommManager);
sequenceWeight.setReplicatedTransactionHandler(replicatedTransactionHandler);
replicationEvents = replicatedTransactionHandler.getEventHandler();
routeRelayMessages(state, configSetupManager.getConfiguration());
routeRelayMessages(state, configSetupManager);
}

// This requires both the stage for handling the replication/sync messages.
Expand Down Expand Up @@ -854,12 +852,11 @@ connectionPolicy, getOperationGuardian(platformServiceRegistry,
}

public synchronized void openNetworkPorts() throws ConfigurationException {
Configuration configuration = this.configSetupManager.getConfiguration();
// don't join the group if the configuration is not complete
if (this.l2Coordinator == null) {
throw new IllegalStateException("server is not bootstrapped");
}
if (!configuration.isPartialConfiguration()) {
if (!configSetupManager.isPartialConfiguration()) {
startGroupManagers();
}
this.l2Coordinator.start();
Expand Down Expand Up @@ -938,7 +935,7 @@ private ConsistencyManager createConsistencyManager(ServerConfigurationManager c
return new DiagnosticModeConsistencyManager();
}

boolean consistentStartup = knownPeers > 0 && (configSetupManager.getConfiguration().isConsistentStartup() || voteCount >= 0);
boolean consistentStartup = knownPeers > 0 && (configSetupManager.isConsistentStartup() || voteCount >= 0);
return new SafeStartupManagerImpl(
consistentStartup,
knownPeers,
Expand Down Expand Up @@ -1179,10 +1176,9 @@ private void startGroupManagers() {
throw new IllegalStateException("server is not bootstrapped");
}
NodeID myNodeId;
Configuration config = this.configSetupManager.getConfiguration();
if (config.isRelayDestination()) {
consoleLogger.info("connectiong to {} for duplication", config.getRelayPeer());
myNodeId = this.groupCommManager.join(this.configSetupManager.getGroupConfiguration().directConnect(config.getRelayPeer()));
if (configSetupManager.isRelayDestination()) {
consoleLogger.info("connectiong to {} for duplication", configSetupManager.getRelayPeer());
myNodeId = this.groupCommManager.join(this.configSetupManager.getGroupConfiguration().directConnect(configSetupManager.getRelayPeer()));
} else {
myNodeId = this.groupCommManager.join(this.configSetupManager.getGroupConfiguration());
}
Expand Down Expand Up @@ -1421,7 +1417,7 @@ public void handleEvent(RelayMessage context) throws EventHandlerException {
return handler.getEventHandler();
}

private void routeRelayMessages(StateManager stateMgr, Configuration config) {
private void routeRelayMessages(StateManager stateMgr, ServerConfigurationManager config) {
DuplicationTransactionHandler handler = new DuplicationTransactionHandler(stateMgr, n->config.isRelayDestination(), groupCommManager);
Stage<RelayMessage> relays = this.seda.getStageManager().createStage(ServerConfigurationContext.PASSIVE_DUPLICATE_STAGE, RelayMessage.class, handler.getEventHandler(), 1);
this.groupCommManager.routeMessages(RelayMessage.class, relays.getSink());
Expand Down
2 changes: 1 addition & 1 deletion tc-server/src/main/java/com/tc/server/Bootstrap.java
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ public void unpause(String path) {

@Override
public int getServerCount() {
return config.getConfiguration().getServerConfigurations().size();
return config.getGroupConfiguration().getNodes().size();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,43 +17,40 @@
*/
package com.tc.services;

import com.tc.config.ServerConfigurationManager;
import java.util.Collection;

import org.terracotta.entity.PlatformConfiguration;

import org.terracotta.configuration.Configuration;
import org.terracotta.configuration.ServerConfiguration;

/**
* @author vmad
*/
public class PlatformConfigurationImpl implements PlatformConfiguration {

private final ServerConfiguration serverConfig;
private final Configuration config;
private final ServerConfigurationManager serverConfig;

public PlatformConfigurationImpl(ServerConfiguration serverConfig, Configuration config) {
public PlatformConfigurationImpl(ServerConfigurationManager serverConfig) {
this.serverConfig = serverConfig;
this.config = config;
}

@Override
public String getServerName() {
return serverConfig.getName();
return serverConfig.getServerConfiguration().getName();
}

@Override
public String getHost() {
return serverConfig.getHost();
return serverConfig.getServerConfiguration().getHost();
}

@Override
public int getTsaPort() {
return serverConfig.getTsaPort().getPort();
return serverConfig.getServerConfiguration().getTsaPort().getPort();
}

@Override
public <T> Collection<T> getExtendedConfiguration(Class<T> type) {
return config.getExtendedConfiguration(type);
return serverConfig.getExtendedConfiguration(type);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
*/
package com.tc.services;

import org.terracotta.configuration.Configuration;
import com.tc.config.ServerConfigurationManager;

import org.terracotta.entity.PlatformConfiguration;
import org.terracotta.entity.ServiceProvider;
Expand All @@ -39,7 +39,7 @@ public interface TerracottaServiceProviderRegistry extends PrettyPrintable {
* @param loader the classloader used for all services
*
*/
void initialize(PlatformConfiguration platformConfiguration, Configuration configuration);
void initialize(PlatformConfiguration platformConfiguration, ServerConfigurationManager configuration);

/**
* Method to register platform level service provider which don't have life-cycle using SPI interface but otherwise act
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package com.tc.services;

import com.tc.classloader.BuiltinService;
import com.tc.config.ServerConfigurationManager;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -28,7 +29,6 @@

import com.tc.util.Assert;
import java.io.Closeable;
import org.terracotta.configuration.Configuration;

import java.io.PrintWriter;
import java.io.StringWriter;
Expand Down Expand Up @@ -56,7 +56,7 @@ public class TerracottaServiceProviderRegistryImpl implements TerracottaServiceP
private boolean hasCreatedSubRegistries;

@Override
public void initialize(PlatformConfiguration platformConfiguration, Configuration configuration) {
public void initialize(PlatformConfiguration platformConfiguration, ServerConfigurationManager configuration) {
List<ServiceProviderConfiguration> serviceProviderConfigurationList = configuration.getServiceConfigurations();
Assert.assertFalse(this.hasCreatedSubRegistries);
if(serviceProviderConfigurationList != null) {
Expand Down