[ 
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)

Reply via email to