Search in sources :

Example 1 with Tuple

use of com.datatorrent.bufferserver.packet.Tuple 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)

Example 2 with Tuple

use of com.datatorrent.bufferserver.packet.Tuple in project apex-core by apache.

the class Subscriber method onMessage.

@Override
public void onMessage(byte[] buffer, int offset, int size) {
    Tuple tuple = Tuple.getTuple(buffer, offset, size);
    tupleCount.incrementAndGet();
    switch(tuple.getType()) {
        case BEGIN_WINDOW:
            beginWindow(tuple.getWindowId());
            break;
        case END_WINDOW:
            endWindow(tuple.getWindowId());
            break;
        case RESET_WINDOW:
            resetWindow(tuple.getBaseSeconds(), tuple.getWindowWidth());
            break;
        default:
            break;
    }
}
Also used : Tuple(com.datatorrent.bufferserver.packet.Tuple)

Example 3 with Tuple

use of com.datatorrent.bufferserver.packet.Tuple in project apex-core by apache.

the class Controller method onMessage.

@Override
public void onMessage(byte[] buffer, int offset, int size) {
    Tuple t = Tuple.getTuple(buffer, offset, size);
    assert (t.getType() == MessageType.PAYLOAD);
    Slice f = t.getData();
    onMessage(new String(f.buffer, f.offset, f.length));
}
Also used : Slice(com.datatorrent.netlet.util.Slice) Tuple(com.datatorrent.bufferserver.packet.Tuple) ResetRequestTuple(com.datatorrent.bufferserver.packet.ResetRequestTuple) PurgeRequestTuple(com.datatorrent.bufferserver.packet.PurgeRequestTuple)

Aggregations

Tuple (com.datatorrent.bufferserver.packet.Tuple)3 PurgeRequestTuple (com.datatorrent.bufferserver.packet.PurgeRequestTuple)1 ResetRequestTuple (com.datatorrent.bufferserver.packet.ResetRequestTuple)1 BitVector (com.datatorrent.bufferserver.util.BitVector)1 SerializedData (com.datatorrent.bufferserver.util.SerializedData)1 Slice (com.datatorrent.netlet.util.Slice)1