Search in sources :

Example 1 with Database

use of com.ctrip.framework.dal.cluster.client.database.Database in project dal by ctripcorp.

the class ClusterDatabaseSetAdapter method checkCluster.

private boolean checkCluster(Cluster cluster) {
    if (!cluster.dbShardingEnabled()) {
        int theOnlyShard = cluster.getAllDbShards().iterator().next();
        Database master = cluster.getMasterOnShard(theOnlyShard);
        List<Database> slaves = cluster.getSlavesOnShard(theOnlyShard);
        return master != null && (slaves == null || slaves.isEmpty());
    }
    return false;
}
Also used : Database(com.ctrip.framework.dal.cluster.client.database.Database)

Example 2 with Database

use of com.ctrip.framework.dal.cluster.client.database.Database in project dal by ctripcorp.

the class ClusterDatabaseSet method getSlaveDbs.

@Override
public List<DataBase> getSlaveDbs() {
    int shard = getTheOnlyDbShardIndex();
    List<Database> clusterDatabases = cluster.getSlavesOnShard(shard);
    List<DataBase> dataBases = new LinkedList<>();
    for (Database clusterDatabase : clusterDatabases) {
        dataBases.add(new ClusterDataBase(clusterDatabase));
    }
    return dataBases;
}
Also used : Database(com.ctrip.framework.dal.cluster.client.database.Database)

Example 3 with Database

use of com.ctrip.framework.dal.cluster.client.database.Database in project dal by ctripcorp.

the class ClusterDatabaseSet method getMasterDbs.

@Override
public List<DataBase> getMasterDbs(String shard) {
    Database clusterDatabase = cluster.getMasterOnShard(getDbShardIndex(shard));
    List<DataBase> dataBases = new LinkedList<>();
    dataBases.add(new ClusterDataBase(clusterDatabase));
    return dataBases;
}
Also used : Database(com.ctrip.framework.dal.cluster.client.database.Database)

Example 4 with Database

use of com.ctrip.framework.dal.cluster.client.database.Database in project dal by ctripcorp.

the class DataSourceLocator method createRefreshableDataSource.

private RefreshableDataSource createRefreshableDataSource(DataSourceIdentity id) throws SQLException {
    if (id instanceof ClusterDataSourceIdentity) {
        Database database = ((ClusterDataSourceIdentity) id).getDatabase();
        Cluster cluster = database.getCluster();
        ClusterInfo clusterInfo = new ClusterInfo(database.getClusterName(), database.getShardIndex(), database.isMaster() ? DatabaseRole.MASTER : DatabaseRole.SLAVE, cluster != null && cluster.dbShardingEnabled(), cluster);
        try {
            if (cluster != null && cluster.getClusterType() == ClusterType.DRC) {
                LocalizationConfig localizationConfig = cluster.getLocalizationConfig();
                LocalizationConfig lastLocalizationConfig = cluster.getLastLocalizationConfig();
                LocalizationValidator validator = factory.createValidator(clusterInfo, localizationConfig, lastLocalizationConfig);
                LOGGER.logEvent(LOG_TYPE_CREATE_DATASOURCE, String.format(LOG_NAME_CREATE_DRC_DATASOURCE, clusterInfo.toString()), localizationConfig.toString());
                return new LocalizedDataSource(validator, id, provider.getDataSourceConfigure(id));
            }
        } catch (Exception e) {
            LOGGER.logEvent(LOG_TYPE_CREATE_DATASOURCE, String.format(LOG_NAME_CREATE_DRC_DATASOURCE_FAIL, clusterInfo.toString()), e.getMessage());
            throw e;
        }
    }
    LOGGER.logEvent(LOG_TYPE_CREATE_DATASOURCE, String.format(LOG_NAME_CREATE_NORMAL_DATASOURCE, id.getId()), "");
    SingleDataSourceConfigureProvider dataSourceConfigureProvider = new SingleDataSourceConfigureProvider(id, provider);
    return new ForceSwitchableDataSource(id, dataSourceConfigureProvider);
}
Also used : LocalizationConfig(com.ctrip.framework.dal.cluster.client.config.LocalizationConfig) Database(com.ctrip.framework.dal.cluster.client.database.Database) Cluster(com.ctrip.framework.dal.cluster.client.Cluster) SQLException(java.sql.SQLException)

