package io.mycat.server.config.loader.zkloader; import com.alibaba.fastjson.JSON; import io.mycat.server.config.ConfigException; import io.mycat.server.config.node.UserConfig; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.utils.ZKPaths; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; import static java.util.stream.Collectors.toMap; /** * <p> * load user configuration from Zookeeper. * </p> * Created by v1.lion on 2015/9/27. */ public class ZkUserConfigLoader extends AbstractZKLoaders { private static final Logger LOGGER = LoggerFactory.getLogger(ZkUserConfigLoader.class); //directory name of user config in zookeeper private static final String USERS_DIRECTORY = "user"; //hold user name mapping to UserConfig private Map<String, UserConfig> userConfigs; public ZkUserConfigLoader(final String clusterID) { super(clusterID, ZkSystemConfigLoader.SERVER_CONFIG_DIRECTORY); } @Override public void fetchConfig(CuratorFramework zkConnection) { //user config path in zookeeper //example: /mycat-cluster-1/server-config/user this.userConfigs = super .fetchChildren(zkConnection, USERS_DIRECTORY) .stream() .map(username -> (UserConfig) JSON.parseObject( super.fetchData(zkConnection, USERS_DIRECTORY, username), UserConfig.class)) .collect(toMap(UserConfig::getName, Function.identity())); LOGGER.trace("done fetch user config : {}", this.userConfigs); } public Map<String, UserConfig> getUserConfig() { return userConfigs; } }