From 470d4df0e1bfe0dc47b4ab3a89c6257a4a628c97 Mon Sep 17 00:00:00 2001 From: GroundWu <1175416256@qq.com> Date: Tue, 13 Jan 2026 17:43:39 +0800 Subject: [PATCH 1/3] add config to control if use put opt --- .../java/com/alipay/oceanbase/hbase/OHTable.java | 13 ++++++++++--- .../oceanbase/hbase/constants/OHConstants.java | 8 ++++++++ .../oceanbase/hbase/util/OHBaseFuncUtils.java | 7 ++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/alipay/oceanbase/hbase/OHTable.java b/src/main/java/com/alipay/oceanbase/hbase/OHTable.java index 5efbb7f7..e9313dd0 100644 --- a/src/main/java/com/alipay/oceanbase/hbase/OHTable.java +++ b/src/main/java/com/alipay/oceanbase/hbase/OHTable.java @@ -187,6 +187,11 @@ public class OHTable implements Table { */ private int maxKeyValueSize; + /** + * whether to enable put optimization path + */ + private boolean enablePutOptimization; + // i.e., doPut checks the writebuffer every X Puts. /** @@ -459,6 +464,8 @@ private void finishSetUp() { DEFAULT_HBASE_HTABLE_PUT_WRITE_BUFFER_CHECK); this.writeBufferSize = this.configuration.getLong(WRITE_BUFFER_SIZE_KEY, WRITE_BUFFER_SIZE_DEFAULT); + this.enablePutOptimization = this.configuration.getBoolean(HBASE_HTABLE_PUT_OPTIMIZATION_ENABLE, + HBASE_HTABLE_PUT_OPTIMIZATION_DEFAULT); } public static OHConnectionConfiguration setUserDefinedNamespace(String tableNameString, @@ -722,7 +729,7 @@ public void batch(final List actions, final Object[] results) thr } catch (Exception e) { throw new IOException(tableNameString + " table occurred unexpected error." , e); } - } else if (OHBaseFuncUtils.isAllPut(actions) && OHBaseFuncUtils.isHBasePutPefSupport(obTableClient)) { + } else if (OHBaseFuncUtils.isAllPut(actions) && OHBaseFuncUtils.isHBasePutPefSupport(obTableClient, enablePutOptimization)) { // only support Put now ObHbaseRequest request = buildHbaseRequest(actions); try { @@ -1253,7 +1260,7 @@ private void doPut(List puts) throws IOException { // we need to periodically see if the writebuffer is full instead of waiting until the end of the List n++; if (n % putWriteBufferCheck == 0 && currentWriteBufferSize.get() > writeBufferSize) { - if (OHBaseFuncUtils.isHBasePutPefSupport(obTableClient)) { + if (OHBaseFuncUtils.isHBasePutPefSupport(obTableClient, enablePutOptimization)) { flushCommitsV2(); } else { flushCommits(); @@ -1261,7 +1268,7 @@ private void doPut(List puts) throws IOException { } } if (autoFlush || currentWriteBufferSize.get() > writeBufferSize) { - if (OHBaseFuncUtils.isHBasePutPefSupport(obTableClient)) { + if (OHBaseFuncUtils.isHBasePutPefSupport(obTableClient, enablePutOptimization)) { flushCommitsV2(); } else { flushCommits(); diff --git a/src/main/java/com/alipay/oceanbase/hbase/constants/OHConstants.java b/src/main/java/com/alipay/oceanbase/hbase/constants/OHConstants.java index deb94f75..73f9d093 100644 --- a/src/main/java/com/alipay/oceanbase/hbase/constants/OHConstants.java +++ b/src/main/java/com/alipay/oceanbase/hbase/constants/OHConstants.java @@ -129,6 +129,12 @@ public final class OHConstants { */ public static final String HBASE_HTABLE_QUERY_HOT_ONLY = "hbase.htable.query.hot_only"; + /** + * use to specify whether to enable put optimization path. + * Default is false (disabled). + */ + public static final String HBASE_HTABLE_PUT_OPTIMIZATION_ENABLE = "hbase.htable.put.optimization.enable"; + /*-------------------------------------------------------------------------------------------------------------*/ /** @@ -160,4 +166,6 @@ public final class OHConstants { public static final int DEFAULT_SOCKET_TIMEOUT = 20000; // 20 seconds + public static final boolean HBASE_HTABLE_PUT_OPTIMIZATION_DEFAULT = true; + } diff --git a/src/main/java/com/alipay/oceanbase/hbase/util/OHBaseFuncUtils.java b/src/main/java/com/alipay/oceanbase/hbase/util/OHBaseFuncUtils.java index 61b4ef65..ebbdf701 100644 --- a/src/main/java/com/alipay/oceanbase/hbase/util/OHBaseFuncUtils.java +++ b/src/main/java/com/alipay/oceanbase/hbase/util/OHBaseFuncUtils.java @@ -51,7 +51,12 @@ public static byte[][] extractFamilyFromQualifier(byte[] qualifier) throws Excep return new byte[][] { family, newQualifier }; } - public static boolean isHBasePutPefSupport(ObTableClient tableClient) { + public static boolean isHBasePutPefSupport(ObTableClient tableClient, boolean enablePutOptimization) { + // If client-side optimization is disabled, return false directly + if (!enablePutOptimization) { + return false; + } + if (tableClient.isOdpMode()) { // server version support and distributed capacity is enabled and odp version support return ObGlobal.isHBasePutPerfSupport() From 2a7e7a53d310c3995aa2c5f5bd9e313cc4d0aa9c Mon Sep 17 00:00:00 2001 From: GroundWu <1175416256@qq.com> Date: Tue, 13 Jan 2026 19:01:10 +0800 Subject: [PATCH 2/3] fix for comment --- .../java/com/alipay/oceanbase/hbase/constants/OHConstants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/alipay/oceanbase/hbase/constants/OHConstants.java b/src/main/java/com/alipay/oceanbase/hbase/constants/OHConstants.java index 73f9d093..0feae401 100644 --- a/src/main/java/com/alipay/oceanbase/hbase/constants/OHConstants.java +++ b/src/main/java/com/alipay/oceanbase/hbase/constants/OHConstants.java @@ -131,7 +131,7 @@ public final class OHConstants { /** * use to specify whether to enable put optimization path. - * Default is false (disabled). + * Default is true (enabled). */ public static final String HBASE_HTABLE_PUT_OPTIMIZATION_ENABLE = "hbase.htable.put.optimization.enable"; From 5c250b69504ca35a5624d57b508d9f91e3324048 Mon Sep 17 00:00:00 2001 From: GroundWu <1175416256@qq.com> Date: Tue, 13 Jan 2026 19:20:39 +0800 Subject: [PATCH 3/3] modify config name --- src/main/java/com/alipay/oceanbase/hbase/OHTable.java | 4 ++-- .../com/alipay/oceanbase/hbase/constants/OHConstants.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/alipay/oceanbase/hbase/OHTable.java b/src/main/java/com/alipay/oceanbase/hbase/OHTable.java index e9313dd0..452e6c40 100644 --- a/src/main/java/com/alipay/oceanbase/hbase/OHTable.java +++ b/src/main/java/com/alipay/oceanbase/hbase/OHTable.java @@ -464,8 +464,8 @@ private void finishSetUp() { DEFAULT_HBASE_HTABLE_PUT_WRITE_BUFFER_CHECK); this.writeBufferSize = this.configuration.getLong(WRITE_BUFFER_SIZE_KEY, WRITE_BUFFER_SIZE_DEFAULT); - this.enablePutOptimization = this.configuration.getBoolean(HBASE_HTABLE_PUT_OPTIMIZATION_ENABLE, - HBASE_HTABLE_PUT_OPTIMIZATION_DEFAULT); + this.enablePutOptimization = this.configuration.getBoolean(HBASE_HTABLE_USE_PUT_OPTIMIZATION, + HBASE_HTABLE_USE_PUT_OPTIMIZATION_DEFAULT); } public static OHConnectionConfiguration setUserDefinedNamespace(String tableNameString, diff --git a/src/main/java/com/alipay/oceanbase/hbase/constants/OHConstants.java b/src/main/java/com/alipay/oceanbase/hbase/constants/OHConstants.java index 0feae401..d317a5a0 100644 --- a/src/main/java/com/alipay/oceanbase/hbase/constants/OHConstants.java +++ b/src/main/java/com/alipay/oceanbase/hbase/constants/OHConstants.java @@ -133,7 +133,7 @@ public final class OHConstants { * use to specify whether to enable put optimization path. * Default is true (enabled). */ - public static final String HBASE_HTABLE_PUT_OPTIMIZATION_ENABLE = "hbase.htable.put.optimization.enable"; + public static final String HBASE_HTABLE_USE_PUT_OPTIMIZATION = "hbase.htable.use.put.optimization"; /*-------------------------------------------------------------------------------------------------------------*/ @@ -166,6 +166,6 @@ public final class OHConstants { public static final int DEFAULT_SOCKET_TIMEOUT = 20000; // 20 seconds - public static final boolean HBASE_HTABLE_PUT_OPTIMIZATION_DEFAULT = true; + public static final boolean HBASE_HTABLE_USE_PUT_OPTIMIZATION_DEFAULT = true; }