You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by mm...@apache.org on 2021/06/17 13:40:57 UTC

[accumulo] branch main updated: Add test and fix for bug in KeyBuilder (#2170)

This is an automated email from the ASF dual-hosted git repository.

mmiller pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to refs/heads/main by this push:
     new 1fecdd3  Add test and fix for bug in KeyBuilder (#2170)
1fecdd3 is described below

commit 1fecdd378f2bc15955baa371ac9bb706bcc94dfc
Author: Mike Miller <mm...@apache.org>
AuthorDate: Thu Jun 17 09:40:49 2021 -0400

    Add test and fix for bug in KeyBuilder (#2170)
    
    * Replace error prone CharsetEncoder with toString() and getBytes()
---
 .../main/java/org/apache/accumulo/core/data/KeyBuilder.java | 13 +------------
 .../java/org/apache/accumulo/core/data/KeyBuilderTest.java  | 10 ++++++++++
 2 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/core/src/main/java/org/apache/accumulo/core/data/KeyBuilder.java b/core/src/main/java/org/apache/accumulo/core/data/KeyBuilder.java
index 100a8cc..1d625b8 100644
--- a/core/src/main/java/org/apache/accumulo/core/data/KeyBuilder.java
+++ b/core/src/main/java/org/apache/accumulo/core/data/KeyBuilder.java
@@ -20,11 +20,6 @@ package org.apache.accumulo.core.data;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
-import java.nio.CharBuffer;
-import java.nio.charset.CharacterCodingException;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CodingErrorAction;
-
 import org.apache.accumulo.core.security.ColumnVisibility;
 import org.apache.hadoop.io.Text;
 
@@ -326,13 +321,7 @@ public class KeyBuilder {
     }
 
     private byte[] encodeCharSequence(CharSequence chars) {
-      CharsetEncoder encoder = UTF_8.newEncoder().onMalformedInput(CodingErrorAction.REPORT)
-          .onUnmappableCharacter(CodingErrorAction.REPORT);
-      try {
-        return encoder.encode(CharBuffer.wrap(chars)).array();
-      } catch (CharacterCodingException ex) {
-        throw new RuntimeException("KeyBuilder supports only CharSequences encoded in UTF-8", ex);
-      }
+      return chars.toString().getBytes(UTF_8);
     }
 
     @Override
diff --git a/core/src/test/java/org/apache/accumulo/core/data/KeyBuilderTest.java b/core/src/test/java/org/apache/accumulo/core/data/KeyBuilderTest.java
index 8f795c5..70f02e5 100644
--- a/core/src/test/java/org/apache/accumulo/core/data/KeyBuilderTest.java
+++ b/core/src/test/java/org/apache/accumulo/core/data/KeyBuilderTest.java
@@ -305,4 +305,14 @@ public class KeyBuilderTest {
     keyExpected.setDeleted(false);
     assertEquals(keyExpected, keyBuilt);
   }
+
+  /**
+   * Tests bug where a String of 10 chars or longer was being encoded incorrectly.
+   */
+  @Test
+  public void test10CharactersBug() {
+    Key keyBuilt1 = Key.builder().row(rowText).family("1234567890").build();
+    Key keyBuilt2 = Key.builder().row(rowText).family(new Text("1234567890")).build();
+    assertEquals(keyBuilt1, keyBuilt2);
+  }
 }