List of usage examples for io.netty.channel Channel isOpen
boolean isOpen();
From source file:dorkbox.network.connection.registration.remote.RegistrationRemoteHandler.java
License:Apache License
@Override public void exceptionCaught(ChannelHandlerContext context, Throwable cause) throws Exception { Channel channel = context.channel(); this.logger.error("Unexpected exception while trying to send/receive data on remote network channel. ({})" + System.getProperty("line.separator"), channel.remoteAddress(), cause); if (channel.isOpen()) { channel.close();// w ww . j ava 2 s. c o m } }
From source file:dorkbox.network.connection.Shutdownable.java
License:Apache License
void shutdownAllChannels() { synchronized (shutdownChannelList) { // now we stop all of our channels. For the server, this will close the server manager for UDP sessions for (ChannelFuture f : shutdownChannelList) { Channel channel = f.channel(); if (channel.isOpen()) { // from the git example on how to shutdown a channel channel.close().syncUninterruptibly(); Thread.yield();//from www .j a v a 2 s. c o m } } // we have to clear the shutdown list. ( shutdownChannelList.clear(); } }
From source file:gash.impl.raft.manager.HeartbeatData.java
License:Apache License
/** * verify the connection is good and if not determine if it should be * disabled.//from w w w . j a va2s. c o m * * @return */ public boolean isGood() { if (status == BeatStatus.Active || status == BeatStatus.Weak) { Channel ch = ServerOpUtil.GetConnectionChannel(nodeId); boolean rtn = ch.isOpen() && ch.isWritable(); if (!rtn) { // TODO how to use the weakThreshold and status lastFailed = System.currentTimeMillis(); failures++; if (failures >= failureThreshold) status = BeatStatus.Failed; else if (failures >= weakTheshold) status = BeatStatus.Weak; } else { failures = 0; lastFailed = 0; } return rtn; } else return false; }
From source file:gash.router.server.queue.CommandInboundAppWorker.java
License:Apache License
@Override public void run() { Channel conn = sq.getChannel(); if (conn == null || !conn.isOpen()) { logger.error("connection missing, no inboundWork communication"); return;/*from www.j a v a 2s .c om*/ } while (true) { if (!forever && sq.inboundWork.size() == 0) break; try { // block until a message is enqueued GeneratedMessage msg = sq.inboundWork.take(); // process request and enqueue response if (msg instanceof Pipe.CommandRequest) { //PrintUtil.printCommand((Pipe.CommandRequest) msg); boolean msgDropFlag; Pipe.CommandRequest req = ((Pipe.CommandRequest) msg); Pipe.Payload payload = req.getPayload(); if (payload.hasPing()) { logger.info("ping from " + req.getHeader().getNodeId()); if (req.getHeader().getDestination() == sq.getRoutingConf().getNodeId()) { //handle message by self logger.info("Message for me: " + payload.getMessage() + " from " + req.getHeader().getSourceHost()); } else { //message doesn't belong to current node. Forward on other edges msgDropFlag = true; PrintUtil.printCommand((Pipe.CommandRequest) msg); if (MessageServer.getEmon() != null) {// forward if Comm-worker port is active for (EdgeInfo ei : MessageServer.getEmon().getOutboundEdgeInfoList()) { if (ei.isActive() && ei.getChannel() != null) {// check if channel of outboundWork edge is active Work.WorkRequest.Builder wb = Work.WorkRequest.newBuilder(); Common.Header.Builder hb = Common.Header.newBuilder(); hb.setNodeId(sq.getRoutingConf().getNodeId()); hb.setTime(req.getHeader().getTime()); hb.setDestination(req.getHeader().getDestination()); hb.setSourceHost(sq.getRoutingConf().getNodeId() + "_" + req.getHeader().getSourceHost()); hb.setDestinationHost(req.getHeader().getDestinationHost()); hb.setMaxHops(5); wb.setHeader(hb); wb.setSecret(1234567809); wb.setPayload(Work.Payload.newBuilder().setPing(true)); Work.WorkRequest work = wb.build(); PerChannelWorkQueue edgeQueue = (PerChannelWorkQueue) ei.getQueue(); edgeQueue.enqueueResponse(work, ei.getChannel()); msgDropFlag = false; logger.info("Workmessage queued"); } } if (msgDropFlag) logger.info("Message dropped <node,ping,destination>: <" + req.getHeader().getNodeId() + "," + payload.getPing() + "," + req.getHeader().getDestination() + ">"); } else {// drop the message or queue it for limited time to send to connected node //todo logger.info("No outbound edges to forward. To be handled"); } } } else if (payload.hasMessage()) { logger.info(payload.getMessage()); } else { //todo } } } catch (InterruptedException ie) { break; } catch (Exception e) { logger.error("Unexpected processing failure", e); break; } } if (!forever) { logger.debug("connection queue closing"); } }
From source file:gash.router.server.queue.CommandOutboundAppWorker.java
License:Apache License
@Override public void run() { Channel conn = sq.channel; if (conn == null || !conn.isOpen()) { PerChannelCommandQueue.logger.error("connection missing, no outboundWork communication"); return;//from www . j a va2s .co m } while (true) { if (!forever && sq.outboundWork.size() == 0) break; try { // block until a message is enqueued GeneratedMessage msg = sq.outboundWork.take(); if (conn.isWritable()) { boolean rtn = false; if (sq.channel != null && sq.channel.isOpen() && sq.channel.isWritable()) { ChannelFuture cf = sq.channel.writeAndFlush(msg); logger.info("Server--sending -- command -- response"); // blocks on write - use listener to be async cf.awaitUninterruptibly(); logger.debug("Written to channel"); rtn = cf.isSuccess(); if (!rtn) { System.out.println("Sending failed " + rtn + "{Reason:" + cf.cause() + "}"); sq.outboundWork.putFirst(msg); } else logger.info("Message Sent"); } } else sq.outboundWork.putFirst(msg); } catch (InterruptedException ie) { break; } catch (Exception e) { logger.error("Unexpected communcation failure", e); break; } } if (!forever) { logger.debug("connection queue closing"); } }
From source file:gash.router.server.queue.GlobalCommandInboundAppWorker.java
License:Apache License
@Override public void run() { Channel conn = sq.getChannel(); if (conn == null || !conn.isOpen()) { logger.error("connection missing, no inboundWork communication"); return;// ww w. j a v a 2 s.co m } while (true) { if (!forever && sq.inboundWork.size() == 0) break; try { // block until a message is enqueued GeneratedMessage msg = sq.inboundWork.take(); boolean msgDropFlag; // process request and enqueue response if (msg instanceof Global.GlobalCommandMessage) { //PrintUtil.printCommand((Pipe.CommandRequest) msg); Global.GlobalCommandMessage req = ((Global.GlobalCommandMessage) msg); if (req.hasPing()) { /*logger.info("ping from " + req.getHeader().getNodeId()); if (req.getHeader().getDestination() == sq.getRoutingConf().getNodeId()) { //handle message by self logger.info("Message for me: " + req.getMessage() + " from " + req.getHeader().getSourceHost()); } else { //message doesn't belong to current node. Forward on other edges msgDropFlag = true; PrintUtil.printGlobalCommand((Global.GlobalCommandMessage) msg); if (MessageServer.getEmon() != null) {// forward if Comm-worker port is active for (EdgeInfo ei : MessageServer.getEmon().getOutboundEdgeInfoList()) { if (ei.isActive() && ei.getChannel() != null) {// check if channel of outboundWork edge is active Work.WorkRequest.Builder wb = Work.WorkRequest.newBuilder(); Common.Header.Builder hb = Common.Header.newBuilder(); hb.setNodeId(sq.getRoutingConf().getNodeId()); hb.setTime(req.getHeader().getTime()); hb.setDestination(req.getHeader().getDestination()); hb.setSourceHost(sq.getRoutingConf().getNodeId() + "_" + req.getHeader().getSourceHost()); hb.setDestinationHost(req.getHeader().getDestinationHost()); hb.setMaxHops(5); wb.setHeader(hb); wb.setSecret(1234567809); wb.setPayload(Work.Payload.newBuilder().setPing(true)); Work.WorkRequest work = wb.build(); PerChannelWorkQueue edgeQueue = (PerChannelWorkQueue) ei.getQueue(); edgeQueue.enqueueResponse(work, ei.getChannel()); msgDropFlag = false; logger.info("Workmessage queued"); } } if (msgDropFlag) logger.info("Message dropped <node,ping,destination>: <" + req.getHeader().getNodeId() + "," + req.getPing() + "," + req.getHeader().getDestination() + ">"); } else {// drop the message or queue it for limited time to send to connected node //todo logger.info("No outbound edges to forward. To be handled"); } }*/ new Ping(sq).handle(req); } else if (req.hasQuery()) { new Query(sq).handle(req); } else { logger.error("Unexpected message type. Yet to handle."); } } } catch (InterruptedException ie) { break; } catch (Exception e) { logger.error("Unexpected processing failure", e); break; } } if (!forever) { logger.info("Command incoming connection queue closing"); } }
From source file:gash.router.server.queue.GlobalCommandOutboundAppWorker.java
License:Apache License
@Override public void run() { Channel conn = sq.channel; if (conn == null || !conn.isOpen()) { PerChannelGlobalCommandQueue.logger.error("connection missing, no outboundWork communication"); return;/*from ww w . j ava 2 s . c o m*/ } while (true) { if (!forever && sq.outboundWork.size() == 0) break; try { // block until a message is enqueued GeneratedMessage msg = sq.outboundWork.take(); if (conn.isWritable()) { boolean rtn = false; if (sq.channel != null && sq.channel.isOpen() && sq.channel.isWritable()) { ChannelFuture cf = sq.channel.writeAndFlush(msg); logger.info("Server--sending -- command -- response"); // blocks on write - use listener to be async cf.awaitUninterruptibly(); logger.debug("Written to channel"); rtn = cf.isSuccess(); if (!rtn) { System.out.println("Sending failed " + rtn + "{Reason:" + cf.cause() + "}"); sq.outboundWork.putFirst(msg); } else logger.info("Message Sent"); } } else sq.outboundWork.putFirst(msg); } catch (InterruptedException ie) { break; } catch (Exception e) { logger.error("Unexpected communcation failure", e); break; } } if (!forever) { logger.info("connection queue closing"); } }
From source file:gash.router.server.queue.WorkInboundAppWorker.java
License:Apache License
@Override public void run() { Channel conn = sq.getChannel(); if (conn == null || !conn.isOpen()) { logger.error("connection missing, no inboundWork communication"); return;/*from ww w .j av a 2 s .co m*/ } while (true) { if (!forever && sq.inbound.size() == 0) break; try { // block until a message is enqueued GeneratedMessage msg = sq.inbound.take(); // process request and enqueue response if (msg instanceof Work.WorkRequest) { Work.WorkRequest req = ((Work.WorkRequest) msg); Work.Payload payload = req.getPayload(); boolean msgDropFlag; //PrintUtil.printWork(req); if (payload.hasBeat()) { //Work.Heartbeat hb = payload.getBeat(); logger.info("heartbeat from " + req.getHeader().getNodeId()); EdgeMonitor emon = MessageServer.getEmon(); EdgeInfo ei = new EdgeInfo(req.getHeader().getNodeId(), "", req.getHeader().getSource()); ei.setChannel(sq.getChannel()); emon.addToInbound(ei); RaftManager.getInstance().assessCurrentState(); } else if (payload.hasPing()) { /*logger.info("ping from <node,host> : <" + req.getHeader().getNodeId() + ", " + req.getHeader().getSourceHost()+">"); PrintUtil.printWork(req); if(req.getHeader().getDestination() == sq.state.getConf().getNodeId()){ //handle message by self logger.info("Ping for me: " + " from "+ req.getHeader().getSourceHost()); Work.WorkRequest.Builder rb = Work.WorkRequest.newBuilder(); Common.Header.Builder hb = Common.Header.newBuilder(); hb.setNodeId(sq.state.getConf().getNodeId()); hb.setTime(System.currentTimeMillis()); hb.setDestination(Integer.parseInt(req.getHeader().getSourceHost().substring(req.getHeader().getSourceHost().lastIndexOf('_')+1))); hb.setSourceHost(req.getHeader().getSourceHost().substring(req.getHeader().getSourceHost().indexOf('_')+1)); hb.setDestinationHost(req.getHeader().getSourceHost()); hb.setMaxHops(5); rb.setHeader(hb); rb.setSecret(1234567809); rb.setPayload(Work.Payload.newBuilder().setPing(true)); //channel.writeAndFlush(rb.build()); sq.enqueueResponse(rb.build(),sq.getChannel()); } else { //message doesn't belong to current node. Forward on other edges msgDropFlag = true; PrintUtil.printWork(req); if (req.getHeader().getMaxHops() > 0 && MessageServer.getEmon() != null) {// forward if Comm-worker port is active for (EdgeInfo ei : MessageServer.getEmon().getOutboundEdgeInfoList()) { if (ei.isActive() && ei.getChannel() != null) {// check if channel of outbound edge is active logger.debug("Workmessage being queued"); Work.WorkRequest.Builder wb = Work.WorkRequest.newBuilder(); Common.Header.Builder hb = Common.Header.newBuilder(); hb.setNodeId(sq.state.getConf().getNodeId()); hb.setTime(req.getHeader().getTime()); hb.setDestination(req.getHeader().getDestination()); hb.setSourceHost(sq.state.getConf().getNodeId()+"_"+req.getHeader().getSourceHost()); hb.setDestinationHost(req.getHeader().getDestinationHost()); hb.setMaxHops(req.getHeader().getMaxHops() -1); wb.setHeader(hb); wb.setSecret(1234567809); wb.setPayload(Work.Payload.newBuilder().setPing(true)); //ei.getChannel().writeAndFlush(wb.build()); PerChannelWorkQueue edgeQueue = (PerChannelWorkQueue) ei.getQueue(); edgeQueue.enqueueResponse(wb.build(),ei.getChannel()); msgDropFlag = false; logger.debug("Workmessage queued"); } } if (msgDropFlag) logger.info("Message dropped <node,ping,destination>: <" + req.getHeader().getNodeId() + "," + payload.getPing() + "," + req.getHeader().getDestination() + ">"); } else {// drop the message or queue it for limited time to send to connected node //todo logger.info("No outbound edges to forward. To be handled"); } }*/ new Ping(sq).handle(req); } else if (payload.hasQuery()) { logger.debug("Query message on work channel from " + req.getHeader().getNodeId()); new Query(sq).handle(req); } else if (payload.hasResponse()) { logger.debug("Response message on work channel from " + req.getHeader().getNodeId()); new Response(sq).handle(req); } else if (payload.hasErr()) { Common.Failure err = payload.getErr(); logger.error("failure from " + req.getHeader().getNodeId()); // PrintUtil.printFailure(err); } else if (payload.hasTask()) { Work.Task t = payload.getTask(); sq.gerServerState().getTasks().addTask(t); } else if (payload.hasState()) { Work.WorkState s = payload.getState(); } else if (payload.hasRaftmsg()) { RaftManager.getInstance().processRequest((Work.WorkRequest) msg); //ElectionManager.getInstance().assessCurrentState(); } } } catch (InterruptedException ie) { break; } catch (Exception e) { logger.error("Unexpected processing failure", e); break; } } if (!forever) { logger.debug("connection queue closing"); } }
From source file:gash.router.server.queue.WorkOutboundAppWorker.java
License:Apache License
@Override public void run() { Channel conn = sq.channel; if (conn == null || !conn.isOpen()) { PerChannelWorkQueue.logger.error("connection missing, no outboundWork communication"); return;/* w w w .ja v a 2 s. c om*/ } while (true) { if (!forever && sq.outbound.size() == 0) break; try { // block until a message is enqueued GeneratedMessage msg = sq.outbound.take(); if (conn.isWritable()) { boolean rtn = false; if (sq.channel != null && sq.channel.isOpen() && sq.channel.isWritable()) { ChannelFuture cf = sq.channel.writeAndFlush((Work.WorkRequest) msg); logger.info("Server--sending -- work-- response"); // blocks on write - use listener to be async cf.awaitUninterruptibly(); logger.debug("Written to channel"); rtn = cf.isSuccess(); if (!rtn) { logger.error("Sending failed " + rtn + "{Reason:" + cf.cause() + "}"); sq.outbound.putFirst(msg); } else logger.info("Message Sent"); } } else sq.outbound.putFirst(msg); } catch (InterruptedException ie) { break; } catch (Exception e) { logger.error("Unexpected communcation failure", e); break; } } if (!forever) { logger.debug("connection queue closing"); } }
From source file:io.advantageous.conekt.net.impl.ConektHandler.java
License:Open Source License
@Override public void exceptionCaught(ChannelHandlerContext chctx, final Throwable t) throws Exception { Channel ch = chctx.channel(); // Don't remove the connection at this point, or the handleClosed won't be called when channelInactive is called! C connection = getConnection(ch);//from w w w .jav a 2 s . co m if (connection != null) { ContextImpl context = getContext(connection); context.executeFromIO(() -> { try { if (ch.isOpen()) { ch.close(); } } catch (Throwable ignore) { } connection.handleException(t); }); } else { ch.close(); } }