-
Notifications
You must be signed in to change notification settings - Fork 25.6k
ESQL: Refactor value reading so it can split Pages #130573
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
Conversation
Pinging @elastic/es-analytical-engine (Team:Analytics) |
This includes a transport change so the new status so it's going to be "fun" to backport, but I'd still like to get this fixed in 8.19.x. So I will backport it. But not automatically. |
|
||
@After | ||
private void closeIndex() throws IOException { | ||
public void closeScoringIndex() throws IOException { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The private
method was making the ide sad. But you can't give them the same names as the super type one.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Let's merge this so we can work on the fix. Thanks, Nik!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
transport constant changes look good
thanks! |
This refactors our `ValuesSourceReaderOperator` so it can split pages when it reads large values. It does not *actually* split the pages as that's a bit tricky. But it sets the stage for the next PR that will do so. * Move `ValuesSourceReaderOperator` to it's own package * Move many inner classes into their own top level classes * Extend from `AbstractPageMappingToIteratorOperator` instead of `AbstractPageMappingToOperator` * This allows returning more than one `Page` per input `Page` * In this PR we still always return one `Page` per input `Page` * Make new `ReleasableIterator` subclasses to satisfy `AbstractPageMappingToIteratorOperator` * Change `status` of loading fields from `pages_processed` to `pages_received` and `pages_emitted` * Fix a bug in `AbstractPageMappingToOperator` which can leak circuit breaker allocation if we fail to during `receive`. This isn't possible in the existing implementations but is possible in `ValuesSourceReaderOperator`. * Add a test with large text fields. Right now it still comes back in one page because we don't cut the pages. Closes elastic#130727 Also includes "Claim backported profile versions (elastic#130187)"
This refactors our `ValuesSourceReaderOperator` so it can split pages when it reads large values. It does not *actually* split the pages as that's a bit tricky. But it sets the stage for the next PR that will do so. * Move `ValuesSourceReaderOperator` to it's own package * Move many inner classes into their own top level classes * Extend from `AbstractPageMappingToIteratorOperator` instead of `AbstractPageMappingToOperator` * This allows returning more than one `Page` per input `Page` * In this PR we still always return one `Page` per input `Page` * Make new `ReleasableIterator` subclasses to satisfy `AbstractPageMappingToIteratorOperator` * Change `status` of loading fields from `pages_processed` to `pages_received` and `pages_emitted` * Fix a bug in `AbstractPageMappingToOperator` which can leak circuit breaker allocation if we fail to during `receive`. This isn't possible in the existing implementations but is possible in `ValuesSourceReaderOperator`. * Add a test with large text fields. Right now it still comes back in one page because we don't cut the pages. Closes elastic#130727
This refactors our `ValuesSourceReaderOperator` so it can split pages when it reads large values. It does not *actually* split the pages as that's a bit tricky. But it sets the stage for the next PR that will do so. * Move `ValuesSourceReaderOperator` to it's own package * Move many inner classes into their own top level classes * Extend from `AbstractPageMappingToIteratorOperator` instead of `AbstractPageMappingToOperator` * This allows returning more than one `Page` per input `Page` * In this PR we still always return one `Page` per input `Page` * Make new `ReleasableIterator` subclasses to satisfy `AbstractPageMappingToIteratorOperator` * Change `status` of loading fields from `pages_processed` to `pages_received` and `pages_emitted` * Fix a bug in `AbstractPageMappingToOperator` which can leak circuit breaker allocation if we fail to during `receive`. This isn't possible in the existing implementations but is possible in `ValuesSourceReaderOperator`. * Add a test with large text fields. Right now it still comes back in one page because we don't cut the pages. Closes #130727 Also includes "Claim backported profile versions (#130187)"
This refactors our `ValuesSourceReaderOperator` so it can split pages when it reads large values. It does not *actually* split the pages as that's a bit tricky. But it sets the stage for the next PR that will do so. * Move `ValuesSourceReaderOperator` to it's own package * Move many inner classes into their own top level classes * Extend from `AbstractPageMappingToIteratorOperator` instead of `AbstractPageMappingToOperator` * This allows returning more than one `Page` per input `Page` * In this PR we still always return one `Page` per input `Page` * Make new `ReleasableIterator` subclasses to satisfy `AbstractPageMappingToIteratorOperator` * Change `status` of loading fields from `pages_processed` to `pages_received` and `pages_emitted` * Fix a bug in `AbstractPageMappingToOperator` which can leak circuit breaker allocation if we fail to during `receive`. This isn't possible in the existing implementations but is possible in `ValuesSourceReaderOperator`. * Add a test with large text fields. Right now it still comes back in one page because we don't cut the pages. Closes elastic#130727
This refactors our `ValuesSourceReaderOperator` so it can split pages when it reads large values. It does not *actually* split the pages as that's a bit tricky. But it sets the stage for the next PR that will do so. * Move `ValuesSourceReaderOperator` to it's own package * Move many inner classes into their own top level classes * Extend from `AbstractPageMappingToIteratorOperator` instead of `AbstractPageMappingToOperator` * This allows returning more than one `Page` per input `Page` * In this PR we still always return one `Page` per input `Page` * Make new `ReleasableIterator` subclasses to satisfy `AbstractPageMappingToIteratorOperator` * Change `status` of loading fields from `pages_processed` to `pages_received` and `pages_emitted` * Fix a bug in `AbstractPageMappingToOperator` which can leak circuit breaker allocation if we fail to during `receive`. This isn't possible in the existing implementations but is possible in `ValuesSourceReaderOperator`. * Add a test with large text fields. Right now it still comes back in one page because we don't cut the pages. Closes #130727
We need to release the blocks of the page in AbstractPageMappingToIteratorOperator immediately in single-iteration cases, instead of delaying to the next iteration. This is because the blocks of the page are now shared with the output page. The output page can be passed to a separate driver, which may run concurrently with this driver, leading to data races in AbstractNonThreadSafeRefCounted, which is not thread-safe. An alternative would be to make RefCounted for Vectors/Blocks thread-safe when they are about to be shared with other drivers via #allowPassingToDifferentDriver. Relates #130573 Closes #130959 Closes #130958 Closes #130950 Closes #130925 Closes #130881 Closes #130796
) We need to release the blocks of the page in AbstractPageMappingToIteratorOperator immediately in single-iteration cases, instead of delaying to the next iteration. This is because the blocks of the page are now shared with the output page. The output page can be passed to a separate driver, which may run concurrently with this driver, leading to data races in AbstractNonThreadSafeRefCounted, which is not thread-safe. An alternative would be to make RefCounted for Vectors/Blocks thread-safe when they are about to be shared with other drivers via Relates elastic#130573 Closes elastic#130959 Closes elastic#130958 Closes elastic#130950 Closes elastic#130925 Closes elastic#130881 Closes elastic#130796
) We need to release the blocks of the page in AbstractPageMappingToIteratorOperator immediately in single-iteration cases, instead of delaying to the next iteration. This is because the blocks of the page are now shared with the output page. The output page can be passed to a separate driver, which may run concurrently with this driver, leading to data races in AbstractNonThreadSafeRefCounted, which is not thread-safe. An alternative would be to make RefCounted for Vectors/Blocks thread-safe when they are about to be shared with other drivers via Relates elastic#130573 Closes elastic#130959 Closes elastic#130958 Closes elastic#130950 Closes elastic#130925 Closes elastic#130881 Closes elastic#130796
…130972) We need to release the blocks of the page in AbstractPageMappingToIteratorOperator immediately in single-iteration cases, instead of delaying to the next iteration. This is because the blocks of the page are now shared with the output page. The output page can be passed to a separate driver, which may run concurrently with this driver, leading to data races in AbstractNonThreadSafeRefCounted, which is not thread-safe. An alternative would be to make RefCounted for Vectors/Blocks thread-safe when they are about to be shared with other drivers via Relates #130573 Closes #130959 Closes #130958 Closes #130950 Closes #130925 Closes #130881 Closes #130796
…130971) We need to release the blocks of the page in AbstractPageMappingToIteratorOperator immediately in single-iteration cases, instead of delaying to the next iteration. This is because the blocks of the page are now shared with the output page. The output page can be passed to a separate driver, which may run concurrently with this driver, leading to data races in AbstractNonThreadSafeRefCounted, which is not thread-safe. An alternative would be to make RefCounted for Vectors/Blocks thread-safe when they are about to be shared with other drivers via Relates #130573 Closes #130959 Closes #130958 Closes #130950 Closes #130925 Closes #130881 Closes #130796
) We need to release the blocks of the page in AbstractPageMappingToIteratorOperator immediately in single-iteration cases, instead of delaying to the next iteration. This is because the blocks of the page are now shared with the output page. The output page can be passed to a separate driver, which may run concurrently with this driver, leading to data races in AbstractNonThreadSafeRefCounted, which is not thread-safe. An alternative would be to make RefCounted for Vectors/Blocks thread-safe when they are about to be shared with other drivers via #allowPassingToDifferentDriver. Relates elastic#130573 Closes elastic#130959 Closes elastic#130958 Closes elastic#130950 Closes elastic#130925 Closes elastic#130881 Closes elastic#130796
) We need to release the blocks of the page in AbstractPageMappingToIteratorOperator immediately in single-iteration cases, instead of delaying to the next iteration. This is because the blocks of the page are now shared with the output page. The output page can be passed to a separate driver, which may run concurrently with this driver, leading to data races in AbstractNonThreadSafeRefCounted, which is not thread-safe. An alternative would be to make RefCounted for Vectors/Blocks thread-safe when they are about to be shared with other drivers via #allowPassingToDifferentDriver. Relates elastic#130573 Closes elastic#130959 Closes elastic#130958 Closes elastic#130950 Closes elastic#130925 Closes elastic#130881 Closes elastic#130796
This refactors our
ValuesSourceReaderOperator
so it can split pageswhen it reads large values. It does not actually split the pages as
that's a bit tricky. But it sets the stage for the next PR that will
do so.
ValuesSourceReaderOperator
to it's own packageAbstractPageMappingToIteratorOperator
instead ofAbstractPageMappingToOperator
Page
per inputPage
Page
per inputPage
ReleasableIterator
subclasses to satisfyAbstractPageMappingToIteratorOperator
status
of loading fields frompages_processed
topages_received
andpages_emitted
AbstractPageMappingToOperator
which can leak circuitbreaker allocation if we fail to during
receive
. This isn't possiblein the existing implementations but is possible
in
ValuesSourceReaderOperator
.one page because we don't cut the pages.
Closes #130727