You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by si...@apache.org on 2021/05/28 06:47:25 UTC
[incubator-pinot] branch master updated: Fix the race condition in
realtime text index refresh thread (#6858) (#6990)
This is an automated email from the ASF dual-hosted git repository.
siddteotia pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 211cf8a Fix the race condition in realtime text index refresh thread (#6858) (#6990)
211cf8a is described below
commit 211cf8a8b9476a9756d2b40f1d0660cfcb1d4235
Author: Sharayu <ga...@gmail.com>
AuthorDate: Thu May 27 23:47:02 2021 -0700
Fix the race condition in realtime text index refresh thread (#6858) (#6990)
---
.../RealtimeLuceneIndexReaderRefreshThread.java | 52 +++++++++++-----------
1 file changed, 26 insertions(+), 26 deletions(-)
diff --git a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/realtime/impl/invertedindex/RealtimeLuceneIndexReaderRefreshThread.java b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/realtime/impl/invertedindex/RealtimeLuceneIndexReaderRefreshThread.java
index 1377b5e..4ea84a1 100644
--- a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/realtime/impl/invertedindex/RealtimeLuceneIndexReaderRefreshThread.java
+++ b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/realtime/impl/invertedindex/RealtimeLuceneIndexReaderRefreshThread.java
@@ -66,34 +66,34 @@ public class RealtimeLuceneIndexReaderRefreshThread implements Runnable {
@Override
public void run() {
while (!_stopped) {
- while (_luceneRealtimeReaders.isEmpty()) {
- _mutex.lock();
- try {
- // During instantiation of a given MutableSegmentImpl, we will signal on this condition variable once
- // one or more realtime lucene readers (one per column) belonging to the MutableSegment
- // are added to the global queue managed by this thread. The thread that signals will
- // grab this mutex and signal on the condition variable.
- //
- // This refresh thread will be woken up (and grab the mutex automatically as per the
- // implementation of await) and check if the queue is non-empty. It will then proceed to
- // poll the queue and refresh the realtime index readers for the polled segment.
- //
- // The mutex and condition-variable semantics take care of the scenario when on
- // a given Pinot server, there is no realtime segment with text index enabled. In such
- // cases, there is no need for this thread to wake up simply after every few seconds/minutes
- // only to find that there is nothing to be refreshed. The thread should simply be
- // off CPU until signalled specifically. This also covers the situation where initially
- // there were few realtime segments of a table with text index. Later if they got
- // moved to another server as part of rebalance, then again there is no need for this thread
- // to do anything until some realtime segment is created with text index enabled.
+ _mutex.lock();
+ try {
+ // During instantiation of a given MutableSegmentImpl, we will signal on this condition variable once
+ // one or more realtime lucene readers (one per column) belonging to the MutableSegment
+ // are added to the global queue managed by this thread. The thread that signals will
+ // grab this mutex and signal on the condition variable.
+ //
+ // This refresh thread will be woken up (and grab the mutex automatically as per the
+ // implementation of await) and check if the queue is non-empty. It will then proceed to
+ // poll the queue and refresh the realtime index readers for the polled segment.
+ //
+ // The mutex and condition-variable semantics take care of the scenario when on
+ // a given Pinot server, there is no realtime segment with text index enabled. In such
+ // cases, there is no need for this thread to wake up simply after every few seconds/minutes
+ // only to find that there is nothing to be refreshed. The thread should simply be
+ // off CPU until signalled specifically. This also covers the situation where initially
+ // there were few realtime segments of a table with text index. Later if they got
+ // moved to another server as part of rebalance, then again there is no need for this thread
+ // to do anything until some realtime segment is created with text index enabled.
+ while (_luceneRealtimeReaders.isEmpty()) {
_conditionVariable.await();
- } catch (InterruptedException e) {
- LOGGER.warn("Realtime lucene reader refresh thread got interrupted while waiting on condition variable: ", e);
- Thread.currentThread().interrupt();
- } finally {
- _mutex.unlock();
}
- } // end while
+ } catch (InterruptedException e) {
+ LOGGER.warn("Realtime lucene reader refresh thread got interrupted while waiting on condition variable: ", e);
+ Thread.currentThread().interrupt();
+ } finally {
+ _mutex.unlock();
+ }
// check if shutdown has been initiated
if (_stopped) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org