Search in sources :

Example 16 with ManagedChannel

use of org.apache.beam.vendor.grpc.v1p43p2.io.grpc.ManagedChannel in project vertx-zero by silentbalanceyh.

the class RpcSslTool method getChannel.

/**
 * @param vertx  Vert.x instance
 * @param config configuration
 * @return ManagedChannel
 */
public static ManagedChannel getChannel(final Vertx vertx, final JsonObject config) {
    final String rpcHost = config.getString(Key.HOST);
    final Integer rpcPort = config.getInteger(Key.PORT);
    final VertxChannelBuilder builder = VertxChannelBuilder.forAddress(vertx, rpcHost, rpcPort);
    Fn.safeSemi(null != config.getValue(Key.SSL), LOGGER, () -> {
        final JsonObject sslConfig = config.getJsonObject(Key.SSL);
        if (null != sslConfig && !sslConfig.isEmpty()) {
            final Object type = sslConfig.getValue("type");
            final CertType certType = null == type ? CertType.PEM : Ut.toEnum(CertType.class, type.toString());
            final TrustPipe<JsonObject> pipe = TrustPipe.get(certType);
            // Enable SSL
            builder.useSsl(pipe.parse(sslConfig));
        } else {
            builder.usePlaintext(true);
        }
    });
    final ManagedChannel channel = builder.build();
    LOGGER.info(Info.CLIENT_RPC, rpcHost, String.valueOf(rpcPort), String.valueOf(channel.hashCode()));
    return channel;
}
Also used : VertxChannelBuilder(io.vertx.grpc.VertxChannelBuilder) JsonObject(io.vertx.core.json.JsonObject) CertType(io.vertx.up.eon.em.CertType) ManagedChannel(io.grpc.ManagedChannel) JsonObject(io.vertx.core.json.JsonObject)

Example 17 with ManagedChannel

use of org.apache.beam.vendor.grpc.v1p43p2.io.grpc.ManagedChannel in project fabric-sdk-java by hyperledger.

the class PeerEventServiceClient method shutdown.

synchronized void shutdown(boolean force) {
    if (shutdown) {
        return;
    }
    shutdown = true;
    StreamObserver<DeliverResponse> lsno = so;
    nso = null;
    so = null;
    if (null != lsno) {
        try {
            lsno.onCompleted();
        } catch (Exception e) {
            logger.error(e);
        }
    }
    ManagedChannel lchannel = managedChannel;
    managedChannel = null;
    if (lchannel != null) {
        if (force) {
            lchannel.shutdownNow();
        } else {
            boolean isTerminated = false;
            try {
                isTerminated = lchannel.shutdown().awaitTermination(3, TimeUnit.SECONDS);
            } catch (Exception e) {
                // best effort
                logger.debug(e);
            }
            if (!isTerminated) {
                lchannel.shutdownNow();
            }
        }
    }
    peer = null;
    channelEventQue = null;
}
Also used : ManagedChannel(io.grpc.ManagedChannel) DeliverResponse(org.hyperledger.fabric.protos.peer.PeerEvents.DeliverResponse) TransactionException(org.hyperledger.fabric.sdk.exception.TransactionException) CryptoException(org.hyperledger.fabric.sdk.exception.CryptoException)

Example 18 with ManagedChannel

use of org.apache.beam.vendor.grpc.v1p43p2.io.grpc.ManagedChannel in project fabric-sdk-java by hyperledger.

the class PeerEventServiceClient method connectEnvelope.

/**
 * Get the last block received by this peer.
 *
 * @return The last block received by this peer. May return null if no block has been received since first reactivated.
 */
