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());
}
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);
}
}
}
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));
}
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));
}
}
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);
}
}
Aggregations