New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Faceting using DFS_QUERY_THEN_FETCH fails #4754
Comments
There is indeed an issue in the case of
|
Even though this assertion failure shows that the recycler is not used optimally (the reference is acquired and used in different phases), I think this doesn't break anything. Since facets are going to be progressively replaced by aggregations, I'm wondering if we should just remove the assertion instead of trying to fix the issue? |
Issue elastic#4754 showed that using DFS_QUERY_THEN_FETCH instead of QUERY_THEN_FETCH might expose interesting bugs. Close elastic#4793
so I don't want to loose the ability to fail if it's not released in the same thread to be honest. can we somehow only special case the broken facet impls? |
@jpountz can we actually close this? |
When using DFS-query-then-fetch, some facet data-structures are acquired and released on a different thread, which is something that is not supported by the (soft) thread-local cache recycler. On 1.x, this limitation has been removed, and all recyclers actually support acquisitions and relases on different threads. This commit makes sure it also works on 0.90 by making the stack that is used to store pending objects synchronized. The performance impact of these synchronized blocks is expected to be very low as there would be very little contention. By the way calls to acquire/release are synchronized on the default cache recycler on 1.x. Close elastic#4754
When using DFS-query-then-fetch, some facet data-structures are acquired and released on a different thread, which is something that is not supported by the (soft) thread-local cache recycler. On 1.x, this limitation has been removed, and all recyclers actually support acquisitions and relases on different threads. This commit makes sure it also works on 0.90 by making the stack that is used to store pending objects synchronized. The performance impact of these synchronized blocks is expected to be very low as there would be very little contention. By the way calls to acquire/release are synchronized on the default cache recycler on 1.x. Close #4754
Closed via f7e887b |
For reference, the root cause of this issue has been fixed in #5821 |
When using DFS-query-then-fetch, some facet data-structures are acquired and released on a different thread, which is something that is not supported by the (soft) thread-local cache recycler. On 1.x, this limitation has been removed, and all recyclers actually support acquisitions and relases on different threads. This commit makes sure it also works on 0.90 by making the stack that is used to store pending objects synchronized. The performance impact of these synchronized blocks is expected to be very low as there would be very little contention. By the way calls to acquire/release are synchronized on the default cache recycler on 1.x. Close elastic#4754
Hey,
this came via the ML (there are also some prerequisites listed): https://groups.google.com/d/msg/elasticsearch/ySHfbIW4sBQ/8ozOkBcbWTMJ
Works on master, fails on 0.90
To reproduce (sometimes, not always)
Exception being logged
The text was updated successfully, but these errors were encountered: