You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bs...@apache.org on 2019/01/29 00:08:27 UTC
[geode] branch feature/GEODE-2113e updated: found a bug in buffer
expansion for SSL
This is an automated email from the ASF dual-hosted git repository.
bschuchardt pushed a commit to branch feature/GEODE-2113e
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/feature/GEODE-2113e by this push:
new 0581d1e found a bug in buffer expansion for SSL
0581d1e is described below
commit 0581d1e568b3cf79ebb0f1e1747712a59983d110
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Mon Jan 28 16:07:23 2019 -0800
found a bug in buffer expansion for SSL
added unit tests to cover the buffer expansion methods
---
.../org/apache/geode/internal/net/Buffers.java | 1 -
.../org/apache/geode/internal/tcp/MsgReader.java | 2 +-
.../org/apache/geode/internal/net/BuffersTest.java | 30 ++++++++++++++++++++++
3 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/geode-core/src/main/java/org/apache/geode/internal/net/Buffers.java b/geode-core/src/main/java/org/apache/geode/internal/net/Buffers.java
index d1dc7b9..9db6e54 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/net/Buffers.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/net/Buffers.java
@@ -129,7 +129,6 @@ public class Buffers {
}
ByteBuffer newBuffer = acquireBuffer(type, desiredCapacity, stats);
newBuffer.clear();
- existing.flip();
newBuffer.put(existing);
newBuffer.flip();
releaseBuffer(type, existing, stats);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgReader.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgReader.java
index 85c8d93..1512526 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgReader.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgReader.java
@@ -128,7 +128,7 @@ public class MsgReader {
private void dumpState(String whereFrom, Throwable e, ByteBuffer inputBuffer, int position,
int limit) {
logger.info("BRUCE: {}, PID {} Connection to {}, {} SSL", whereFrom, OSProcess.getId(),
- conn.getRemoteAddress(), conn.getConduit().useSSL());
+ conn.getRemoteAddress(), conn.getConduit().useSSL() ? "with" : "without");
logger.info("BRUCE: {}, Message length {}; type {}; id {}",
whereFrom, header.messageLength, header.messageType, header.messageId);
logger.info(
diff --git a/geode-core/src/test/java/org/apache/geode/internal/net/BuffersTest.java b/geode-core/src/test/java/org/apache/geode/internal/net/BuffersTest.java
index 65f8581..3e736a0 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/net/BuffersTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/net/BuffersTest.java
@@ -15,6 +15,7 @@
package org.apache.geode.internal.net;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
@@ -72,4 +73,33 @@ public class BuffersTest {
assertEquals(expected, actual);
}
}
+
+
+ // the fixed numbers in this test came from a distributed unit test failure
+ @Test
+ public void bufferPositionAndLimitForReadAreCorrectAfterExpansion() throws Exception {
+ ByteBuffer buffer = ByteBuffer.allocate(33842);
+ buffer.position(7);
+ buffer.limit(16384);
+ ByteBuffer newBuffer = Buffers.expandReadBufferIfNeeded(Buffers.BufferType.UNTRACKED, buffer,
+ 40899, mock(DMStats.class));
+ assertThat(newBuffer.capacity()).isGreaterThanOrEqualTo(40899);
+ // buffer should be ready to read the same amount of data
+ assertThat(newBuffer.position()).isEqualTo(0);
+ assertThat(newBuffer.limit()).isEqualTo(16384 - 7);
+ }
+
+
+ @Test
+ public void bufferPositionAndLimitForWriteAreCorrectAfterExpansion() throws Exception {
+ ByteBuffer buffer = ByteBuffer.allocate(33842);
+ buffer.position(16384);
+ buffer.limit(buffer.capacity());
+ ByteBuffer newBuffer = Buffers.expandWriteBufferIfNeeded(Buffers.BufferType.UNTRACKED, buffer,
+ 40899, mock(DMStats.class));
+ assertThat(newBuffer.capacity()).isGreaterThanOrEqualTo(40899);
+ // buffer should have the same amount of data as the old one
+ assertThat(newBuffer.position()).isEqualTo(16384);
+ assertThat(newBuffer.limit()).isEqualTo(newBuffer.capacity());
+ }
}