public static NetFactory getFactory(Map<String, String> config) { String netFactoryName = config.get(Constants.NET_FACTORY_NAME_KEY); if (netFactoryName == null) netFactoryName = Constants.DEFAULT_NET_FACTORY_NAME; NetFactory factory = getFactory(netFactoryName); if (factory == null) { throw new RuntimeException("NetFactory '" + netFactoryName + "' can not found"); } return factory; }
public static void deregisterFactory(NetFactory factory) { instance.deregisterEngine(factory); } }
public static NetFactory getFactory(String name) { return instance.getEngine(name); }
public NetFactoryBase(String name, NetClient netClient) { this.name = name; this.netClient = netClient; // 见PluggableEngineManager.PluggableEngineService中的注释 NetFactoryManager.getInstance().registerEngine(this); }
public static void registerFactory(NetFactory factory) { instance.registerEngine(factory); }
@Override public void init(Map<String, String> config) { if (!config.containsKey("port")) config.put("port", String.valueOf(Constants.DEFAULT_TCP_PORT)); NetFactory factory = NetFactoryManager.getFactory(config); NetServer netServer = factory.createNetServer(); netServer.setConnectionManager(this); setProtocolServer(netServer); netServer.init(config); NetEndpoint.setLocalTcpEndpoint(getHost(), getPort()); }
@Override public void init(Map<String, String> config) { if (!config.containsKey("port")) config.put("port", String.valueOf(Constants.DEFAULT_P2P_PORT)); NetFactory factory = NetFactoryManager.getFactory(config); NetServer netServer = factory.createNetServer(); netServer.setConnectionManager(this); setProtocolServer(netServer); netServer.init(config); NetEndpoint.setLocalP2pEndpoint(getHost(), getPort()); }
private Transfer initTransfer(ConnectionInfo ci, NetEndpoint endpoint) throws Exception { NetFactory factory = NetFactoryManager.getFactory(ci.getNetFactoryName()); CaseInsensitiveMap<String> config = new CaseInsensitiveMap<>(ci.getProperties()); AsyncConnection conn = factory.getNetClient().createConnection(config, endpoint); if (!(conn instanceof TcpClientConnection)) { throw DbException.throwInternalError("not tcp client connection: " + conn.getClass().getName()); } tcpConnection = (TcpClientConnection) conn; sessionId = getNextId(); transfer = tcpConnection.createTransfer(this); tcpConnection.writeInitPacket(this, transfer, ci); if (isValid()) { tcpConnection.addSession(sessionId, this); } return transfer; }
public P2pConnection getConnection(NetEndpoint remoteEndpoint) { remoteEndpoint = ClusterMetaData.getPreferredIP(remoteEndpoint); String remoteHostAndPort = remoteEndpoint.getHostAndPort(); P2pConnection conn = connections.get(remoteHostAndPort); if (conn == null) { synchronized (connections) { conn = connections.get(remoteHostAndPort); if (conn != null) return conn; Map<String, String> config = P2pServer.instance.getConfig(); NetFactory factory = NetFactoryManager.getFactory(config); try { conn = (P2pConnection) factory.getNetClient().createConnection(config, remoteEndpoint, this); String localHostAndPort = ConfigDescriptor.getLocalEndpoint().getHostAndPort(); conn.initTransfer(remoteEndpoint, localHostAndPort); // connections.put(remoteHostAndPort, conn); //调用initTransfer成功后已经加到connections } catch (Exception e) { // TODO 是否不应该立刻移除节点 Gossiper.instance.removeEndpoint(remoteEndpoint); logger.error("Failed to connect " + remoteEndpoint, e); throw DbException.convert(e); } } } return conn; }