void connectEnvelope(Envelope envelope) throws TransactionException {
    if (shutdown) {
        throw new TransactionException("Peer eventing client is shutdown");
    }
    ManagedChannel lmanagedChannel = managedChannel;
    if (lmanagedChannel == null || lmanagedChannel.isTerminated() || lmanagedChannel.isShutdown()) {
        lmanagedChannel = channelBuilder.build();
        managedChannel = lmanagedChannel;
    }
    try {
        DeliverGrpc.DeliverStub broadcast = DeliverGrpc.newStub(lmanagedChannel);
        // final DeliverResponse[] ret = new DeliverResponse[1];
        // final List<DeliverResponse> retList = new ArrayList<>();
        final List<Throwable> throwableList = new ArrayList<>();
        final CountDownLatch finishLatch = new CountDownLatch(1);
        so = new StreamObserver<DeliverResponse>() {

            @Override
            public void onNext(DeliverResponse resp) {
                // logger.info("Got Broadcast response: " + resp);
                logger.trace(format("DeliverResponse channel %s peer %s resp status value:%d  status %s, typecase %s ", channelName, peer.getName(), resp.getStatusValue(), resp.getStatus(), resp.getTypeCase()));
                final DeliverResponse.TypeCase typeCase = resp.getTypeCase();
                if (typeCase == STATUS) {
                    logger.debug(format("DeliverResponse channel %s peer %s setting done.", channelName, peer.getName()));
                    if (resp.getStatus() == Common.Status.SUCCESS) {
                        // unlike you may think this only happens when all blocks are fetched.
                        peer.setLastConnectTime(System.currentTimeMillis());
                        peer.resetReconnectCount();
                    } else {
                        throwableList.add(new TransactionException(format("Channel %s peer %s Status returned failure code %d (%s) during peer service event registration", channelName, peer.getName(), resp.getStatusValue(), resp.getStatus().name())));
                    }
                } else if (typeCase == FILTERED_BLOCK || typeCase == BLOCK) {
                    if (typeCase == BLOCK) {
                        logger.trace(format("Channel %s peer %s got event block hex hashcode: %016x, block number: %d", channelName, peer.getName(), resp.getBlock().hashCode(), resp.getBlock().getHeader().getNumber()));
                    } else {
                        logger.trace(format("Channel %s peer %s got event block hex hashcode: %016x, block number: %d", channelName, peer.getName(), resp.getFilteredBlock().hashCode(), resp.getFilteredBlock().getNumber()));
                    }
                    peer.setLastConnectTime(System.currentTimeMillis());
                    long reconnectCount = peer.getReconnectCount();
                    if (reconnectCount > 1) {
                        logger.info(format("Peer eventing service reconnected after %d attempts on channel %s, peer %s, url %s", reconnectCount, channelName, name, url));
                    }
                    peer.resetReconnectCount();
                    BlockEvent blockEvent = new BlockEvent(peer, resp);
                    peer.setLastBlockSeen(blockEvent);
                    channelEventQue.addBEvent(blockEvent);
                } else {
                    logger.error(format("Channel %s peer %s got event block with unknown type: %s, %d", channelName, peer.getName(), typeCase.name(), typeCase.getNumber()));
                    throwableList.add(new TransactionException(format("Channel %s peer %s Status got unknown type %s, %d", channelName, peer.getName(), typeCase.name(), typeCase.getNumber())));
                }
                finishLatch.countDown();
            }

            @Override
            public void onError(Throwable t) {
                ManagedChannel llmanagedChannel = managedChannel;
                if (llmanagedChannel != null) {
                    llmanagedChannel.shutdownNow();
                    managedChannel = null;
                }
                if (!shutdown) {
                    final long reconnectCount = peer.getReconnectCount();
                    if (PEER_EVENT_RECONNECTION_WARNING_RATE > 1 && reconnectCount % PEER_EVENT_RECONNECTION_WARNING_RATE == 1) {
                        logger.warn(format("Received error on peer eventing service on channel %s, peer %s, url %s, attempts %d. %s", channelName, name, url, reconnectCount, t.getMessage()));
                    } else {
                        logger.trace(format("Received error on peer eventing service on channel %s, peer %s, url %s, attempts %d. %s", channelName, name, url, reconnectCount, t.getMessage()));
                    }
                    peer.reconnectPeerEventServiceClient(PeerEventServiceClient.this, t);
                }
                finishLatch.countDown();
            }

            @Override
            public void onCompleted() {
                logger.debug(format("DeliverResponse onCompleted channel %s peer %s setting done.", channelName, peer.getName()));
                // done = true;
                // There should have been a done before this...
                finishLatch.countDown();
            }
        };
        nso = filterBlock ? broadcast.deliverFiltered(so) : broadcast.deliver(so);
        nso.onNext(envelope);
        // try {
        if (!finishLatch.await(peerEventRegistrationWaitTimeMilliSecs, TimeUnit.MILLISECONDS)) {
            TransactionException ex = new TransactionException(format("Channel %s connect time exceeded for peer eventing service %s, timed out at %d ms.", channelName, name, peerEventRegistrationWaitTimeMilliSecs));
            throwableList.add(0, ex);
        }
        logger.trace("Done waiting for reply!");
        if (!throwableList.isEmpty()) {
            ManagedChannel llmanagedChannel = managedChannel;
            if (llmanagedChannel != null) {
                llmanagedChannel.shutdownNow();
                managedChannel = null;
            }
            Throwable throwable = throwableList.get(0);
            peer.reconnectPeerEventServiceClient(this, throwable);
        }
    } catch (InterruptedException e) {
        ManagedChannel llmanagedChannel = managedChannel;
        if (llmanagedChannel != null) {
            llmanagedChannel.shutdownNow();
            managedChannel = null;
        }
        // not likely
        logger.error(e);
        peer.reconnectPeerEventServiceClient(this, e);
    } finally {
        if (null != nso) {
            try {
                nso.onCompleted();
            } catch (Exception e) {
                // Best effort only report on debug
                logger.debug(format("Exception completing connect with channel %s,  name %s, url %s %s", channelName, name, url, e.getMessage()), e);
            }
        }
    }
}
Also used : ArrayList(java.util.ArrayList) CountDownLatch(java.util.concurrent.CountDownLatch) TransactionException(org.hyperledger.fabric.sdk.exception.TransactionException) CryptoException(org.hyperledger.fabric.sdk.exception.CryptoException) TransactionException(org.hyperledger.fabric.sdk.exception.TransactionException) DeliverGrpc(org.hyperledger.fabric.protos.peer.DeliverGrpc) ManagedChannel(io.grpc.ManagedChannel) DeliverResponse(org.hyperledger.fabric.protos.peer.PeerEvents.DeliverResponse)

