Search in sources :

Example 11 with RegisterRMRequest

use of io.seata.core.protocol.RegisterRMRequest in project seata by seata.

the class ChannelManager method registerRMChannel.

/**
 * Register rm channel.
 *
 * @param resourceManagerRequest the resource manager request
 * @param channel                the channel
 * @throws IncompatibleVersionException the incompatible  version exception
 */
public static void registerRMChannel(RegisterRMRequest resourceManagerRequest, Channel channel) throws IncompatibleVersionException {
    Version.checkVersion(resourceManagerRequest.getVersion());
    Set<String> dbkeySet = dbKeytoSet(resourceManagerRequest.getResourceIds());
    RpcContext rpcContext;
    if (!IDENTIFIED_CHANNELS.containsKey(channel)) {
        rpcContext = buildChannelHolder(NettyPoolKey.TransactionRole.RMROLE, resourceManagerRequest.getVersion(), resourceManagerRequest.getApplicationId(), resourceManagerRequest.getTransactionServiceGroup(), resourceManagerRequest.getResourceIds(), channel);
        rpcContext.holdInIdentifiedChannels(IDENTIFIED_CHANNELS);
    } else {
        rpcContext = IDENTIFIED_CHANNELS.get(channel);
        rpcContext.addResources(dbkeySet);
    }
    if (dbkeySet == null || dbkeySet.isEmpty()) {
        return;
    }
    for (String resourceId : dbkeySet) {
        String clientIp;
        ConcurrentMap<Integer, RpcContext> portMap = CollectionUtils.computeIfAbsent(RM_CHANNELS, resourceId, key -> new ConcurrentHashMap<>()).computeIfAbsent(resourceManagerRequest.getApplicationId(), key -> new ConcurrentHashMap<>()).computeIfAbsent(clientIp = ChannelUtil.getClientIpFromChannel(channel), key -> new ConcurrentHashMap<>());
        rpcContext.holdInResourceManagerChannels(resourceId, portMap);
        updateChannelsResource(resourceId, clientIp, resourceManagerRequest.getApplicationId());
    }
}
Also used : RpcContext(io.seata.core.rpc.RpcContext) Arrays(java.util.Arrays) Logger(org.slf4j.Logger) RpcContext(io.seata.core.rpc.RpcContext) CollectionUtils(io.seata.common.util.CollectionUtils) LoggerFactory(org.slf4j.LoggerFactory) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) HashMap(java.util.HashMap) Constants(io.seata.common.Constants) ConcurrentMap(java.util.concurrent.ConcurrentMap) Channel(io.netty.channel.Channel) RegisterRMRequest(io.seata.core.protocol.RegisterRMRequest) HashSet(java.util.HashSet) Map(java.util.Map) RegisterTMRequest(io.seata.core.protocol.RegisterTMRequest) FrameworkException(io.seata.common.exception.FrameworkException) StringUtils(io.seata.common.util.StringUtils) Version(io.seata.core.protocol.Version) IncompatibleVersionException(io.seata.core.protocol.IncompatibleVersionException) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap)

Example 12 with RegisterRMRequest

use of io.seata.core.protocol.RegisterRMRequest in project seata by seata.

the class RmNettyRemotingClient method onRegisterMsgSuccess.

@Override
public void onRegisterMsgSuccess(String serverAddress, Channel channel, Object response, AbstractMessage requestMessage) {
    RegisterRMRequest registerRMRequest = (RegisterRMRequest) requestMessage;
    RegisterRMResponse registerRMResponse = (RegisterRMResponse) response;
    if (LOGGER.isInfoEnabled()) {
        LOGGER.info("register RM success. client version:{}, server version:{},channel:{}", registerRMRequest.getVersion(), registerRMResponse.getVersion(), channel);
    }
    getClientChannelManager().registerChannel(serverAddress, channel);
    String dbKey = getMergedResourceKeys();
    if (registerRMRequest.getResourceIds() != null) {
        if (!registerRMRequest.getResourceIds().equals(dbKey)) {
            sendRegisterMessage(serverAddress, channel, dbKey);
        }
    }
}
Also used : RegisterRMResponse(io.seata.core.protocol.RegisterRMResponse) RegisterRMRequest(io.seata.core.protocol.RegisterRMRequest)

Aggregations

RegisterRMRequest (io.seata.core.protocol.RegisterRMRequest)12 FrameworkException (io.seata.common.exception.FrameworkException)4 RegisterRMResponse (io.seata.core.protocol.RegisterRMResponse)4 Channel (io.netty.channel.Channel)2 Test (org.junit.jupiter.api.Test)2 Constants (io.seata.common.Constants)1 CollectionUtils (io.seata.common.util.CollectionUtils)1 StringUtils (io.seata.common.util.StringUtils)1 IncompatibleVersionException (io.seata.core.protocol.IncompatibleVersionException)1 RegisterTMRequest (io.seata.core.protocol.RegisterTMRequest)1 Version (io.seata.core.protocol.Version)1 RpcContext (io.seata.core.rpc.RpcContext)1 AbstractIdentifyRequestProto (io.seata.serializer.protobuf.generated.AbstractIdentifyRequestProto)1 RegisterRMRequestProto (io.seata.serializer.protobuf.generated.RegisterRMRequestProto)1 Arrays (java.util.Arrays)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Map (java.util.Map)1 Set (java.util.Set)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1