public void sendEndOfSuperstep() throws IOException, InterruptedException { for (int targetChannel = 0; targetChannel < numChannels; targetChannel++) { RecordSerializer<T> serializer = serializers[targetChannel]; synchronized (serializer) { Buffer buffer = serializer.getCurrentBuffer(); if (buffer != null) { writeBuffer(buffer, targetChannel, serializer); buffer = writer.getBufferProvider().requestBufferBlocking(); serializer.setNextBuffer(buffer); } } } writer.writeEndOfSuperstep(); }
/** * Writes the buffer to the {@link ResultPartitionWriter}. * * <p>The buffer is cleared from the serializer state after a call to this method. */ private void writeBuffer(Buffer buffer, int targetChannel, RecordSerializer<T> serializer) throws IOException { try { writer.writeBuffer(buffer, targetChannel); } finally { serializer.clearCurrentBuffer(); } }
public void broadcastEvent(AbstractEvent event) throws IOException, InterruptedException { for (int targetChannel = 0; targetChannel < numChannels; targetChannel++) { RecordSerializer<T> serializer = serializers[targetChannel]; synchronized (serializer) { if (serializer.hasData()) { Buffer buffer = serializer.getCurrentBuffer(); if (buffer == null) { throw new IllegalStateException("Serializer has data but no buffer."); } writeBuffer(buffer, targetChannel, serializer); writer.writeEvent(event, targetChannel); buffer = writer.getBufferProvider().requestBufferBlocking(); serializer.setNextBuffer(buffer); } else { writer.writeEvent(event, targetChannel); } } } }
@SuppressWarnings("unchecked") public RecordWriter(ResultPartitionWriter writer, ChannelSelector<T> channelSelector) { this.writer = writer; this.channelSelector = channelSelector; this.numChannels = writer.getNumberOfOutputChannels(); /** * The runtime exposes a channel abstraction for the produced results (see {@link * ChannelSelector}). Every channel has an independent serializer. */ this.serializers = new SpanningRecordSerializer[numChannels]; for (int i = 0; i < numChannels; i++) { serializers[i] = new SpanningRecordSerializer<T>(); } }
private void sendToTarget(T record, int targetChannel) throws IOException, InterruptedException { RecordSerializer<T> serializer = serializers[targetChannel]; synchronized (serializer) { SerializationResult result = serializer.addRecord(record); while (result.isFullBuffer()) { Buffer buffer = serializer.getCurrentBuffer(); if (buffer != null) { writeBuffer(buffer, targetChannel, serializer); } buffer = writer.getBufferProvider().requestBufferBlocking(); result = serializer.setNextBuffer(buffer); } } }