use of edu.iu.dsc.tws.comms.dfw.InMessage in project twister2 by DSC-SPIDAL.
the class KeyedSerializerTest method testBuildListIntMessage.
@SuppressWarnings("Unchecked")
@Test
public void testBuildListIntMessage() {
int numBuffers = 128;
int size = 1000;
for (int j = 1; j < 128; j++) {
List<Object> data = new AggregatedObjects<>();
for (int i = 0; i < j; i++) {
Object o = createKeyedData(80, MessageTypes.INTEGER_ARRAY, MessageTypes.INTEGER);
data.add(o);
}
InMessage inMessage = keyedListValueCase(numBuffers, size, data, MessageTypes.INTEGER_ARRAY, MessageTypes.INTEGER);
try {
List<Object> result = (List<Object>) inMessage.getDeserializedData();
for (int i = 0; i < result.size(); i++) {
Tuple exp = (Tuple) result.get(i);
Tuple d = (Tuple) data.get(i);
Assert.assertEquals((int) exp.getKey(), (int) ((Tuple) d).getKey());
Assert.assertArrayEquals((int[]) exp.getValue(), (int[]) ((Tuple) d).getValue());
}
} catch (NullPointerException e) {
Assert.fail("j = " + j);
}
}
}
use of edu.iu.dsc.tws.comms.dfw.InMessage in project twister2 by DSC-SPIDAL.
the class KeyedSerializerTest method testBuildLargeListShortMessage.
@SuppressWarnings("Unchecked")
@Test
public void testBuildLargeListShortMessage() {
int numBuffers = 32;
int size = 1000;
List<Object> data = new AggregatedObjects<>();
for (int i = 0; i < 4; i++) {
Object o = createKeyedData(800, MessageTypes.SHORT_ARRAY, MessageTypes.SHORT);
data.add(o);
}
InMessage inMessage = keyedListValueCase(numBuffers, size, data, MessageTypes.SHORT_ARRAY, MessageTypes.SHORT);
List<Object> result = (List<Object>) inMessage.getDeserializedData();
for (int i = 0; i < result.size(); i++) {
Tuple deserializedData = (Tuple) result.get(i);
Tuple d = (Tuple) data.get(i);
Assert.assertEquals((short) deserializedData.getKey(), (short) ((Tuple) d).getKey());
Assert.assertArrayEquals((short[]) deserializedData.getValue(), (short[]) ((Tuple) d).getValue());
}
}
use of edu.iu.dsc.tws.comms.dfw.InMessage in project twister2 by DSC-SPIDAL.
the class KeyedSerializerTest method testBuildLargeDoubleMessage.
@Test
public void testBuildLargeDoubleMessage() {
int numBuffers = 10;
int size = 1000;
MessageType type = MessageTypes.DOUBLE_ARRAY;
Object data = createKeyedData(800, type, MessageTypes.DOUBLE);
InMessage inMessage = keyedSingleValueCase(numBuffers, size, type, MessageTypes.DOUBLE, data);
Tuple deserializedData = (Tuple) inMessage.getDeserializedData();
Assert.assertEquals((double) deserializedData.getKey(), (double) ((Tuple) data).getKey(), 0.1);
Assert.assertArrayEquals((double[]) deserializedData.getValue(), (double[]) ((Tuple) data).getValue(), 0.01);
}
use of edu.iu.dsc.tws.comms.dfw.InMessage in project twister2 by DSC-SPIDAL.
the class DataDeserializer method build.
/**
* Builds the message from the data buffers in the partialObject. Since this method
* supports multi-messages it iterates through the buffers and builds all the messages separately
*
* @param partialObject message object that needs to be built
* @param edge the edge value associated with this message
*/
@Override
public void build(Object partialObject, int edge) {
InMessage currentMessage = (InMessage) partialObject;
DataPacker dataPacker = currentMessage.getDataType().getDataPacker();
Queue<DataBuffer> buffers = currentMessage.getBuffers();
MessageHeader header = currentMessage.getHeader();
if (header == null) {
throw new RuntimeException("Header must be built before the message");
}
List<DataBuffer> builtBuffers = new ArrayList<>();
// get the number of objects deserialized
DataBuffer buffer = buffers.peek();
while (buffer != null) {
int currentLocation = 0;
int remaining = buffer.getSize();
if (header.getNumberTuples() == 0) {
builtBuffers.add(buffer);
break;
}
// if we are at the beginning
int currentObjectLength = currentMessage.getUnPkCurrentObjectLength();
if (currentMessage.getUnPkBuffers() == 0) {
currentLocation = DFWIOUtils.HEADER_SIZE;
remaining = remaining - DFWIOUtils.HEADER_SIZE;
} else {
// source(int) + last_buffer_indicator(byte)
currentLocation = DFWIOUtils.SHORT_HEADER_SIZE;
remaining = remaining - DFWIOUtils.SHORT_HEADER_SIZE;
}
if (currentObjectLength == -1 || currentMessage.getUnPkBuffers() == 0) {
currentObjectLength = buffer.getByteBuffer().getInt(currentLocation);
remaining = remaining - Integer.BYTES;
currentLocation += Integer.BYTES;
// starting to build a new object
currentMessage.getDataBuilder().init(dataPacker, currentObjectLength);
}
while (remaining > 0) {
// read the values from the buffer
ObjectBuilderImpl dataBuilder = currentMessage.getDataBuilder();
int bytesRead = dataPacker.readDataFromBuffer(dataBuilder, currentLocation, buffer);
dataBuilder.incrementCompletedSizeBy(bytesRead);
currentLocation += bytesRead;
remaining = remaining - bytesRead;
// okay we are done with this object
if (dataBuilder.isBuilt()) {
currentMessage.addCurrentObject();
currentMessage.setUnPkCurrentObjectLength(-1);
} else {
// lets break the inner while loop
break;
}
// could have next object length?
if (remaining >= Integer.BYTES) {
currentObjectLength = buffer.getByteBuffer().getInt(currentLocation);
remaining = remaining - Integer.BYTES;
currentLocation += Integer.BYTES;
currentMessage.getDataBuilder().init(dataPacker, currentObjectLength);
currentMessage.setUnPkCurrentObjectLength(currentObjectLength);
} else {
// we have to break here as we cannot read further
break;
}
}
// lets remove this buffer
buffers.poll();
builtBuffers.add(buffer);
// increment the unpacked buffers
currentMessage.incrementUnPkBuffers();
// lets check weather we have read everythong
int readObjectNumber = currentMessage.getUnPkNumberObjects();
// we need to get number of tuples and get abs because we are using -1 for single messages
if (readObjectNumber == Math.abs(currentMessage.getHeader().getNumberTuples())) {
break;
}
// lets move to next
buffer = buffers.peek();
}
if (builtBuffers.size() > 0) {
ChannelMessage channelMessage = new ChannelMessage(currentMessage.getOriginatingId(), currentMessage.getDataType(), MessageDirection.IN, currentMessage.getReleaseListener());
channelMessage.addBuffers(builtBuffers);
channelMessage.setHeader(currentMessage.getHeader());
channelMessage.incrementRefCount();
currentMessage.addBuiltMessage(channelMessage);
}
}
use of edu.iu.dsc.tws.comms.dfw.InMessage in project twister2 by DSC-SPIDAL.
the class FixedSchemaKeyedDataDeSerializer method build.
/**
* Builds the message from the data buffers in the partialObject. Since this method
* supports multi-messages it iterates through the buffers and builds all the messages separately
*
* @param partialObject message object that needs to be built
* @param edge the edge value associated with this message
*/
@Override
public void build(Object partialObject, int edge) {
InMessage currentMessage = (InMessage) partialObject;
MessageType keyType = currentMessage.getKeyType();
DataPacker keyPacker = keyType.getDataPacker();
DataPacker dataPacker = currentMessage.getDataType().getDataPacker();
Queue<DataBuffer> buffers = currentMessage.getBuffers();
MessageHeader header = currentMessage.getHeader();
if (header == null) {
throw new RuntimeException("Header must be built before the message");
}
List<DataBuffer> builtBuffers = new ArrayList<>();
// get the number of objects deserialized
DataBuffer buffer = buffers.peek();
while (buffer != null) {
int currentLocation = 0;
int remaining = buffer.getSize();
if (header.getNumberTuples() == 0) {
builtBuffers.add(buffer);
break;
}
// if we are at the beginning
int currentObjectLength = currentMessage.getUnPkCurrentObjectLength();
int currentKeyLength = currentMessage.getUnPkCurrentKeyLength();
if (currentMessage.getUnPkBuffers() == 0) {
currentLocation = DFWIOUtils.HEADER_SIZE;
remaining = remaining - DFWIOUtils.HEADER_SIZE;
} else {
currentLocation = DFWIOUtils.SHORT_HEADER_SIZE;
remaining = remaining - DFWIOUtils.SHORT_HEADER_SIZE;
}
if (currentObjectLength == -1 || currentMessage.getUnPkBuffers() == 0) {
currentObjectLength = messageSchema.getMessageSize();
}
if (currentKeyLength == -1) {
// we have to set the current object length
currentObjectLength = messageSchema.getMessageSize() - messageSchema.getKeySize();
currentKeyLength = messageSchema.getKeySize();
currentMessage.getKeyBuilder().init(keyPacker, currentKeyLength);
try {
currentMessage.getDataBuilder().init(dataPacker, currentObjectLength);
currentMessage.setUnPkCurrentKeyLength(currentKeyLength);
currentMessage.setUnPkCurrentObjectLength(currentObjectLength);
// we are going to read the key first
currentMessage.setReadingKey(true);
} catch (NegativeArraySizeException e) {
throw new RuntimeException(e);
}
}
while (remaining > 0) {
if (currentMessage.isReadingKey()) {
ObjectBuilderImpl keyBuilder = currentMessage.getKeyBuilder();
int bytesRead = keyPacker.readDataFromBuffer(keyBuilder, currentLocation, buffer);
keyBuilder.incrementCompletedSizeBy(bytesRead);
currentLocation += bytesRead;
remaining = remaining - bytesRead;
currentMessage.setReadingKey(!keyBuilder.isBuilt());
if (keyBuilder.isBuilt()) {
// done reading key
currentMessage.setReadingKey(false);
} else {
break;
}
}
if (!currentMessage.isReadingKey()) {
ObjectBuilderImpl dataBuilder = currentMessage.getDataBuilder();
// read the values from the buffer
int byteRead = dataPacker.readDataFromBuffer(dataBuilder, currentLocation, buffer);
dataBuilder.incrementCompletedSizeBy(byteRead);
currentLocation += byteRead;
remaining = remaining - byteRead;
// okay we are done with this object
if (dataBuilder.isBuilt()) {
// lets add the object
currentMessage.addCurrentKeyedObject();
} else {
// lets break the inner while loop
break;
}
if (remaining > 0) {
currentObjectLength = messageSchema.getMessageSize();
// we have to set the current object length
currentObjectLength = currentObjectLength - messageSchema.getKeySize();
currentKeyLength = messageSchema.getKeySize();
currentMessage.getKeyBuilder().init(keyPacker, currentKeyLength);
currentMessage.getDataBuilder().init(dataPacker, currentObjectLength);
currentMessage.setUnPkCurrentKeyLength(currentKeyLength);
currentMessage.setUnPkCurrentObjectLength(currentObjectLength);
// we are going to read the key first
currentMessage.setReadingKey(true);
} else {
// we have to break here as we cannot read further
break;
}
}
}
// lets remove this buffer
buffers.poll();
builtBuffers.add(buffer);
// increment the unpacked buffers
currentMessage.incrementUnPkBuffers();
// lets check weather we have read everythong
int readObjectNumber = currentMessage.getUnPkNumberObjects();
// we need to get number of tuples and get abs because we are using -1 for single messages
if (readObjectNumber == Math.abs(currentMessage.getHeader().getNumberTuples())) {
break;
}
// lets move to next
buffer = buffers.peek();
}
if (builtBuffers.size() > 0) {
ChannelMessage channelMessage = new ChannelMessage(currentMessage.getOriginatingId(), currentMessage.getDataType(), MessageDirection.IN, currentMessage.getReleaseListener());
channelMessage.addBuffers(builtBuffers);
channelMessage.setHeader(currentMessage.getHeader());
channelMessage.incrementRefCount();
currentMessage.addBuiltMessage(channelMessage);
}
}
Aggregations