This is an automated email from the ASF dual-hosted git repository.
nwang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-heron.git
The following commit(s) were added to refs/heads/master by this push:
new bfe58d1 Flip buffers using helper method (#3311)
bfe58d1 is described below
commit bfe58d1e05cb3f5fb5db2f51d13592d9a65ac477
Author: Rohan Agarwal <[email protected]>
AuthorDate: Wed Jul 10 16:45:24 2019 -0700
Flip buffers using helper method (#3311)
* flip buffer using helper method
* make constructor private
* make class final
* move constructor to top of class
* no-op
* empty commit to re-trigger CI
* final try for flaky integration tests
---
.../apache/heron/common/network/BufferHelper.java | 48 ++++++++++++++++++++++
.../heron/common/network/IncomingPacket.java | 4 +-
.../heron/common/network/OutgoingPacket.java | 2 +-
3 files changed, 51 insertions(+), 3 deletions(-)
diff --git
a/heron/common/src/java/org/apache/heron/common/network/BufferHelper.java
b/heron/common/src/java/org/apache/heron/common/network/BufferHelper.java
new file mode 100644
index 0000000..2849923
--- /dev/null
+++ b/heron/common/src/java/org/apache/heron/common/network/BufferHelper.java
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.heron.common.network;
+
+import java.nio.Buffer;
+import java.nio.ByteBuffer;
+
+/**
+ * Helper methods for working with {@link Buffer} objects.
+ */
+final class BufferHelper {
+
+ private BufferHelper() {
+ }
+
+ /**
+ * Flip the provided buffer.
+ * <p>
+ * This wrapper around {@link Buffer#flip()} is required because of
+ * incompatible ABI changes between Java 8 and 11. In Java 8, {@link
ByteBuffer#flip()} returns
+ * a {@link Buffer}, whereas in Java 11, this method returns a {@link
ByteBuffer}.
+ * <p>
+ * If this function is used, any object of {@link Buffer} (and subclasses)
are first cast to
+ * {@link Buffer} objects, then flipped, thus avoiding the binary
incompatibility.
+ *
+ * @param buffer The buffer to flip
+ */
+ static void flip(Buffer buffer) {
+ buffer.flip();
+ }
+}
diff --git
a/heron/common/src/java/org/apache/heron/common/network/IncomingPacket.java
b/heron/common/src/java/org/apache/heron/common/network/IncomingPacket.java
index 045602e..b1bf26c 100644
--- a/heron/common/src/java/org/apache/heron/common/network/IncomingPacket.java
+++ b/heron/common/src/java/org/apache/heron/common/network/IncomingPacket.java
@@ -76,7 +76,7 @@ public class IncomingPacket {
}
// We read the header fully
headerRead = true;
- header.flip();
+ BufferHelper.flip(header);
int size = header.getInt();
if (size > limit) {
LOG.log(Level.SEVERE, "packet size " + size + " exceeds limit " +
limit);
@@ -86,7 +86,7 @@ public class IncomingPacket {
}
int retval = readFromChannel(channel, data);
if (retval == 0) {
- data.flip();
+ BufferHelper.flip(data);
}
return retval;
}
diff --git
a/heron/common/src/java/org/apache/heron/common/network/OutgoingPacket.java
b/heron/common/src/java/org/apache/heron/common/network/OutgoingPacket.java
index 2b91077..63983db 100644
--- a/heron/common/src/java/org/apache/heron/common/network/OutgoingPacket.java
+++ b/heron/common/src/java/org/apache/heron/common/network/OutgoingPacket.java
@@ -82,7 +82,7 @@ public class OutgoingPacket {
buffer.put(message.toByteArray());
// Make the buffer ready for writing out
- buffer.flip();
+ BufferHelper.flip(buffer);
}
public static int sizeRequiredToPackString(String str) {