示例#1
0
  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();
  }
示例#2
0
  /**
   * 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();
    }
  }
示例#3
0
  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);
        }
      }
    }
  }
示例#4
0
  @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>();
    }
  }
示例#5
0
  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);
      }
    }
  }