/** * @param message * @return */ private static RpcResponseKey createRpcResponseKey(final OfHeader message) { return new RpcResponseKey(message.getXid(), message.getImplementedInterface().getName()); }
@Override public void push(OfHeader message, ConnectionConductor conductor, QueueKeeper.QueueType queueType) { QueueItemOFImpl qItem = new QueueItemOFImpl(message, conductor, queueType); boolean enqueued = false; switch (queueType) { case DEFAULT: enqueued = queueDefault.offer(qItem); break; case UNORDERED: enqueued = queueUnordered.offer(qItem); break; default: LOG.warn("unsupported queue type: [{}] -> dropping message [{}]", queueType, message.getImplementedInterface()); } if (enqueued) { harvesterHandle.ping(); } else { LOG.debug("ingress throttling is use -> {}", queueType); } // if enqueueing fails -> message will be dropped }
@Override public void run() { LOG.debug("message received, type: {}", ticket.getMessage().getImplementedInterface().getSimpleName()); List<DataObject> translate; try { translate = translate(ticket); ticket.getResult().set(translate); ticket.setDirectResult(translate); // spying on result if (spy != null) { spy.spyIn(ticket.getMessage()); for (DataObject outMessage : translate) { spy.spyOut(outMessage); } } } catch (Exception e) { LOG.warn("translation problem: {}", e.getMessage()); ticket.getResult().setException(e); } LOG.debug("message processing done (type: {}, ticket: {})", ticket.getMessage().getImplementedInterface().getSimpleName(), System.identityHashCode(ticket)); } };
Class<? extends DataContainer> messageType = ticket.getMessage().getImplementedInterface(); ConnectionConductor conductor = ticket.getConductor(); Collection<IMDMessageTranslator<OfHeader, List<DataObject>>> translators = null;
@Override public void directProcessQueueItem(QueueItem<OfHeader> queueItem) { messageSpy.spyMessage(queueItem.getMessage(), STATISTIC_GROUP.FROM_SWITCH_ENQUEUED); TicketImpl<OfHeader, DataObject> ticket = new TicketImpl<>(); ticket.setConductor(queueItem.getConnectionConductor()); ticket.setMessage(queueItem.getMessage()); LOG.debug("ticket scheduling: {}, ticket: {}", queueItem.getMessage().getImplementedInterface().getSimpleName(), System.identityHashCode(queueItem)); ticketProcessorFactory.createProcessor(ticket).run(); // publish notification finisher.firePopNotification(ticket.getDirectResult()); }
@Override public void enqueueQueueItem(QueueItem<OfHeader> queueItem) { messageSpy.spyMessage(queueItem.getMessage(), STATISTIC_GROUP.FROM_SWITCH_ENQUEUED); TicketImpl<OfHeader, DataObject> ticket = new TicketImpl<>(); ticket.setConductor(queueItem.getConnectionConductor()); ticket.setMessage(queueItem.getMessage()); ticket.setQueueType(queueItem.getQueueType()); LOG.trace("ticket scheduling: {}, ticket: {}", queueItem.getMessage().getImplementedInterface().getSimpleName(), System.identityHashCode(queueItem)); scheduleTicket(ticket); }