Example 19 with ManagedChannel

use of org.apache.beam.vendor.grpc.v1p43p2.io.grpc.ManagedChannel in project fabric-sdk-java by hyperledger.

the class EventHub method reconnect.

private void reconnect() throws EventHubException {
    final ManagedChannel lmanagedChannel = managedChannel;
    if (lmanagedChannel != null) {
        managedChannel = null;
        lmanagedChannel.shutdownNow();
    }
    EventHubDisconnected ldisconnectedHandler = disconnectedHandler;
    if (!shutdown && null != ldisconnectedHandler) {
        ++reconnectCount;
        ldisconnectedHandler.disconnected(this);
    }
}
Also used : ManagedChannel(io.grpc.ManagedChannel)

Example 20 with ManagedChannel

use of org.apache.beam.vendor.grpc.v1p43p2.io.grpc.ManagedChannel in project fabric-sdk-java by hyperledger.

the class OrdererClient method sendDeliver.

DeliverResponse[] sendDeliver(Common.Envelope envelope) throws TransactionException {
    if (shutdown) {
        throw new TransactionException("Orderer client is shutdown");
    }
    StreamObserver<Common.Envelope> nso = null;
    ManagedChannel lmanagedChannel = managedChannel;
    if (lmanagedChannel == null || lmanagedChannel.isTerminated() || lmanagedChannel.isShutdown()) {
        lmanagedChannel = channelBuilder.build();
        managedChannel = lmanagedChannel;
    }
    try {
        AtomicBroadcastGrpc.AtomicBroadcastStub broadcast = AtomicBroadcastGrpc.newStub(lmanagedChannel);
        // final DeliverResponse[] ret = new DeliverResponse[1];
        final List<DeliverResponse> retList = new ArrayList<>();
        final List<Throwable> throwableList = new ArrayList<>();
        final CountDownLatch finishLatch = new CountDownLatch(1);
        StreamObserver<DeliverResponse> so = new StreamObserver<DeliverResponse>() {

            boolean done = false;

            @Override
            public void onNext(DeliverResponse resp) {
                // logger.info("Got Broadcast response: " + resp);
                logger.debug("resp status value: " + resp.getStatusValue() + ", resp: " + resp.getStatus() + ", type case: " + resp.getTypeCase());
                if (done) {
                    return;
                }
                if (resp.getTypeCase() == STATUS) {
                    done = true;
                    retList.add(0, resp);
                    finishLatch.countDown();
                } else {
                    retList.add(resp);
                }
            }

            @Override
            public void onError(Throwable t) {
                if (!shutdown) {
                    logger.error(format("Received error on channel %s, orderer %s, url %s, %s", channelName, name, url, t.getMessage()), t);
                }
                throwableList.add(t);
                finishLatch.countDown();
            }

            @Override
            public void onCompleted() {
                logger.trace("onCompleted");
                finishLatch.countDown();
            }
        };
        nso = broadcast.deliver(so);
        nso.onNext(envelope);
        try {
            if (!finishLatch.await(ordererWaitTimeMilliSecs, TimeUnit.MILLISECONDS)) {
                TransactionException ex = new TransactionException(format("Channel %s sendDeliver time exceeded for orderer %s, timed out at %d ms.", channelName, name, ordererWaitTimeMilliSecs));
                logger.error(ex.getMessage(), ex);
                throw ex;
            }
            logger.trace("Done waiting for reply!");
        } catch (InterruptedException e) {
            logger.error(e);
        }
        if (!throwableList.isEmpty()) {
            Throwable throwable = throwableList.get(0);
            TransactionException e = new TransactionException(format("Channel %s sendDeliver failed on orderer %s. Reason: %s", channelName, name, throwable.getMessage()), throwable);
            logger.error(e.getMessage(), e);
            throw e;
        }
        return retList.toArray(new DeliverResponse[retList.size()]);
    } catch (Throwable t) {
        managedChannel = null;
        throw t;
    } finally {
        if (null != nso) {
            try {
                nso.onCompleted();
            } catch (Exception e) {
                // Best effort only report on debug
                logger.debug(format("Exception completing sendDeliver with channel %s,  name %s, url %s %s", channelName, name, url, e.getMessage()), e);
            }
        }
    }
}
Also used : StreamObserver(io.grpc.stub.StreamObserver) AtomicBroadcastGrpc(org.hyperledger.fabric.protos.orderer.AtomicBroadcastGrpc) ArrayList(java.util.ArrayList) CountDownLatch(java.util.concurrent.CountDownLatch) TransactionException(org.hyperledger.fabric.sdk.exception.TransactionException) TransactionException(org.hyperledger.fabric.sdk.exception.TransactionException) ManagedChannel(io.grpc.ManagedChannel) DeliverResponse(org.hyperledger.fabric.protos.orderer.Ab.DeliverResponse)

