leventov opened a new pull request #7038: Fix and document concurrency of 
EventReceiverFirehose and TimedShutoffFirehose; Refine concurrency 
specification of Firehose
URL: https://github.com/apache/incubator-druid/pull/7038
 
 
   #### `EventReceiverFirehoseFactory`
   Fixed several concurrency bugs in `EventReceiverFirehoseFactory`:
    - Race condition over putting an entry into `producerSequences` in 
`checkProducerSequence()`
    - `Stopwatch` used to measure time across threads, but it's a 
non-thread-safe class
    - Use `System.nanoTime()` instead of `System.currentTimeMillis()` because 
the latter are [not suitable](https://stackoverflow.com/a/351571/648955)  for 
measuring time intervals.
    - `close()` was not synchronized by could be called from multiple threads 
concurrently.
   
   Removed unnecessary `readLock` (protecting `hasMore()` and `nextRow()` which 
are always called from a single thread). Removed unnecessary `volatile` 
modifiers.
   
   Documented threading model and concurrent control flow of 
`EventReceiverFirehose` instances.
   
   **Important:** please read the updated Javadoc for 
`EventReceiverFirehose.addAll()`. It allows events from different requests 
(batches) to be interleaved in the buffer. Is this OK?
   
   #### `TimedShutoffFirehoseFactory`
   - Fixed a race condition that was possible because `close()` that was not 
properly synchronized.
   
   Documented threading model and concurrent control flow of 
`TimedShutoffFirehose` instances.
   
   #### `Firehose`
   
   Refined concurrency contract of `Firehose` based on `EventReceiverFirehose` 
implementation. Importantly, now it states that `close()` doesn't affect 
`hasMore()` and `nextRow()` and could be called concurrently with them. In 
other words, specified that `close()` is for "row supply" side rather than "row 
consume" side. However, I didn't check that other `Firehose` implementatations 
adhere to this contract.
   
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to