Package org.apache.lucene.monitor
Class ConcurrentQueryLoader
- java.lang.Object
-
- org.apache.lucene.monitor.ConcurrentQueryLoader
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable
public class ConcurrentQueryLoader extends java.lang.Object implements java.io.CloseableUtility class for concurrently loading queries into a Monitor.This is useful to speed up startup times for a Monitor. You can use multiple threads to parse and index queries before starting matches.
Use as follows:
List<QueryError> errors = new ArrayList<>(); try (ConcurrentQueryLoader loader = new ConcurrentQueryLoader(monitor, errors)) { for (MonitorQuery mq : getQueries()) { loader.add(mq); } }The Monitor's MonitorQueryParser must be thread-safe for this to work correctly.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classConcurrentQueryLoader.Worker
-
Field Summary
Fields Modifier and Type Field Description static intDEFAULT_QUEUE_SIZEprivate java.util.List<java.io.IOException>errorsprivate java.util.concurrent.ExecutorServiceexecutorprivate Monitormonitorprivate java.util.concurrent.BlockingQueue<MonitorQuery>queueprivate booleanshutdownprivate java.util.concurrent.CountDownLatchshutdownLatch
-
Constructor Summary
Constructors Constructor Description ConcurrentQueryLoader(Monitor monitor)Create a new ConcurrentQueryLoader for aMonitorConcurrentQueryLoader(Monitor monitor, int threads, int queueSize)Create a new ConcurrentQueryLoader
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidadd(MonitorQuery mq)Add a MonitorQuery to the loader's internal buffervoidclose()private static <E> intdrain(java.util.concurrent.BlockingQueue<E> q, java.util.Collection<? super E> buffer, int numElements, long timeout, java.util.concurrent.TimeUnit unit)Drains the queue asBlockingQueue.drainTo(Collection, int), but if the requestednumElementselements are not available, it will wait for them up to the specified timeout.
-
-
-
Field Detail
-
monitor
private final Monitor monitor
-
executor
private final java.util.concurrent.ExecutorService executor
-
shutdownLatch
private final java.util.concurrent.CountDownLatch shutdownLatch
-
queue
private final java.util.concurrent.BlockingQueue<MonitorQuery> queue
-
shutdown
private boolean shutdown
-
errors
private java.util.List<java.io.IOException> errors
-
DEFAULT_QUEUE_SIZE
public static final int DEFAULT_QUEUE_SIZE
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
ConcurrentQueryLoader
public ConcurrentQueryLoader(Monitor monitor)
Create a new ConcurrentQueryLoader for aMonitor- Parameters:
monitor- Monitor
-
ConcurrentQueryLoader
public ConcurrentQueryLoader(Monitor monitor, int threads, int queueSize)
Create a new ConcurrentQueryLoader- Parameters:
monitor- the Monitor to load queries tothreads- the number of threads to usequeueSize- the size of the buffer to hold queries in
-
-
Method Detail
-
add
public void add(MonitorQuery mq) throws java.lang.InterruptedException
Add a MonitorQuery to the loader's internal bufferIf the buffer is full, this will block until there is room to add the MonitorQuery
- Parameters:
mq- the monitor query- Throws:
java.lang.InterruptedException- if interrupted while waiting
-
close
public void close() throws java.io.IOException- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Throws:
java.io.IOException
-
drain
private static <E> int drain(java.util.concurrent.BlockingQueue<E> q, java.util.Collection<? super E> buffer, int numElements, long timeout, java.util.concurrent.TimeUnit unit) throws java.lang.InterruptedExceptionDrains the queue asBlockingQueue.drainTo(Collection, int), but if the requestednumElementselements are not available, it will wait for them up to the specified timeout.Taken from Google Guava 18.0 Queues
- Type Parameters:
E- the type of the queue- Parameters:
q- the blocking queue to be drainedbuffer- where to add the transferred elementsnumElements- the number of elements to be waited fortimeout- how long to wait before giving up, in units ofunitunit- aTimeUnitdetermining how to interpret the timeout parameter- Returns:
- the number of elements transferred
- Throws:
java.lang.InterruptedException- if interrupted while waiting
-
-