Search in sources :

Example 1 with RegisterCommand

use of tezc.core.cluster.state.command.RegisterCommand in project tezcRaft by tezc.

the class Cluster method handleIncomingConnEvent.

/**
 * Handle incoming connection callback
 * @param conn incoming connection
 * @param req  connectRequest message
 */
public void handleIncomingConnEvent(Connection conn, ConnectReq req) {
    if (req.isClient()) {
        if (role != Role.LEADER) {
            conn.sendCancelEvent();
            return;
        }
        PeerNode node = clients.get(req.getName());
        if (node != null) {
            node.inherit(conn);
            conn.sendAcceptConnEvent(node);
            node.sendConnectResp(clusterRecord, node.getId(), node.getSequence(), true);
        } else {
            node = new PeerNode(worker, this, conn, null, new NodeRecord(req.getName(), ""), PeerNode.Type.CLIENT);
            conn.sendAcceptConnEvent(node);
            clients.put(req.getName(), node);
            RegisterCommand cmd = new RegisterCommand(req.getName());
            cmd.encode();
            createEntry(new CommandRequest(own, new ClientReq(false, 0, sequence++, false, cmd.getRaw())));
            flush();
        }
    } else {
        for (PeerNode node : nodes) {
            if (req.getName().equals(node.getRemote().name)) {
                node.inherit(conn);
                conn.sendAcceptConnEvent(node);
                node.sendConnectResp(clusterRecord, node.getId(), node.getSequence(), true);
                if (!activeNodes.contains(node)) {
                    activeNodes.add(node);
                }
                return;
            }
        }
        conn.sendCancelEvent();
    }
}
Also used : NodeRecord(tezc.core.record.NodeRecord) PeerNode(tezc.core.node.PeerNode) RegisterCommand(tezc.core.cluster.state.command.RegisterCommand)

Aggregations

RegisterCommand (tezc.core.cluster.state.command.RegisterCommand)1 PeerNode (tezc.core.node.PeerNode)1 NodeRecord (tezc.core.record.NodeRecord)1