This is an automated email from the ASF dual-hosted git repository.
sodonnell pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 767c2fbeed HDDS-7228. ChecksumByteBufferImpl.update() is expensive
(#3759)
767c2fbeed is described below
commit 767c2fbeed3c2a0537a7eb53a321486f1e03f8c4
Author: Wei-Chiu Chuang <[email protected]>
AuthorDate: Wed Oct 11 02:05:23 2023 -0700
HDDS-7228. ChecksumByteBufferImpl.update() is expensive (#3759)
---
.../ozone/common/ChecksumByteBufferImpl.java | 32 +++++++++++++++++++++-
hadoop-ozone/dist/src/shell/ozone/ozone | 6 ++++
2 files changed, 37 insertions(+), 1 deletion(-)
diff --git
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/common/ChecksumByteBufferImpl.java
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/common/ChecksumByteBufferImpl.java
index 5de86b80a2..5fab7eacdf 100644
---
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/common/ChecksumByteBufferImpl.java
+++
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/common/ChecksumByteBufferImpl.java
@@ -17,6 +17,10 @@
*/
package org.apache.hadoop.ozone.common;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.Field;
import java.nio.ByteBuffer;
import java.util.zip.Checksum;
@@ -25,7 +29,24 @@ import java.util.zip.Checksum;
*/
public class ChecksumByteBufferImpl implements ChecksumByteBuffer {
- private Checksum checksum;
+ private static final Logger LOG =
+ LoggerFactory.getLogger(ChecksumByteBufferImpl.class);
+
+ private final Checksum checksum;
+
+ private static final Field IS_READY_ONLY_FIELD;
+
+ static {
+ Field f = null;
+ try {
+ f = ByteBuffer.class
+ .getDeclaredField("isReadOnly");
+ f.setAccessible(true);
+ } catch (NoSuchFieldException e) {
+ LOG.error("No isReadOnly field in ByteBuffer", e);
+ }
+ IS_READY_ONLY_FIELD = f;
+ }
public ChecksumByteBufferImpl(Checksum impl) {
this.checksum = impl;
@@ -36,6 +57,15 @@ public class ChecksumByteBufferImpl implements
ChecksumByteBuffer {
// should be refactored to simply call checksum.update(buffer), as the
// Checksum interface has been enhanced to allow this since Java 9.
public void update(ByteBuffer buffer) {
+ // this is a hack to not do memory copy.
+ if (IS_READY_ONLY_FIELD != null) {
+ try {
+ IS_READY_ONLY_FIELD.setBoolean(buffer, false);
+ } catch (IllegalAccessException e) {
+ LOG.error("Cannot access isReadOnly in ByteBuffer", e);
+ }
+ }
+
if (buffer.hasArray()) {
checksum.update(buffer.array(), buffer.position() + buffer.arrayOffset(),
buffer.remaining());
diff --git a/hadoop-ozone/dist/src/shell/ozone/ozone
b/hadoop-ozone/dist/src/shell/ozone/ozone
index 854ee462ee..5a154cb1a8 100755
--- a/hadoop-ozone/dist/src/shell/ozone/ozone
+++ b/hadoop-ozone/dist/src/shell/ozone/ozone
@@ -93,6 +93,9 @@ function ozonecmd_case
if [[ "${JAVA_MAJOR_VERSION}" == "17" ]]; then
OZONE_MODULE_ACCESS_ARGS="--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED --add-exports
java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED"
fi
+ if [[ "${JAVA_MAJOR_VERSION}" -ge 9 ]]; then
+ OZONE_MODULE_ACCESS_ARGS="${OZONE_MODULE_ACCESS_ARGS} --add-opens
java.base/java.nio=ALL-UNNAMED"
+ fi
case ${subcmd} in
auditparser)
@@ -157,6 +160,7 @@ function ozonecmd_case
sh | shell)
OZONE_CLASSNAME=org.apache.hadoop.ozone.shell.OzoneShell
ozone_deprecate_envvar HDFS_OM_SH_OPTS OZONE_SH_OPTS
+ OZONE_SH_OPTS="${OZONE_SH_OPTS} ${OZONE_MODULE_ACCESS_ARGS}"
OZONE_RUN_ARTIFACT_NAME="ozone-tools"
;;
s3)
@@ -201,6 +205,7 @@ function ozonecmd_case
;;
fs)
OZONE_CLASSNAME=org.apache.hadoop.fs.ozone.OzoneFsShell
+ OZONE_FS_OPTS="${OZONE_FS_OPTS} ${OZONE_MODULE_ACCESS_ARGS}"
OZONE_RUN_ARTIFACT_NAME="ozone-tools"
;;
daemonlog)
@@ -229,6 +234,7 @@ function ozonecmd_case
;;
debug)
OZONE_CLASSNAME=org.apache.hadoop.ozone.debug.OzoneDebug
+ OZONE_DEBUG_OPTS="${OZONE_DEBUG_OPTS} ${OZONE_MODULE_ACCESS_ARGS}"
OZONE_RUN_ARTIFACT_NAME="ozone-tools"
;;
checknative)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]