Example 5 with Database

use of com.ctrip.framework.dal.cluster.client.database.Database 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));
}
Also used : MultiMasterStrategy(com.ctrip.platform.dal.dao.datasource.cluster.strategy.multi.MultiMasterStrategy) ClusterInfo(com.ctrip.platform.dal.dao.configure.ClusterInfo) Set(java.util.Set) Test(org.junit.Test) Database(com.ctrip.framework.dal.cluster.client.database.Database) DatabaseCategory(com.ctrip.framework.dal.cluster.client.database.DatabaseCategory) Collectors(java.util.stream.Collectors) ClusterType(com.ctrip.framework.dal.cluster.client.cluster.ClusterType) CaseInsensitiveProperties(com.ctrip.framework.dal.cluster.client.util.CaseInsensitiveProperties) RouteStrategyEnum(com.ctrip.framework.dal.cluster.client.cluster.RouteStrategyEnum) ClusterRouteStrategyConfig(com.ctrip.framework.dal.cluster.client.multihost.ClusterRouteStrategyConfig) DatabaseRole(com.ctrip.framework.dal.cluster.client.database.DatabaseRole) Cluster(com.ctrip.framework.dal.cluster.client.Cluster) Assert(org.junit.Assert) ClusterInfo(com.ctrip.platform.dal.dao.configure.ClusterInfo) CaseInsensitiveProperties(com.ctrip.framework.dal.cluster.client.util.CaseInsensitiveProperties) ClusterRouteStrategyConfig(com.ctrip.framework.dal.cluster.client.multihost.ClusterRouteStrategyConfig) Cluster(com.ctrip.framework.dal.cluster.client.Cluster) Test(org.junit.Test)

Aggregations

Database (com.ctrip.framework.dal.cluster.client.database.Database)14 Cluster (com.ctrip.framework.dal.cluster.client.Cluster)3 HostSpec (com.ctrip.framework.dal.cluster.client.base.HostSpec)3 ConnectionString (com.ctrip.framework.dal.cluster.client.database.ConnectionString)3 ClusterRouteStrategyConfig (com.ctrip.framework.dal.cluster.client.multihost.ClusterRouteStrategyConfig)3 ClusterInfo (com.ctrip.platform.dal.dao.configure.ClusterInfo)3 CaseInsensitiveProperties (com.ctrip.framework.dal.cluster.client.util.CaseInsensitiveProperties)2 Test (org.junit.Test)2 ClusterType (com.ctrip.framework.dal.cluster.client.cluster.ClusterType)1 RouteStrategyEnum (com.ctrip.framework.dal.cluster.client.cluster.RouteStrategyEnum)1 LocalizationConfig (com.ctrip.framework.dal.cluster.client.config.LocalizationConfig)1 DatabaseCategory (com.ctrip.framework.dal.cluster.client.database.DatabaseCategory)1 DatabaseRole (com.ctrip.framework.dal.cluster.client.database.DatabaseRole)1 DalMetadataException (com.ctrip.framework.dal.cluster.client.exception.DalMetadataException)1 CustomDataSourceFactory (com.ctrip.framework.dal.cluster.client.extended.CustomDataSourceFactory)1 DatabaseShard (com.ctrip.framework.dal.cluster.client.shard.DatabaseShard)1 DataSourceConfigure (com.ctrip.platform.dal.dao.configure.DataSourceConfigure)1 MultiMasterStrategy (com.ctrip.platform.dal.dao.datasource.cluster.strategy.multi.MultiMasterStrategy)1 SQLException (java.sql.SQLException)1 HashMap (java.util.HashMap)1