@Override public void notifySubpartitionConsumed() { releaseAllResources(); }
private void notifyDataAvailable() { if (readView != null) { readView.notifyDataAvailable(); } }
@Override public PipelinedSubpartitionView createReadView(BufferAvailabilityListener availabilityListener) throws IOException { final int queueSize; synchronized (buffers) { checkState(!isReleased); checkState(readView == null, "Subpartition %s of is being (or already has been) consumed, " + "but pipelined subpartitions can only be consumed once.", index, parent.getPartitionId()); LOG.debug("Creating read view for subpartition {} of partition {}.", index, parent.getPartitionId()); queueSize = buffers.size(); readView = new PipelinedSubpartitionView(this, availabilityListener); } readView.notifyBuffersAvailable(queueSize); return readView; }
@Override public PipelinedSubpartitionView createReadView(BufferAvailabilityListener availabilityListener) throws IOException { synchronized (buffers) { checkState(!isReleased); checkState(readView == null, "Subpartition %s of is being (or already has been) consumed, " + "but pipelined subpartitions can only be consumed once.", index, parent.getPartitionId()); LOG.debug("Creating read view for subpartition {} of partition {}.", index, parent.getPartitionId()); readView = new PipelinedSubpartitionView(this, availabilityListener); if (!buffers.isEmpty()) { notifyDataAvailable(); } } return readView; }
@Override public void finish() throws IOException { final Buffer buffer = EventSerializer.toBuffer(EndOfPartitionEvent.INSTANCE); // view reference accessible outside the lock, but assigned inside the locked scope final PipelinedSubpartitionView reader; synchronized (buffers) { if (isFinished || isReleased) { return; } buffers.add(buffer); reader = readView; updateStatistics(buffer); isFinished = true; } LOG.debug("Finished {}.", this); // Notify the listener outside of the synchronized block if (reader != null) { reader.notifyBuffersAvailable(1); } }
@Override public PipelinedSubpartitionView createReadView(BufferAvailabilityListener availabilityListener) throws IOException { final boolean notifyDataAvailable; synchronized (buffers) { checkState(!isReleased); checkState(readView == null, "Subpartition %s of is being (or already has been) consumed, " + "but pipelined subpartitions can only be consumed once.", index, parent.getPartitionId()); LOG.debug("{}: Creating read view for subpartition {} of partition {}.", parent.getOwningTaskName(), index, parent.getPartitionId()); readView = new PipelinedSubpartitionView(this, availabilityListener); notifyDataAvailable = !buffers.isEmpty(); } if (notifyDataAvailable) { notifyDataAvailable(); } return readView; }
@Override public boolean add(Buffer buffer) throws IOException { checkNotNull(buffer); // view reference accessible outside the lock, but assigned inside the locked scope final PipelinedSubpartitionView reader; synchronized (buffers) { if (isFinished || isReleased) { return false; } // Add the buffer and update the stats buffers.add(buffer); reader = readView; updateStatistics(buffer); } // Notify the listener outside of the synchronized block if (reader != null) { reader.notifyBuffersAvailable(1); } return true; }
@Override public void notifySubpartitionConsumed() { releaseAllResources(); }
@Override public PipelinedSubpartitionView createReadView(BufferAvailabilityListener availabilityListener) throws IOException { final boolean notifyDataAvailable; synchronized (buffers) { checkState(!isReleased); checkState(readView == null, "Subpartition %s of is being (or already has been) consumed, " + "but pipelined subpartitions can only be consumed once.", index, parent.getPartitionId()); LOG.debug("{}: Creating read view for subpartition {} of partition {}.", parent.getOwningTaskName(), index, parent.getPartitionId()); readView = new PipelinedSubpartitionView(this, availabilityListener); notifyDataAvailable = !buffers.isEmpty(); } if (notifyDataAvailable) { notifyDataAvailable(); } return readView; }
private void notifyDataAvailable() { if (readView != null) { readView.notifyDataAvailable(); } }
@Override public void notifySubpartitionConsumed() { releaseAllResources(); }
private void notifyDataAvailable() { if (readView != null) { readView.notifyDataAvailable(); } }
@Override public void notifySubpartitionConsumed() { releaseAllResources(); }
@Override public void release() { // view reference accessible outside the lock, but assigned inside the locked scope final PipelinedSubpartitionView view; synchronized (buffers) { if (isReleased) { return; } // Release all available buffers Buffer buffer; while ((buffer = buffers.poll()) != null) { buffer.recycle(); } // Get the view... view = readView; readView = null; // Make sure that no further buffers are added to the subpartition isReleased = true; } LOG.debug("Released {}.", this); // Release all resources of the view if (view != null) { view.releaseAllResources(); } }
@Override public void release() { // view reference accessible outside the lock, but assigned inside the locked scope final PipelinedSubpartitionView view; synchronized (buffers) { if (isReleased) { return; } // Release all available buffers for (BufferConsumer buffer : buffers) { buffer.close(); } buffers.clear(); view = readView; readView = null; // Make sure that no further buffers are added to the subpartition isReleased = true; } LOG.debug("Released {}.", this); if (view != null) { view.releaseAllResources(); } }
@Override public void release() { // view reference accessible outside the lock, but assigned inside the locked scope final PipelinedSubpartitionView view; synchronized (buffers) { if (isReleased) { return; } // Release all available buffers for (BufferConsumer buffer : buffers) { buffer.close(); } buffers.clear(); view = readView; readView = null; // Make sure that no further buffers are added to the subpartition isReleased = true; } LOG.debug("{}: Released {}.", parent.getOwningTaskName(), this); if (view != null) { view.releaseAllResources(); } }
@Override public void release() { // view reference accessible outside the lock, but assigned inside the locked scope final PipelinedSubpartitionView view; synchronized (buffers) { if (isReleased) { return; } // Release all available buffers for (BufferConsumer buffer : buffers) { buffer.close(); } buffers.clear(); view = readView; readView = null; // Make sure that no further buffers are added to the subpartition isReleased = true; } LOG.debug("{}: Released {}.", parent.getOwningTaskName(), this); if (view != null) { view.releaseAllResources(); } }