Search in sources :

Example 1 with BitVector

use of com.datatorrent.bufferserver.util.BitVector 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 BitVector

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

the class DataList method addDataListener.

public void addDataListener(DataListener dl) {
    all_listeners.add(dl);
    //logger.debug("total {} listeners {} -> {}", all_listeners.size(), dl, this);
    ArrayList<BitVector> partitions = new ArrayList<>();
    if (dl.getPartitions(partitions) > 0) {
        for (BitVector partition : partitions) {
            HashSet<DataListener> set;
            if (listeners.containsKey(partition)) {
                set = listeners.get(partition);
            } else {
                set = new HashSet<>();
                listeners.put(partition, set);
            }
            set.add(dl);
        }
    } else {
        HashSet<DataListener> set;
        if (listeners.containsKey(DataListener.NULL_PARTITION)) {
            set = listeners.get(DataListener.NULL_PARTITION);
        } else {
            set = new HashSet<>();
            listeners.put(DataListener.NULL_PARTITION, set);
        }
        set.add(dl);
    }
}
Also used : BitVector(com.datatorrent.bufferserver.util.BitVector) ArrayList(java.util.ArrayList)

Example 3 with BitVector

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

the class DataList method removeDataListener.

public void removeDataListener(DataListener dl) {
    ArrayList<BitVector> partitions = new ArrayList<>();
    if (dl.getPartitions(partitions) > 0) {
        for (BitVector partition : partitions) {
            if (listeners.containsKey(partition)) {
                listeners.get(partition).remove(dl);
            }
        }
    } else {
        if (listeners.containsKey(DataListener.NULL_PARTITION)) {
            listeners.get(DataListener.NULL_PARTITION).remove(dl);
        }
    }
    all_listeners.remove(dl);
}
Also used : BitVector(com.datatorrent.bufferserver.util.BitVector) ArrayList(java.util.ArrayList)

Aggregations

BitVector (com.datatorrent.bufferserver.util.BitVector)3 ArrayList (java.util.ArrayList)2 Tuple (com.datatorrent.bufferserver.packet.Tuple)1 SerializedData (com.datatorrent.bufferserver.util.SerializedData)1