Aggregations

ManagedChannel (io.grpc.ManagedChannel)163 Test (org.junit.Test)92 CountDownLatch (java.util.concurrent.CountDownLatch)26 ManagedChannel (org.apache.beam.vendor.grpc.v1p43p2.io.grpc.ManagedChannel)26 ArrayList (java.util.ArrayList)20 Metadata (io.grpc.Metadata)18 EquivalentAddressGroup (io.grpc.EquivalentAddressGroup)15 ExecutorService (java.util.concurrent.ExecutorService)13 ByteString (com.google.protobuf.ByteString)12 Status (io.grpc.Status)12 StreamObserver (org.apache.beam.vendor.grpc.v1p43p2.io.grpc.stub.StreamObserver)11 StreamObserver (io.grpc.stub.StreamObserver)10 ConcurrentLinkedQueue (java.util.concurrent.ConcurrentLinkedQueue)10 AtomicReference (java.util.concurrent.atomic.AtomicReference)10 BeamFnApi (org.apache.beam.model.fnexecution.v1.BeamFnApi)10 CallOptions (io.grpc.CallOptions)9 Subchannel (io.grpc.LoadBalancer.Subchannel)9 SubchannelPicker (io.grpc.LoadBalancer.SubchannelPicker)9 LinkedBlockingQueue (java.util.concurrent.LinkedBlockingQueue)9 Endpoints (org.apache.beam.model.pipeline.v1.Endpoints)9