Search in sources :

Example 1 with SerializedData

use of com.datatorrent.bufferserver.util.SerializedData in project apex-core by apache.

the class LogicalNode method addedData.

@Override
public boolean addedData(boolean checkIfListenerHaveDataToSendOnly) {
    if (!checkIfListenerHaveDataToSendOnly && isReady()) {
        if (caughtup) {
            try {
                /*
           * consume as much data as you can before running out of steam
           */
                if (partitions.isEmpty()) {
                    while (ready && iterator.hasNext()) {
                        SerializedData data = iterator.next();
                        switch(data.buffer[data.dataOffset]) {
                            case MessageType.PAYLOAD_VALUE:
                                ready = policy.distribute(physicalNodes, data);
                                break;
                            case MessageType.NO_MESSAGE_VALUE:
                            case MessageType.NO_MESSAGE_ODD_VALUE:
                                break;
                            case MessageType.RESET_WINDOW_VALUE:
                                final int length = data.length - data.dataOffset + data.offset;
                                Tuple resetWindow = Tuple.getTuple(data.buffer, data.dataOffset, length);
                                baseSeconds = (long) resetWindow.getBaseSeconds() << 32;
                                ready = GiveAll.getInstance().distribute(physicalNodes, data);
                                break;
                            default:
                                //logger.debug("sending data of type {}", MessageType.valueOf(data.buffer[data.dataOffset]));
                                ready = GiveAll.getInstance().distribute(physicalNodes, data);
                                break;
                        }
                    }
                } else {
                    while (ready && iterator.hasNext()) {
                        SerializedData data = iterator.next();
                        final int length = data.length - data.dataOffset + data.offset;
                        switch(data.buffer[data.dataOffset]) {
                            case MessageType.PAYLOAD_VALUE:
                                Tuple tuple = Tuple.getTuple(data.buffer, data.dataOffset, length);
                                int value = tuple.getPartition();
                                for (BitVector bv : partitions) {
                                    if (bv.matches(value)) {
                                        ready = policy.distribute(physicalNodes, data);
                                        break;
                                    }
                                }
                                break;
                            case MessageType.NO_MESSAGE_VALUE:
                            case MessageType.NO_MESSAGE_ODD_VALUE:
                                break;
                            case MessageType.RESET_WINDOW_VALUE:
                                tuple = Tuple.getTuple(data.buffer, data.dataOffset, length);
                                baseSeconds = (long) tuple.getBaseSeconds() << 32;
                                ready = GiveAll.getInstance().distribute(physicalNodes, data);
                                break;
                            default:
                                ready = GiveAll.getInstance().distribute(physicalNodes, data);
                                break;
                        }
                    }
                }
            } catch (Exception e) {
                logger.error("Disconnecting {}", this, e);
                boot();
            }
        } else {
            catchUp();
        }
    }
    return iterator.hasNext();
}
Also used : BitVector(com.datatorrent.bufferserver.util.BitVector) SerializedData(com.datatorrent.bufferserver.util.SerializedData) Tuple(com.datatorrent.bufferserver.packet.Tuple)

Aggregations

Tuple (com.datatorrent.bufferserver.packet.Tuple)1 BitVector (com.datatorrent.bufferserver.util.BitVector)1 SerializedData (com.datatorrent.bufferserver.util.SerializedData)1