public void run() { try { MessageLite m = getResponseDefaultInstance(rpcType); assert rpcConfig.checkReceive(rpcType, m.getClass()); RpcOutcome<?> rpcFuture = queue.getFuture(rpcType, coordinationId, m.getClass()); Parser<?> parser = m.getParserForType(); Object value = parser.parseFrom(new ByteBufInputStream(pBody, pBody.readableBytes())); rpcFuture.set(value, dBody); if (RpcConstants.EXTRA_DEBUGGING) { logger.debug("Updated rpc future {} with value {}", rpcFuture, value); } } catch (Exception ex) { logger.error("Failure while handling response.", ex); } finally { if (pBody != null) { pBody.release(); } if (dBody != null) { dBody.release(); } } }