package com.taobao.tddl.config.diamond;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.taobao.diamond.client.BatchHttpResult;
import com.taobao.diamond.client.impl.DiamondEnv;
import com.taobao.diamond.client.impl.DiamondEnvRepo;
import com.taobao.diamond.client.impl.DiamondUnitSite;
import com.taobao.diamond.domain.ConfigInfoEx;
import com.taobao.tddl.common.utils.TStringUtil;
import com.taobao.tddl.common.utils.extension.Activate;
import com.taobao.tddl.config.impl.holder.AbstractConfigDataHolder;
import com.taobao.tddl.common.utils.logger.Logger;
import com.taobao.tddl.common.utils.logger.LoggerFactory;
@Activate(order = 1)
public class DiamondConfigHolder extends AbstractConfigDataHolder {
private static final Logger log = LoggerFactory.getLogger(DiamondConfigHolder.class);
public void doInit() {
}
protected Map<String, String> queryAndHold(List<String> dataIds, String unitName) {
DiamondEnv env = null;
// TODO 外部直接指定ip进行访问
if (!TStringUtil.isEmpty(unitName)) {
env = DiamondUnitSite.getDiamondUnitEnv(unitName);
} else {
env = DiamondEnvRepo.defaultEnv;
}
BatchHttpResult queryResult = env.batchQuery(dataIds, "DEFAULT_GROUP", 30000);
Map<String, String> result = new HashMap<String, String>();
if (queryResult.isSuccess()) {
List<ConfigInfoEx> configs = queryResult.getResult();
for (ConfigInfoEx config : configs) {
result.put(config.getDataId(), config.getContent());
}
addDatas(result);
} else {
log.warn("Batch Query Failed. Status Code is " + queryResult.getStatusCode());
}
return result;
}
@Override
public Map<String, String> getData(List<String> dataIds) {
Map<String, String> result = new HashMap<String, String>();
for (String dataId : dataIds) {
result.put(dataId, getData(dataId));
}
return result;
}
@Override
public String getData(String dataId) {
return configHouse.containsKey(dataId) ? configHouse.get(dataId) : getDataFromSonHolder(dataId);
}
}