Search in sources :

Example 1 with Time

use of org.apache.zookeeper.common.Time in project zookeeper by apache.

the class Learner method connectToLeader.

/**
 * Establish a connection with the LearnerMaster found by findLearnerMaster.
 * Followers only connect to Leaders, Observers can connect to any active LearnerMaster.
 * Retries until either initLimit time has elapsed or 5 tries have happened.
 * @param multiAddr - the address of the Peer to connect to.
 * @throws IOException - if the socket connection fails on the 5th attempt
 * if there is an authentication failure while connecting to leader
 */
protected void connectToLeader(MultipleAddresses multiAddr, String hostname) throws IOException {
    this.leaderAddr = multiAddr;
    Set<InetSocketAddress> addresses;
    if (self.isMultiAddressReachabilityCheckEnabled()) {
        // even if none of the addresses are reachable, we want to try to establish connection
        // see ZOOKEEPER-3758
        addresses = multiAddr.getAllReachableAddressesOrAll();
    } else {
        addresses = multiAddr.getAllAddresses();
    }
    ExecutorService executor = Executors.newFixedThreadPool(addresses.size());
    CountDownLatch latch = new CountDownLatch(addresses.size());
    AtomicReference<Socket> socket = new AtomicReference<>(null);
    addresses.stream().map(address -> new LeaderConnector(address, socket, latch)).forEach(executor::submit);
    try {
        latch.await();
    } catch (InterruptedException e) {
        LOG.warn("Interrupted while trying to connect to Leader", e);
    } finally {
        executor.shutdown();
        try {
            if (!executor.awaitTermination(1, TimeUnit.SECONDS)) {
                LOG.error("not all the LeaderConnector terminated properly");
            }
        } catch (InterruptedException ie) {
            LOG.error("Interrupted while terminating LeaderConnector executor.", ie);
        }
    }
    if (socket.get() == null) {
        throw new IOException("Failed connect to " + multiAddr);
    } else {
        sock = socket.get();
        sockBeingClosed.set(false);
    }
    self.authLearner.authenticate(sock, hostname);
    leaderIs = BinaryInputArchive.getArchive(new BufferedInputStream(sock.getInputStream()));
    bufferedOutput = new BufferedOutputStream(sock.getOutputStream());
    leaderOs = BinaryOutputArchive.getArchive(bufferedOutput);
    if (asyncSending) {
        startSendingThread();
    }
}
Also used : BinaryOutputArchive(org.apache.jute.BinaryOutputArchive) Time(org.apache.zookeeper.common.Time) ServiceUtils(org.apache.zookeeper.util.ServiceUtils) BufferedInputStream(java.io.BufferedInputStream) SSLSocket(javax.net.ssl.SSLSocket) InputArchive(org.apache.jute.InputArchive) LoggerFactory(org.slf4j.LoggerFactory) SetDataTxn(org.apache.zookeeper.txn.SetDataTxn) MessageTracker(org.apache.zookeeper.server.util.MessageTracker) ByteBuffer(java.nio.ByteBuffer) ByteArrayInputStream(java.io.ByteArrayInputStream) DataOutputStream(java.io.DataOutputStream) Map(java.util.Map) ServerCnxn(org.apache.zookeeper.server.ServerCnxn) ZooTrace(org.apache.zookeeper.server.ZooTrace) QuorumServer(org.apache.zookeeper.server.quorum.QuorumPeer.QuorumServer) ConfigUtils(org.apache.zookeeper.server.util.ConfigUtils) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) Record(org.apache.jute.Record) InetSocketAddress(java.net.InetSocketAddress) ZxidUtils(org.apache.zookeeper.server.util.ZxidUtils) Executors(java.util.concurrent.Executors) Request(org.apache.zookeeper.server.Request) CountDownLatch(java.util.concurrent.CountDownLatch) X509Exception(org.apache.zookeeper.common.X509Exception) Entry(java.util.Map.Entry) DataInputStream(java.io.DataInputStream) Socket(java.net.Socket) ByteArrayOutputStream(java.io.ByteArrayOutputStream) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) QuorumVerifier(org.apache.zookeeper.server.quorum.flexible.QuorumVerifier) TxnDigest(org.apache.zookeeper.txn.TxnDigest) Deque(java.util.Deque) AtomicReference(java.util.concurrent.atomic.AtomicReference) BufferedOutputStream(java.io.BufferedOutputStream) ServerMetrics(org.apache.zookeeper.server.ServerMetrics) OutputArchive(org.apache.jute.OutputArchive) SerializeUtils(org.apache.zookeeper.server.util.SerializeUtils) ExecutorService(java.util.concurrent.ExecutorService) OpCode(org.apache.zookeeper.ZooDefs.OpCode) Logger(org.slf4j.Logger) UTF_8(java.nio.charset.StandardCharsets.UTF_8) IOException(java.io.IOException) TxnHeader(org.apache.zookeeper.txn.TxnHeader) ExitCode(org.apache.zookeeper.server.ExitCode) BinaryInputArchive(org.apache.jute.BinaryInputArchive) TimeUnit(java.util.concurrent.TimeUnit) TxnLogEntry(org.apache.zookeeper.server.TxnLogEntry) ArrayDeque(java.util.ArrayDeque) InetSocketAddress(java.net.InetSocketAddress) AtomicReference(java.util.concurrent.atomic.AtomicReference) IOException(java.io.IOException) CountDownLatch(java.util.concurrent.CountDownLatch) BufferedInputStream(java.io.BufferedInputStream) ExecutorService(java.util.concurrent.ExecutorService) BufferedOutputStream(java.io.BufferedOutputStream) SSLSocket(javax.net.ssl.SSLSocket) Socket(java.net.Socket)

Aggregations

BufferedInputStream (java.io.BufferedInputStream)1 BufferedOutputStream (java.io.BufferedOutputStream)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 DataInputStream (java.io.DataInputStream)1 DataOutputStream (java.io.DataOutputStream)1 IOException (java.io.IOException)1 InetSocketAddress (java.net.InetSocketAddress)1 Socket (java.net.Socket)1 ByteBuffer (java.nio.ByteBuffer)1 UTF_8 (java.nio.charset.StandardCharsets.UTF_8)1 ArrayDeque (java.util.ArrayDeque)1 Deque (java.util.Deque)1 Map (java.util.Map)1 Entry (java.util.Map.Entry)1 Set (java.util.Set)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 ExecutorService (java.util.concurrent.ExecutorService)1 Executors (java.util.concurrent.Executors)1