Skip to content

Conversation

@Tim-Brooks
Copy link
Contributor

This is related to #27563. This commit modifies the
InboundChannelBuffer to support releasable byte pages. These byte
pages are provided by the PageCacheRecycler. The PageCacheRecycler
must be passed to the Transport with this change.

@Tim-Brooks
Copy link
Contributor Author

Tim-Brooks commented Dec 7, 2017

The suggestion to pass around the PageCacheRecycler came from this comment by @jpountz.

Right now, I modified our generic tests cases (ESTestCase and ESIntegTestCase) to only check that the page cache recycler has released all pages AfterClass. We still check the BigArrays in between tests. This is because in integration tests a channel could hold byte arrays as long as the transport is running. I'm not sure of another way to solve this issue right now. But I am open to ideas.

Copy link
Contributor

@s1monw s1monw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left some minors. looks good

public void close() {
Page page;
while ((page = pages.pollFirst()) != null) {
page.close();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we do this similar to IOUtils.close where we catch the excetpion and rethrow afterwards?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

now thta we close should we prevent access after we are closed?

releasable.close();
}

private ByteBuffer byteBuffer() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can just access the member directly.

private int offset = 0;

public InboundChannelBuffer() {
this(() -> ByteBuffer.wrap(new byte[PAGE_SIZE]));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we remove this default ctor and pass the non-recycling closure in the test directly. I think it's just one place.

@Tim-Brooks
Copy link
Contributor Author

@s1monw I've made changes based on your review.

@jpountz
Copy link
Contributor

jpountz commented Dec 8, 2017

I like the approach!

Copy link
Contributor

@s1monw s1monw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - left one comment

while ((page = pages.pollFirst()) != null) {
try {
page.close();
} catch (RuntimeException e) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can use ExceptionsHelper#rethrowAndSuppress here

@Tim-Brooks Tim-Brooks merged commit d82c40d into elastic:master Dec 8, 2017
Tim-Brooks added a commit that referenced this pull request Dec 8, 2017
This is related to #27563. This commit modifies the
InboundChannelBuffer to support releasable byte pages. These byte
pages are provided by the PageCacheRecycler. The PageCacheRecycler
must be passed to the Transport with this change.
jasontedor added a commit to jasontedor/elasticsearch that referenced this pull request Dec 8, 2017
* master: (414 commits)
  Set ACK timeout on indices service test
  Implement byte array reusage in `NioTransport` (elastic#27696)
  [TEST] Remove leftover ES temp directories before Vagrant tests (elastic#27722)
  Cleanup split strings by comma method
  Remove unused import from AliasResolveRoutingIT
  Add read timeouts to http module (elastic#27713)
  Fix routing with leading or trailing whitespace
  remove await fix from FullClusterRestartIT.testRecovery
  Add missing 's' to tmpdir name (elastic#27721)
  [Issue-27716]: CONTRIBUTING.md IntelliJ configurations settings are confusing. (elastic#27717)
  [TEST] Now actually wait for merges
  Test out of order delivery of append only index and retry with an intermediate delete
  [TEST] remove code duplications in RequestTests
  [Tests] Add test for GeoShapeFieldType#setStrategyName (elastic#27703)
  Remove unused *Commit* classes (elastic#27714)
  Add test for writer operation buffer accounting (elastic#27707)
  [TEST] Wait for merging to complete before testing breaker
  Add Open Index API to the high level REST client (elastic#27574)
  Correcting some minor typos in comments
  Add unreleased v5.6.6 version
  ...
jasontedor added a commit to jasontedor/elasticsearch that referenced this pull request Dec 9, 2017
* master:
  Fix index with unknown setting test
  Remove internal channel tracking in transports (elastic#27711)
  Improve error msg when a field name contains only white spaces (elastic#27709)
  Do not open indices with broken settings
  Set ACK timeout on indices service test
  Implement byte array reusage in `NioTransport` (elastic#27696)
  [TEST] Remove leftover ES temp directories before Vagrant tests (elastic#27722)
  Cleanup split strings by comma method
  Remove unused import from AliasResolveRoutingIT
  Add read timeouts to http module (elastic#27713)
  Fix routing with leading or trailing whitespace
  remove await fix from FullClusterRestartIT.testRecovery
  Add missing 's' to tmpdir name (elastic#27721)
  [Issue-27716]: CONTRIBUTING.md IntelliJ configurations settings are confusing. (elastic#27717)
  [TEST] Now actually wait for merges
@Tim-Brooks Tim-Brooks deleted the reuse_allocator branch December 10, 2018 16:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants