use of com.ctrip.xpipe.redis.core.entity.DcMeta in project x-pipe by ctripcorp.
the class DcMetaServiceImpl method getDcMeta.
@Override
public DcMeta getDcMeta(final String dcName) {
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(6);
DcMeta dcMeta = new DcMeta();
dcMeta.setId(dcName);
dcMeta.setLastModifiedTime(DataModifiedTimeGenerator.generateModifiedTime());
Future<DcTbl> future_dcInfo = fixedThreadPool.submit(new Callable<DcTbl>() {
@Override
public DcTbl call() throws Exception {
return dcService.find(dcName);
}
});
Future<List<SetinelTbl>> future_sentinels = fixedThreadPool.submit(new Callable<List<SetinelTbl>>() {
@Override
public List<SetinelTbl> call() throws DalException {
return sentinelService.findAllByDcName(dcName);
}
});
Future<List<KeepercontainerTbl>> future_keepercontainers = fixedThreadPool.submit(new Callable<List<KeepercontainerTbl>>() {
@Override
public List<KeepercontainerTbl> call() throws DalException {
return keepercontainerService.findAllByDcName(dcName);
}
});
Future<HashMap<Long, DcTbl>> future_alldcs = fixedThreadPool.submit(new Callable<HashMap<Long, DcTbl>>() {
@Override
public HashMap<Long, DcTbl> call() throws DalException {
return loadAllDcs();
}
});
Future<HashMap<Long, List<DcClusterTbl>>> future_allDcClusters = fixedThreadPool.submit(new Callable<HashMap<Long, List<DcClusterTbl>>>() {
@Override
public HashMap<Long, List<DcClusterTbl>> call() throws Exception {
return loadAllDcClusters();
}
});
Future<List<DcTbl>> future_allDetails = fixedThreadPool.submit(new Callable<List<DcTbl>>() {
@Override
public List<DcTbl> call() throws Exception {
return dcService.findAllDetails(dcName);
}
});
try {
DcTbl dcInfo = future_dcInfo.get();
if (null == dcInfo)
return dcMeta;
dcMeta.setId(dcInfo.getDcName());
dcMeta.setLastModifiedTime(dcInfo.getDcLastModifiedTime());
if (null != future_sentinels.get()) {
for (SetinelTbl setinel : future_sentinels.get()) {
dcMeta.addSentinel(setinelMetaService.encodeSetinelMeta(setinel, dcMeta));
}
}
if (null != future_keepercontainers.get()) {
for (KeepercontainerTbl keepercontainer : future_keepercontainers.get()) {
dcMeta.addKeeperContainer(keepercontainerMetaService.encodeKeepercontainerMeta(keepercontainer, dcMeta));
}
}
List<DcTbl> allDetails = future_allDetails.get();
if (null != allDetails) {
DcMetaQueryVO dcMetaQueryVO = loadMetaVO(dcInfo, allDetails);
if (null != future_alldcs.get()) {
dcMetaQueryVO.setAllDcs(future_alldcs.get());
}
if (null != future_allDcClusters.get()) {
dcMetaQueryVO.setAllDcClusterMap(future_allDcClusters.get());
}
for (ClusterTbl cluster : dcMetaQueryVO.getClusterInfo().values()) {
dcMeta.addCluster(clusterMetaService.loadClusterMeta(dcMeta, cluster, dcMetaQueryVO));
}
}
} catch (ExecutionException e) {
throw new ServerException("Execution failed.", e);
} catch (InterruptedException e) {
throw new ServerException("Concurrent execution failed.", e);
} finally {
fixedThreadPool.shutdown();
}
return dcMeta;
}
use of com.ctrip.xpipe.redis.core.entity.DcMeta in project x-pipe by ctripcorp.
the class MetaCloneTest method testClone.
@Test
public void testClone() {
XpipeMeta xpipeMeta = getXpipeMeta();
DcMeta dcMeta = xpipeMeta.getDcs().values().iterator().next();
DcMeta clone = MetaClone.clone(dcMeta);
Assert.assertEquals(dcMeta, clone);
clone.setId(randomString());
Assert.assertNotEquals(dcMeta, clone);
}
use of com.ctrip.xpipe.redis.core.entity.DcMeta in project x-pipe by ctripcorp.
the class DemoStarter method startMetaServer1.
// ///////////////////////////////////////DC1/////////////////////////////////////////
@Test
public void startMetaServer1() throws Exception {
DcMeta dcMeta = getDcMeta(getAndSetDc(1));
startZkServer(dcMeta.getZkServer());
startMetaServers(dcMeta);
}
use of com.ctrip.xpipe.redis.core.entity.DcMeta in project x-pipe by ctripcorp.
the class DcMetaTest method test.
@Test
public void test() {
DcMeta dcMeta = getDcMeta("jq");
Codec codec = new JsonCodec(true);
String dcMetaStr = codec.encode(dcMeta);
logger.info("{}", dcMetaStr);
DcMeta dcMetaDe = codec.decode(dcMetaStr, DcMeta.class);
logger.info("[test]{}", dcMeta.getClusters().get("cluster1").parent());
logger.info("[test]{}", dcMetaDe.getClusters().get("cluster1").parent());
}
use of com.ctrip.xpipe.redis.core.entity.DcMeta in project x-pipe by ctripcorp.
the class DefaultDcMetaCacheTest method testChangeDcMetaLog.
@Test
public void testChangeDcMetaLog() {
// just check exception
EventMonitor.DEFAULT.logEvent("type", getTestName());
XpipeMeta xpipeMeta = getXpipeMeta();
DcMeta dcMeta = (DcMeta) xpipeMeta.getDcs().values().toArray()[0];
DcMeta future = MetaClone.clone(dcMeta);
ClusterMeta futureCluster = (ClusterMeta) future.getClusters().values().toArray()[0];
futureCluster.addShard(new ShardMeta().setId(randomString(5)));
future.addCluster(new ClusterMeta().setId(randomString(10)));
dcMetaCache.changeDcMeta(dcMeta, future);
dcMetaCache.clusterAdded(new ClusterMeta().setId("add_" + randomString(5)));
dcMetaCache.clusterDeleted("del_" + randomString(5));
}
Aggregations