flink-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (FLINK-8178) Introduce not threadsafe write only BufferBuilder
Date Fri, 15 Dec 2017 13:16:00 GMT

    [ https://issues.apache.org/jira/browse/FLINK-8178?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16292510#comment-16292510
] 

ASF GitHub Bot commented on FLINK-8178:
---------------------------------------

Github user pnowojski commented on a diff in the pull request:

    https://github.com/apache/flink/pull/5105#discussion_r156923552
  
    --- Diff: flink-runtime/src/test/java/org/apache/flink/runtime/io/network/util/TestBufferFactory.java
---
    @@ -40,37 +39,31 @@
     
     	private final BufferRecycler bufferRecycler;
     
    -	private AtomicInteger numberOfCreatedBuffers = new AtomicInteger();
    +	private final int poolSize;
     
    -	public TestBufferFactory() {
    -		this(BUFFER_SIZE, RECYCLER);
    -	}
    -
    -	public TestBufferFactory(int bufferSize) {
    -		this(bufferSize, RECYCLER);
    -	}
    +	private int numberOfCreatedBuffers = 0;
     
    -	public TestBufferFactory(int bufferSize, BufferRecycler bufferRecycler) {
    +	public TestBufferFactory(int poolSize, int bufferSize, BufferRecycler bufferRecycler)
{
     		checkArgument(bufferSize > 0);
    +		this.poolSize = poolSize;
     		this.bufferSize = bufferSize;
     		this.bufferRecycler = checkNotNull(bufferRecycler);
     	}
     
    -	public Buffer create() {
    -		numberOfCreatedBuffers.incrementAndGet();
    +	public synchronized Buffer create() {
    +		if (numberOfCreatedBuffers >= poolSize) {
    +			return null;
    +		}
     
    +		numberOfCreatedBuffers++;
     		return new Buffer(MemorySegmentFactory.allocateUnpooledSegment(bufferSize), bufferRecycler);
     	}
     
    -	public Buffer createFrom(MemorySegment segment) {
    -		return new Buffer(segment, bufferRecycler);
    -	}
    -
    -	public int getNumberOfCreatedBuffers() {
    -		return numberOfCreatedBuffers.get();
    +	public synchronized int getNumberOfCreatedBuffers() {
    +		return numberOfCreatedBuffers;
     	}
     
    -	public int getBufferSize() {
    +	public synchronized int getBufferSize() {
    --- End diff --
    
    I would leave it just for the sake of having all methods `synchronized` so that you don't
have to think which one are and which one should be `synchronized` (when adding features or
refactoring this class in the future)


> Introduce not threadsafe write only BufferBuilder
> -------------------------------------------------
>
>                 Key: FLINK-8178
>                 URL: https://issues.apache.org/jira/browse/FLINK-8178
>             Project: Flink
>          Issue Type: Improvement
>          Components: Network
>            Reporter: Piotr Nowojski
>            Assignee: Piotr Nowojski
>             Fix For: 1.5.0
>
>
> While Buffer class is used in multithreaded context it requires synchronisation. Now
it is miss-leading/unclear and suggesting that RecordSerializer should take into account synchronisation
of the Buffer that's holding. With NotThreadSafe BufferBuilder there would be clear separation
between single-threaded writing/creating a BufferBuilder and multithreaded Buffer handling/retaining/recycling.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message