Search in sources :

Example 1 with ComputeFunction

use of com.alibaba.otter.shared.common.utils.cache.RefreshMemoryMirror.ComputeFunction in project otter by alibaba.

the class ArbitrateConfigImpl method afterPropertiesSet.

public void afterPropertiesSet() throws Exception {
    // 获取一下nid变量
    channelMapping = new MapMaker().makeComputingMap(new Function<Long, Long>() {

        public Long apply(Long pipelineId) {
            // 处理下pipline -> channel映射关系不存在的情况
            Channel channel = channelService.findByPipelineId(pipelineId);
            if (channel == null) {
                throw new ConfigException("No Such Channel by pipelineId[" + pipelineId + "]");
            }
            // 排除下自己
            updateMapping(channel, pipelineId);
            // 更新下channelCache
            channelCache.put(channel.getId(), channel);
            return channel.getId();
        }
    });
    channelCache = new RefreshMemoryMirror<Long, Channel>(timeout, new ComputeFunction<Long, Channel>() {

        public Channel apply(Long key, Channel oldValue) {
            Channel channel = channelService.findById(key);
            if (channel == null) {
                // 其他情况直接返回内存中的旧值
                return oldValue;
            } else {
                // 排除下自己
                updateMapping(channel, null);
                return channel;
            }
        }
    });
    nodeCache = new RefreshMemoryMirror<Long, Node>(timeout, new ComputeFunction<Long, Node>() {

        public Node apply(Long key, Node oldValue) {
            Node node = nodeService.findById(key);
            if (node == null) {
                return oldValue;
            } else {
                return node;
            }
        }
    });
}
Also used : ComputeFunction(com.alibaba.otter.shared.common.utils.cache.RefreshMemoryMirror.ComputeFunction) Function(com.google.common.base.Function) ComputeFunction(com.alibaba.otter.shared.common.utils.cache.RefreshMemoryMirror.ComputeFunction) Channel(com.alibaba.otter.shared.common.model.config.channel.Channel) Node(com.alibaba.otter.shared.common.model.config.node.Node) MapMaker(com.google.common.collect.MapMaker) ConfigException(com.alibaba.otter.shared.common.model.config.ConfigException)

Example 2 with ComputeFunction

use of com.alibaba.otter.shared.common.utils.cache.RefreshMemoryMirror.ComputeFunction in project otter by alibaba.

the class ConfigClientServiceImpl method afterPropertiesSet.

public void afterPropertiesSet() throws Exception {
    // 获取一下nid变量
    String nid = System.getProperty(NID_NAME);
    if (StringUtils.isEmpty(nid)) {
        throw new ConfigException("nid is not set!");
    }
    this.nid = Long.valueOf(nid);
    channelMapping = new MapMaker().makeComputingMap(new Function<Long, Long>() {

        public Long apply(Long pipelineId) {
            // 处理下pipline -> channel映射关系不存在的情况
            FindChannelEvent event = new FindChannelEvent();
            event.setPipelineId(pipelineId);
            try {
                Object obj = nodeCommmunicationClient.callManager(event);
                if (obj != null && obj instanceof Channel) {
                    Channel channel = (Channel) obj;
                    // 排除下自己
                    updateMapping(channel, pipelineId);
                    // 更新下channelCache
                    channelCache.put(channel.getId(), channel);
                    return channel.getId();
                }
            } catch (Exception e) {
                logger.error("call_manager_error", event.toString(), e);
            }
            throw new ConfigException("No Such Channel by pipelineId[" + pipelineId + "]");
        }
    });
    nodeCache = new RefreshMemoryMirror<Long, Node>(timeout, new ComputeFunction<Long, Node>() {

        public Node apply(Long key, Node oldValue) {
            FindNodeEvent event = new FindNodeEvent();
            event.setNid(key);
            try {
                Object obj = nodeCommmunicationClient.callManager(event);
                if (obj != null && obj instanceof Node) {
                    return (Node) obj;
                } else {
                    throw new ConfigException("No Such Node by id[" + key + "]");
                }
            } catch (Exception e) {
                logger.error("call_manager_error", event.toString(), e);
            }
            // 其他情况直接返回内存中的旧值
            return oldValue;
        }
    });
    channelCache = new RefreshMemoryMirror<Long, Channel>(timeout, new ComputeFunction<Long, Channel>() {

        public Channel apply(Long key, Channel oldValue) {
            FindChannelEvent event = new FindChannelEvent();
            event.setChannelId(key);
            try {
                Object obj = nodeCommmunicationClient.callManager(event);
                if (obj != null && obj instanceof Channel) {
                    // 排除下自己
                    updateMapping((Channel) obj, null);
                    return (Channel) obj;
                } else {
                    throw new ConfigException("No Such Channel by pipelineId[" + key + "]");
                }
            } catch (Exception e) {
                logger.error("call_manager_error", event.toString(), e);
            }
            // 其他情况直接返回内存中的旧值
            return oldValue;
        }
    });
}
Also used : ComputeFunction(com.alibaba.otter.shared.common.utils.cache.RefreshMemoryMirror.ComputeFunction) Channel(com.alibaba.otter.shared.common.model.config.channel.Channel) Node(com.alibaba.otter.shared.common.model.config.node.Node) MapMaker(com.google.common.collect.MapMaker) ConfigException(com.alibaba.otter.shared.common.model.config.ConfigException) ConfigException(com.alibaba.otter.shared.common.model.config.ConfigException) Function(com.google.common.base.Function) ComputeFunction(com.alibaba.otter.shared.common.utils.cache.RefreshMemoryMirror.ComputeFunction) FindNodeEvent(com.alibaba.otter.shared.communication.model.config.FindNodeEvent) FindChannelEvent(com.alibaba.otter.shared.communication.model.config.FindChannelEvent)

Aggregations

ConfigException (com.alibaba.otter.shared.common.model.config.ConfigException)2 Channel (com.alibaba.otter.shared.common.model.config.channel.Channel)2 Node (com.alibaba.otter.shared.common.model.config.node.Node)2 ComputeFunction (com.alibaba.otter.shared.common.utils.cache.RefreshMemoryMirror.ComputeFunction)2 Function (com.google.common.base.Function)2 MapMaker (com.google.common.collect.MapMaker)2 FindChannelEvent (com.alibaba.otter.shared.communication.model.config.FindChannelEvent)1 FindNodeEvent (com.alibaba.otter.shared.communication.model.config.FindNodeEvent)1