Skip to content

Commit ffba20b

Browse files
authored
Do not preallocate bytes for channel buffer (#31400)
Currently, when we open a new channel, we pass it an InboundChannelBuffer. The channel buffer is preallocated a single 16kb page. However, there is no guarantee that this channel will be read from anytime soon. Instead, this commit does not preallocate that page. That page will be allocated when we receive a read event.
1 parent 5236d02 commit ffba20b

File tree

3 files changed

+12
-4
lines changed

3 files changed

+12
-4
lines changed

libs/nio/src/main/java/org/elasticsearch/nio/InboundChannelBuffer.java

-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ public InboundChannelBuffer(Supplier<Page> pageSupplier) {
5858
this.pageSupplier = pageSupplier;
5959
this.pages = new ArrayDeque<>();
6060
this.capacity = PAGE_SIZE * pages.size();
61-
ensureCapacity(PAGE_SIZE);
6261
}
6362

6463
public static InboundChannelBuffer allocatingInstance() {

libs/nio/src/test/java/org/elasticsearch/nio/InboundChannelBufferTests.java

+11-3
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,20 @@ public class InboundChannelBufferTests extends ESTestCase {
3434
new InboundChannelBuffer.Page(ByteBuffer.allocate(BigArrays.BYTE_PAGE_SIZE), () -> {
3535
});
3636

37-
public void testNewBufferHasSinglePage() {
37+
public void testNewBufferNoPages() {
3838
InboundChannelBuffer channelBuffer = new InboundChannelBuffer(defaultPageSupplier);
3939

40-
assertEquals(PAGE_SIZE, channelBuffer.getCapacity());
41-
assertEquals(PAGE_SIZE, channelBuffer.getRemaining());
40+
assertEquals(0, channelBuffer.getCapacity());
41+
assertEquals(0, channelBuffer.getRemaining());
4242
assertEquals(0, channelBuffer.getIndex());
4343
}
4444

4545
public void testExpandCapacity() {
4646
InboundChannelBuffer channelBuffer = new InboundChannelBuffer(defaultPageSupplier);
47+
assertEquals(0, channelBuffer.getCapacity());
48+
assertEquals(0, channelBuffer.getRemaining());
49+
50+
channelBuffer.ensureCapacity(PAGE_SIZE);
4751

4852
assertEquals(PAGE_SIZE, channelBuffer.getCapacity());
4953
assertEquals(PAGE_SIZE, channelBuffer.getRemaining());
@@ -56,6 +60,7 @@ public void testExpandCapacity() {
5660

5761
public void testExpandCapacityMultiplePages() {
5862
InboundChannelBuffer channelBuffer = new InboundChannelBuffer(defaultPageSupplier);
63+
channelBuffer.ensureCapacity(PAGE_SIZE);
5964

6065
assertEquals(PAGE_SIZE, channelBuffer.getCapacity());
6166

@@ -68,6 +73,7 @@ public void testExpandCapacityMultiplePages() {
6873

6974
public void testExpandCapacityRespectsOffset() {
7075
InboundChannelBuffer channelBuffer = new InboundChannelBuffer(defaultPageSupplier);
76+
channelBuffer.ensureCapacity(PAGE_SIZE);
7177

7278
assertEquals(PAGE_SIZE, channelBuffer.getCapacity());
7379
assertEquals(PAGE_SIZE, channelBuffer.getRemaining());
@@ -87,6 +93,7 @@ public void testExpandCapacityRespectsOffset() {
8793

8894
public void testIncrementIndex() {
8995
InboundChannelBuffer channelBuffer = new InboundChannelBuffer(defaultPageSupplier);
96+
channelBuffer.ensureCapacity(PAGE_SIZE);
9097

9198
assertEquals(0, channelBuffer.getIndex());
9299
assertEquals(PAGE_SIZE, channelBuffer.getRemaining());
@@ -99,6 +106,7 @@ public void testIncrementIndex() {
99106

100107
public void testIncrementIndexWithOffset() {
101108
InboundChannelBuffer channelBuffer = new InboundChannelBuffer(defaultPageSupplier);
109+
channelBuffer.ensureCapacity(PAGE_SIZE);
102110

103111
assertEquals(0, channelBuffer.getIndex());
104112
assertEquals(PAGE_SIZE, channelBuffer.getRemaining());

x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/transport/nio/SSLDriver.java

+1
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,7 @@ private void handshake() throws SSLException {
365365

366366
@Override
367367
public void read(InboundChannelBuffer buffer) throws SSLException {
368+
ensureApplicationBufferSize(buffer);
368369
boolean continueUnwrap = true;
369370
while (continueUnwrap && networkReadBuffer.position() > 0) {
370371
networkReadBuffer.flip();

0 commit comments

Comments
 (0)