nfsantos commented on code in PR #639:
URL: https://github.com/apache/jackrabbit-oak/pull/639#discussion_r929754247
##########
oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/query/async/ElasticResultRowAsyncIterator.java:
##########
@@ -111,6 +110,25 @@ public boolean hasNext() {
throw new IllegalStateException("Error reading next result
from Elastic", e);
}
}
+
+ // Check if there are any exception traces filled from onFailure
Callback in the errorQueue
+ // Any exception (such as ParseException) during the prefetch (init
scanner) via the async call to ES would be available here
+ // when the cursor is actually being traversed.
+ // This is being done so that we can log the caller stack trace in
case of any exception from ES and not just the trace of the async query thread.
+ if (!errorQueue.isEmpty()) {
+ Exception e = new Exception();
+ e.setStackTrace(Thread.currentThread().getStackTrace());
+ String exceptionMsg = null;
+ try {
+ exceptionMsg = errorQueue.take().getMessage();
Review Comment:
The call to `take()` has no timeout, so it can block for an unbounded time.
This should not be a problem in this case, but as a general practice I think
it's best to always have a timeout. Otherwise, there is a chance that a bug may
cause the caller thread to block here forever, which can be very hard to debug
as the system will seem to be hang without any useful information on the logs.
So often, in these cases, the only way to figure out what is happening is to
get a thread dump, which may not be easy to get. If all blocking operations
have a timeout, then after a while the operation fails and we get an exception
on the logs.
In this case, as we checked that the queue has something in it, we could use
`poll()` with 0 timeout instead, failing immediately if the queue is empty.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]