Search in sources :

Example 6 with Slice

use of com.datatorrent.netlet.util.Slice in project apex-core by apache.

the class BufferServerSubscriberTest method testEmergencySinks.

@Test
public void testEmergencySinks() throws InterruptedException {
    final List<Object> list = new ArrayList<>();
    final StreamCodec<Object> myserde = new StreamCodec<Object>() {

        @Override
        public Object fromByteArray(Slice fragment) {
            if (fragment.offset == 0 && fragment.length == fragment.buffer.length) {
                return fragment.buffer;
            } else {
                return Arrays.copyOfRange(fragment.buffer, fragment.offset, fragment.offset + fragment.length);
            }
        }

        @Override
        public Slice toByteArray(Object o) {
            return new Slice((byte[]) o, 0, ((byte[]) o).length);
        }

        @Override
        public int getPartition(Object o) {
            return 0;
        }
    };
    Sink<Object> unbufferedSink = new Sink<Object>() {

        @Override
        public void put(Object tuple) {
            list.add(tuple);
        }

        @Override
        public int getCount(boolean reset) {
            return 0;
        }
    };
    BufferServerSubscriber bss = new BufferServerSubscriber("subscriber", 5) {

        {
            serde = myserde;
        }

        @Override
        public void suspendRead() {
            logger.debug("read suspended");
        }

        @Override
        public void resumeRead() {
            logger.debug("read resumed");
        }
    };
    SweepableReservoir reservoir = bss.acquireReservoir("unbufferedSink", 3);
    reservoir.setSink(unbufferedSink);
    int i = 0;
    while (i++ < 10) {
        Slice fragment = myserde.toByteArray(new byte[] { (byte) i });
        byte[] buffer = PayloadTuple.getSerializedTuple(myserde.getPartition(i), fragment);
        bss.onMessage(buffer, 0, buffer.length);
    }
    reservoir.sweep();
    /* 4 make it to the reservoir */
    reservoir.sweep();
    /* we consume the 4; and 4 more make it to the reservoir */
    Assert.assertEquals("4 received", 4, list.size());
    reservoir.sweep();
    /* 8 consumed + 2 more make it to the reservoir */
    reservoir.sweep();
    /* consume 2 more */
    Assert.assertEquals("10  received", 10, list.size());
}
Also used : SweepableReservoir(com.datatorrent.stram.engine.SweepableReservoir) Sink(com.datatorrent.api.Sink) Slice(com.datatorrent.netlet.util.Slice) ArrayList(java.util.ArrayList) StreamCodec(com.datatorrent.api.StreamCodec) Test(org.junit.Test)

Example 7 with Slice

use of com.datatorrent.netlet.util.Slice in project apex-core by apache.

the class BufferServerSubscriber method onMessage.

@Override
public void onMessage(byte[] buffer, int offset, int length) {
    Slice f;
    if (freeFragments.isEmpty()) {
        f = new Slice(buffer, offset, length);
    } else {
        f = freeFragments.pollUnsafe();
        f.buffer = buffer;
        f.offset = offset;
        f.length = length;
    }
    if (!offeredFragments.offer(f)) {
        synchronized (backlog) {
            if (!suspended) {
                suspendRead();
                suspended = true;
            }
            int newsize = offeredFragments.capacity() == MAX_SENDBUFFER_SIZE ? offeredFragments.capacity() : offeredFragments.capacity() << 1;
            backlog.add(offeredFragments = new CircularBuffer<>(newsize));
            offeredFragments.add(f);
        }
    }
}
Also used : CircularBuffer(com.datatorrent.netlet.util.CircularBuffer) Slice(com.datatorrent.netlet.util.Slice)

Example 8 with Slice

use of com.datatorrent.netlet.util.Slice 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)

Example 9 with Slice

use of com.datatorrent.netlet.util.Slice in project apex-malhar by apache.

the class TFileReader method readFully.

@Override
public void readFully(TreeMap<Slice, Slice> data) throws IOException {
    scanner.rewind();
    for (; !scanner.atEnd(); scanner.advance()) {
        Entry en = scanner.entry();
        int klen = en.getKeyLength();
        int vlen = en.getValueLength();
        byte[] key = new byte[klen];
        byte[] value = new byte[vlen];
        en.getKey(key);
        en.getValue(value);
        data.put(new Slice(key, 0, key.length), new Slice(value, 0, value.length));
    }
}
Also used : Entry(org.apache.hadoop.io.file.tfile.TFile.Reader.Scanner.Entry) Slice(com.datatorrent.netlet.util.Slice)

Example 10 with Slice

use of com.datatorrent.netlet.util.Slice in project apex-malhar by apache.

the class JavaSerializationStreamCodec method toByteArray.

@Override
public Slice toByteArray(T object) {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    try {
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(object);
        oos.flush();
        byte[] buffer = bos.toByteArray();
        return new Slice(buffer, 0, buffer.length);
    } catch (IOException ex) {
        throw new RuntimeException(ex);
    }
}
Also used : Slice(com.datatorrent.netlet.util.Slice) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) ObjectOutputStream(java.io.ObjectOutputStream)

Aggregations

Slice (com.datatorrent.netlet.util.Slice)114 Test (org.junit.Test)65 ByteArrayOutputStream (java.io.ByteArrayOutputStream)10 Input (com.esotericsoftware.kryo.io.Input)9 IOException (java.io.IOException)6 Map (java.util.Map)5 ArrayList (java.util.ArrayList)4 HashMap (java.util.HashMap)4 CountDownLatch (java.util.concurrent.CountDownLatch)4 BufferSlice (org.apache.apex.malhar.lib.utils.serde.BufferSlice)4 Path (org.apache.hadoop.fs.Path)4 ObjectMapperString (com.datatorrent.common.util.ObjectMapperString)3 SerializationBuffer (org.apache.apex.malhar.lib.utils.serde.SerializationBuffer)3 StringSerde (org.apache.apex.malhar.lib.utils.serde.StringSerde)3 Attribute (com.datatorrent.api.Attribute)2 OperatorContext (com.datatorrent.api.Context.OperatorContext)2 Output (com.esotericsoftware.kryo.io.Output)2 RandomAccessFile (java.io.RandomAccessFile)2 Serializable (java.io.Serializable)2 HashSet (java.util.HashSet)2