Don't expose cleaned-up tasks as pending in PrioritizedEsThreadPoolExecutor#24237
Merged
ywelsch merged 1 commit intoelastic:masterfrom Apr 21, 2017
Merged
Conversation
bleskes
approved these changes
Apr 21, 2017
| pending.add(new Pending(unwrap(t.runnable), t.priority(), t.insertionOrder, executing)); | ||
| Runnable innerRunnable = t.runnable; | ||
| if (innerRunnable != null) { | ||
| /** innerRunnable can be null if task is finished but not removed from executor yet, |
Contributor
There was a problem hiding this comment.
doesn't this has to do with the gap between capturing the pending list and when this code runs?
Contributor
Author
There was a problem hiding this comment.
That's another reason why innerRunnable can be null. Both of the documented one and the one you gave (either in isolation or in combination) will lead to this.
ywelsch
added a commit
that referenced
this pull request
Apr 21, 2017
…ecutor (#24237) Changes in #24102 exposed the following oddity: PrioritizedEsThreadPoolExecutor.getPending() can return Pending entries where pending.task == null. This can happen for example when tasks are added to the pending list while they are in the clean up phase, i.e. TieBreakingPrioritizedRunnable#runAndClean has run already, but afterExecute has not removed the task yet. Instead of safeguarding consumers of the API (as was done before #24102) this changes the executor to not count these tasks as pending at all.
ywelsch
added a commit
that referenced
this pull request
Apr 21, 2017
…ecutor (#24237) Changes in #24102 exposed the following oddity: PrioritizedEsThreadPoolExecutor.getPending() can return Pending entries where pending.task == null. This can happen for example when tasks are added to the pending list while they are in the clean up phase, i.e. TieBreakingPrioritizedRunnable#runAndClean has run already, but afterExecute has not removed the task yet. Instead of safeguarding consumers of the API (as was done before #24102) this changes the executor to not count these tasks as pending at all.
jasontedor
added a commit
to jasontedor/elasticsearch
that referenced
this pull request
Apr 21, 2017
* master: (61 commits) Build: Move plugin cli and tests to distribution tool (elastic#24220) Peer Recovery: remove maxUnsafeAutoIdTimestamp hand off (elastic#24243) Adds version 5.3.2 and backwards compatibility indices for 5.3.1 Add utility method to parse named XContent objects with typed prefix (elastic#24240) MultiBucketsAggregation.Bucket should not extend Writeable (elastic#24216) Don't expose cleaned-up tasks as pending in PrioritizedEsThreadPoolExecutor (elastic#24237) Adds declareNamedObjects methods to ConstructingObjectParser (elastic#24219) ESIntegTestCase.indexRandom should not introduce types. (elastic#24202) Tests: Extend InternalStatsTests (elastic#24212) IndicesQueryCache should delegate the scorerSupplier method. (elastic#24209) Speed up parsing of large `terms` queries. (elastic#24210) [TEST] make sure that the random query_string query generator defines a default_field or a list of fields token_count type : add an option to count tokens (fix elastic#23227) (elastic#24175) Query string default field (elastic#24214) Make Aggregations an abstract class rather than an interface (elastic#24184) [TEST] ensure expected sequence no and version are set when index/delete engine operation has a document failure Extract batch executor out of cluster service (elastic#24102) Add 5.3.1 to bwc versions Added "release-state" support to plugin docs Added examples to cross cluster search of using cluster settings ...
asettouf
pushed a commit
to asettouf/elasticsearch
that referenced
this pull request
Apr 23, 2017
…ecutor (elastic#24237) Changes in elastic#24102 exposed the following oddity: PrioritizedEsThreadPoolExecutor.getPending() can return Pending entries where pending.task == null. This can happen for example when tasks are added to the pending list while they are in the clean up phase, i.e. TieBreakingPrioritizedRunnable#runAndClean has run already, but afterExecute has not removed the task yet. Instead of safeguarding consumers of the API (as was done before elastic#24102) this changes the executor to not count these tasks as pending at all.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes in #24102 exposed the following oddity:
PrioritizedEsThreadPoolExecutor.getPending()can returnPendingentries wherepending.task == null.This can happen for example when tasks are added to the pending list while they are in the clean up phase, i.e.
TieBreakingPrioritizedRunnable#runAndCleanhas run already, butafterExecutehas not removed the task yet.Instead of safeguarding consumers of the API (as was done before #24102) I think that we should not count these tasks as pending at all.
Test failures: https://elasticsearch-ci.elastic.co/job/elastic+elasticsearch+master+java9-periodic/2235/consoleFull