use of com.ctrip.framework.dal.cluster.client.multihost.ClusterRouteStrategyConfig in project dal by ctripcorp.
the class ApiDataSourceIdentityTest method testMultiHost.
@Test
public void testMultiHost() {
provider.setNormalConfig(false);
ApiDataSourceIdentity id = new ApiDataSourceIdentity(provider);
ClusterInfo clusterInfo = id.getClusterInfo();
Assert.assertEquals(DB_NAME, clusterInfo.getClusterName());
Assert.assertEquals(0, clusterInfo.getShardIndex().intValue());
Assert.assertEquals(DatabaseRole.MASTER, clusterInfo.getRole());
Cluster cluster = clusterInfo.getCluster();
Assert.assertEquals(DB_NAME, cluster.getClusterName());
Assert.assertEquals(ClusterType.NORMAL, cluster.getClusterType());
Assert.assertEquals(DatabaseCategory.MYSQL, cluster.getDatabaseCategory());
Assert.assertFalse(cluster.dbShardingEnabled());
Assert.assertEquals(3, cluster.getDatabases().size());
Set<String> hosts = cluster.getDatabases().stream().map(database -> database.getConnectionString().getPrimaryHost()).collect(Collectors.toSet());
Assert.assertEquals(1, hosts.size());
Assert.assertTrue(hosts.contains("localhost"));
Set<Integer> ports = cluster.getDatabases().stream().map(database -> database.getConnectionString().getPrimaryPort()).collect(Collectors.toSet());
Assert.assertEquals(3, ports.size());
Assert.assertTrue(ports.contains(3306));
Assert.assertTrue(ports.contains(3307));
Assert.assertTrue(ports.contains(3308));
Set<String> zones = cluster.getDatabases().stream().map(database -> database.getZone().toLowerCase()).collect(Collectors.toSet());
Assert.assertEquals(3, zones.size());
Assert.assertTrue(zones.contains("z1"));
Assert.assertTrue(zones.contains("z2"));
Assert.assertTrue(zones.contains("z3"));
ClusterRouteStrategyConfig routeStrategy = cluster.getRouteStrategyConfig();
Assert.assertEquals(RouteStrategyEnum.WRITE_ORDERED.getAlias(), routeStrategy.routeStrategyName());
CaseInsensitiveProperties properties = routeStrategy.routeStrategyProperties();
Assert.assertEquals("z3,z2,z1", properties.get(MultiMasterStrategy.ZONES_PRIORITY));
Assert.assertEquals("10000", properties.get(MultiMasterStrategy.FAILOVER_TIME_MS));
Assert.assertNull(properties.get(MultiMasterStrategy.BLACKLIST_TIMEOUT_MS));
Assert.assertNull(properties.get(MultiMasterStrategy.FIXED_VALIDATE_PERIOD_MS));
}
use of com.ctrip.framework.dal.cluster.client.multihost.ClusterRouteStrategyConfig in project dal by ctripcorp.
the class ApiDataSourceIdentityTest method testNormal.
@Test
public void testNormal() {
provider.setNormalConfig(true);
ApiDataSourceIdentity id = new ApiDataSourceIdentity(provider);
ClusterInfo clusterInfo = id.getClusterInfo();
Assert.assertEquals(DB_NAME, clusterInfo.getClusterName());
Assert.assertEquals(0, clusterInfo.getShardIndex().intValue());
Assert.assertEquals(DatabaseRole.MASTER, clusterInfo.getRole());
Cluster cluster = clusterInfo.getCluster();
Assert.assertEquals(DB_NAME, cluster.getClusterName());
Assert.assertEquals(ClusterType.NORMAL, cluster.getClusterType());
Assert.assertEquals(DatabaseCategory.MYSQL, cluster.getDatabaseCategory());
Assert.assertFalse(cluster.dbShardingEnabled());
Assert.assertEquals(1, cluster.getDatabases().size());
Database database = cluster.getDatabases().iterator().next();
Assert.assertEquals("localhost", database.getConnectionString().getPrimaryHost());
Assert.assertEquals(3306, database.getConnectionString().getPrimaryPort());
ClusterRouteStrategyConfig routeStrategy = cluster.getRouteStrategyConfig();
Assert.assertNotNull(routeStrategy);
}
use of com.ctrip.framework.dal.cluster.client.multihost.ClusterRouteStrategyConfig in project dal by ctripcorp.
the class DatabaseShardImpl method initReadStrategy.
public void initReadStrategy() {
ClusterRouteStrategyConfig config = databaseShardConfig.getClusterConfig().getRouteStrategyConfig();
if (config == null || config.multiMaster()) {
return;
}
routeStrategy = (ReadStrategy) config.generate();
List<Database> databases = new ArrayList<>();
databases.addAll(masters);
databases.addAll(slaves);
Set<HostSpec> hostSpecs = new HashSet<>();
databases.forEach(database -> {
ConnectionString connString = database.getConnectionString();
HostSpec host = HostSpec.of(connString.getPrimaryHost(), connString.getPrimaryPort(), database.getZone(), database.isMaster());
hostToDataBase.putIfAbsent(host, database);
hostSpecs.add(host);
});
try {
routeStrategy.init(hostSpecs, new CaseInsensitiveProperties());
} catch (DalMetadataException error) {
throw new DalMetadataException(databaseShardConfig.getClusterConfig().getClusterName() + error.getMessage());
}
}
use of com.ctrip.framework.dal.cluster.client.multihost.ClusterRouteStrategyConfig in project dal by ctripcorp.
the class MultiHostClusterPropertiesAdapterTest method setUp.
@Before
public void setUp() throws Exception {
mgrRouteStrategyConfig = new ClusterRouteStrategyConfig() {
@Override
public RouteStrategy generate() {
return doGenerate(routeStrategyName());
}
@Override
public String routeStrategyName() {
return RouteStrategyEnum.WRITE_ORDERED.name();
}
@Override
public boolean multiMaster() {
return true;
}
@Override
public CaseInsensitiveProperties routeStrategyProperties() {
return null;
}
};
obRouteStrategyConfig = new ClusterRouteStrategyConfig() {
@Override
public RouteStrategy generate() {
return doGenerate(routeStrategyName());
}
@Override
public String routeStrategyName() {
return RouteStrategyEnum.WRITE_CURRENT_ZONE_FIRST.getAlias();
}
@Override
public boolean multiMaster() {
return true;
}
@Override
public CaseInsensitiveProperties routeStrategyProperties() {
return null;
}
};
customRouteStrategyConfig = new ClusterRouteStrategyConfig() {
@Override
public RouteStrategy generate() {
return doGenerate(routeStrategyName());
}
@Override
public String routeStrategyName() {
return CUSTOM_STRATEGY;
}
@Override
public boolean multiMaster() {
return false;
}
@Override
public CaseInsensitiveProperties routeStrategyProperties() {
return null;
}
};
}
Aggregations