/** * @param fut Future. * @return {@code True} if future was removed from queue. */ boolean removeFuture(SessionWriteRequest fut) { assert closed(); return queue.removeLastOccurrence(fut); }
/** * @param ses Session. * @param op Operation. * @return Future for operation. */ private GridNioFuture<?> pauseResumeReads(GridNioSession ses, NioOperation op) { assert ses instanceof GridSelectorNioSessionImpl; assert op == NioOperation.PAUSE_READ || op == NioOperation.RESUME_READ; GridSelectorNioSessionImpl impl = (GridSelectorNioSessionImpl)ses; if (impl.closed()) return new GridNioFinishedFuture(new IOException("Failed to pause/resume reads " + "(connection was closed): " + ses)); NioOperationFuture<?> fut = new NioOperationFuture<Void>(impl, op); impl.offerStateChange(fut); return fut; }
/** * @param ses Session to close. * @return Future for operation. */ public GridNioFuture<Boolean> close(GridNioSession ses) { assert ses instanceof GridSelectorNioSessionImpl : ses; GridSelectorNioSessionImpl impl = (GridSelectorNioSessionImpl)ses; if (impl.closed()) return new GridNioFinishedFuture<>(false); NioOperationFuture<Boolean> fut = new NioOperationFuture<>(impl, NioOperation.CLOSE); impl.offerStateChange(fut); return fut; }
/** * @param ses Session. * @param req Request. * @param sys System message flag. * @throws IgniteCheckedException If session was closed. */ private void send0(GridSelectorNioSessionImpl ses, SessionWriteRequest req, boolean sys) throws IgniteCheckedException { assert ses != null; assert req != null; int msgCnt = sys ? ses.offerSystemFuture(req) : ses.offerFuture(req); if (ses.closed()) { if (ses.removeFuture(req)) { IOException err = new IOException("Failed to send message (connection was closed): " + ses); req.onError(err); if (!(req instanceof GridNioFuture)) throw new IgniteCheckedException(err); } } else if (!ses.procWrite.get() && ses.procWrite.compareAndSet(false, true)) { AbstractNioClientWorker worker = (AbstractNioClientWorker)ses.worker(); if (worker != null) worker.offer((SessionChangeRequest)req); } if (msgQueueLsnr != null) msgQueueLsnr.apply(ses, msgCnt); }
/** * @param fut Future. * @return {@code True} if future was removed from queue. */ boolean removeFuture(SessionWriteRequest fut) { assert closed(); return queue.removeLastOccurrence(fut); }
/** * @param ses Session. * @param op Operation. * @return Future for operation. */ private GridNioFuture<?> pauseResumeReads(GridNioSession ses, NioOperation op) { assert ses instanceof GridSelectorNioSessionImpl; assert op == NioOperation.PAUSE_READ || op == NioOperation.RESUME_READ; GridSelectorNioSessionImpl impl = (GridSelectorNioSessionImpl)ses; if (impl.closed()) return new GridNioFinishedFuture(new IOException("Failed to pause/resume reads " + "(connection was closed): " + ses)); NioOperationFuture<?> fut = new NioOperationFuture<Void>(impl, op); impl.offerStateChange(fut); return fut; }
/** * @param ses Session to close. * @return Future for operation. */ public GridNioFuture<Boolean> close(GridNioSession ses) { assert ses instanceof GridSelectorNioSessionImpl : ses; GridSelectorNioSessionImpl impl = (GridSelectorNioSessionImpl)ses; if (impl.closed()) return new GridNioFinishedFuture<>(false); NioOperationFuture<Boolean> fut = new NioOperationFuture<>(impl, NioOperation.CLOSE); impl.offerStateChange(fut); return fut; }
/** * @param ses Session. * @param req Request. * @param sys System message flag. * @throws IgniteCheckedException If session was closed. */ private void send0(GridSelectorNioSessionImpl ses, SessionWriteRequest req, boolean sys) throws IgniteCheckedException { assert ses != null; assert req != null; int msgCnt = sys ? ses.offerSystemFuture(req) : ses.offerFuture(req); if (ses.closed()) { if (ses.removeFuture(req)) { IOException err = new IOException("Failed to send message (connection was closed): " + ses); req.onError(err); if (!(req instanceof GridNioFuture)) throw new IgniteCheckedException(err); } } else if (!ses.procWrite.get() && ses.procWrite.compareAndSet(false, true)) { AbstractNioClientWorker worker = (AbstractNioClientWorker)ses.worker(); if (worker != null) worker.offer((SessionChangeRequest)req); } if (msgQueueLsnr != null) msgQueueLsnr.apply(ses, msgCnt); }