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

cwylie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 72a571f  For performance reasons, use `java.util.Base64` instead of 
Base64 in Apache Commons Codec and Guava (#6913)
72a571f is described below

commit 72a571fbf71d8b3209377a2d5bdd5cfac08f95a7
Author: Benedict Jin <[email protected]>
AuthorDate: Sat Jan 26 09:32:29 2019 +0800

    For performance reasons, use `java.util.Base64` instead of Base64 in Apache 
Commons Codec and Guava (#6913)
    
    * * Add few methods about base64 into StringUtils
    
    * Use `java.util.Base64` instead of others
    
    * Add org.apache.commons.codec.binary.Base64 & 
com.google.common.io.BaseEncoding into druid-forbidden-apis
    
    * Rename encodeBase64String & decodeBase64String
    
    * Update druid-forbidden-apis
---
 codestyle/druid-forbidden-apis.txt                 |  6 ++-
 .../apache/druid/java/util/common/StringUtils.java | 49 +++++++++++++++++++++-
 .../java/util/emitter/core/HttpPostEmitter.java    |  3 +-
 .../druid/java/util/emitter/core/EmitterTest.java  |  3 +-
 .../data/input/thrift/ThriftDeserialization.java   |  4 +-
 .../input/thrift/ThriftInputRowParserTest.java     |  4 +-
 .../hll/HllSketchMergeComplexMetricSerde.java      |  4 +-
 .../quantiles/DoublesSketchOperations.java         |  4 +-
 .../datasketches/theta/SketchHolder.java           |  3 +-
 .../tuple/ArrayOfDoublesSketchOperations.java      |  4 +-
 .../datasketches/hll/GenerateTestData.java         |  4 +-
 .../datasketches/quantiles/GenerateTestData.java   |  4 +-
 .../datasketches/tuple/GenerateTestData.java       |  4 +-
 .../druid/security/basic/BasicAuthUtils.java       |  3 +-
 .../filter/sql/BloomFilterOperatorConversion.java  |  4 +-
 .../query/filter/sql/BloomDimFilterSqlTest.java    |  7 ++--
 .../DruidKerberosAuthenticationHandler.java        |  7 ++--
 .../druid/security/kerberos/DruidKerberosUtil.java |  6 +--
 .../security/kerberos/KerberosAuthenticator.java   |  4 +-
 .../ApproximateHistogramAggregatorFactory.java     |  3 +-
 .../histogram/FixedBucketsHistogram.java           |  5 +--
 .../FixedBucketsHistogramAggregatorFactory.java    |  3 +-
 .../variance/VarianceAggregatorFactory.java        |  3 +-
 .../apache/druid/hll/HyperLogLogCollectorTest.java |  3 +-
 .../autoscaling/ec2/GalaxyEC2UserData.java         |  4 +-
 .../autoscaling/ec2/StringEC2UserData.java         |  3 +-
 .../autoscaling/EC2AutoScalerSerdeTest.java        |  5 +--
 .../aggregation/HistogramAggregatorFactory.java    |  3 +-
 .../cardinality/CardinalityAggregatorFactory.java  |  3 +-
 .../hyperloglog/HyperUniquesAggregatorFactory.java |  3 +-
 .../hyperloglog/PreComputedHyperUniquesSerde.java  |  4 +-
 .../druid/client/CachingClusteredClient.java       |  3 +-
 32 files changed, 100 insertions(+), 72 deletions(-)

diff --git a/codestyle/druid-forbidden-apis.txt 
b/codestyle/druid-forbidden-apis.txt
index c21ca25..5eb5256 100644
--- a/codestyle/druid-forbidden-apis.txt
+++ b/codestyle/druid-forbidden-apis.txt
@@ -33,4 +33,8 @@ java.util.LinkedList @ Use ArrayList or ArrayDeque instead
 java.util.Random#<init>() @ Use ThreadLocalRandom.current() or the constructor 
with a seed (the latter in tests only!)
 java.lang.Math#random() @ Use ThreadLocalRandom.current()
 java.util.regex.Pattern#matches(java.lang.String,java.lang.CharSequence) @ Use 
String.startsWith(), endsWith(), contains(), or compile and cache a Pattern 
explicitly
-org.apache.commons.io.FileUtils#getTempDirectory() @ Use 
org.junit.rules.TemporaryFolder for tests instead
\ No newline at end of file
+org.apache.commons.io.FileUtils#getTempDirectory() @ Use 
org.junit.rules.TemporaryFolder for tests instead
+
+@defaultMessage For performance reasons, use the utf8Base64 / encodeBase64 / 
encodeBase64String / decodeBase64 / decodeBase64String methods in StringUtils
+org.apache.commons.codec.binary.Base64
+com.google.common.io.BaseEncoding.base64
\ No newline at end of file
diff --git 
a/core/src/main/java/org/apache/druid/java/util/common/StringUtils.java 
b/core/src/main/java/org/apache/druid/java/util/common/StringUtils.java
index 2c72e0e..dd5143d 100644
--- a/core/src/main/java/org/apache/druid/java/util/common/StringUtils.java
+++ b/core/src/main/java/org/apache/druid/java/util/common/StringUtils.java
@@ -43,6 +43,8 @@ public class StringUtils
   @Deprecated // Charset parameters to String are currently slower than the 
charset's string name
   public static final Charset UTF8_CHARSET = StandardCharsets.UTF_8;
   public static final String UTF8_STRING = StandardCharsets.UTF_8.toString();
+  private static final Base64.Encoder BASE64_ENCODER = Base64.getEncoder();
+  private static final Base64.Decoder BASE64_DECODER = Base64.getDecoder();
 
   // should be used only for estimation
   // returns the same result with StringUtils.fromUtf8(value).length for valid 
string values
@@ -309,11 +311,54 @@ public class StringUtils
    * Convert an input to base 64 and return the utf8 string of that byte array
    *
    * @param input The string to convert to base64
-   *
    * @return the base64 of the input in string form
    */
   public static String utf8Base64(String input)
   {
-    return fromUtf8(Base64.getEncoder().encode(toUtf8(input)));
+    return fromUtf8(encodeBase64(toUtf8(input)));
+  }
+
+  /**
+   * Convert an input byte array into a newly-allocated byte array using the 
{@link Base64} encoding scheme
+   *
+   * @param input The byte array to convert to base64
+   * @return the base64 of the input in byte array form
+   */
+  public static byte[] encodeBase64(byte[] input)
+  {
+    return BASE64_ENCODER.encode(input);
+  }
+
+  /**
+   * Convert an input byte array into a string using the {@link Base64} 
encoding scheme
+   *
+   * @param input The byte array to convert to base64
+   * @return the base64 of the input in string form
+   */
+  public static String encodeBase64String(byte[] input)
+  {
+    return BASE64_ENCODER.encodeToString(input);
+  }
+
+  /**
+   * Decode an input byte array using the {@link Base64} encoding scheme and 
return a newly-allocated byte array
+   *
+   * @param input The byte array to decode from base64
+   * @return a newly-allocated byte array
+   */
+  public static byte[] decodeBase64(byte[] input)
+  {
+    return BASE64_DECODER.decode(input);
+  }
+
+  /**
+   * Decode an input string using the {@link Base64} encoding scheme and 
return a newly-allocated byte array
+   *
+   * @param input The string to decode from base64
+   * @return a newly-allocated byte array
+   */
+  public static byte[] decodeBase64String(String input)
+  {
+    return BASE64_DECODER.decode(input);
   }
 }
diff --git 
a/core/src/main/java/org/apache/druid/java/util/emitter/core/HttpPostEmitter.java
 
b/core/src/main/java/org/apache/druid/java/util/emitter/core/HttpPostEmitter.java
index ea34564..f651968 100644
--- 
a/core/src/main/java/org/apache/druid/java/util/emitter/core/HttpPostEmitter.java
+++ 
b/core/src/main/java/org/apache/druid/java/util/emitter/core/HttpPostEmitter.java
@@ -47,7 +47,6 @@ import java.net.URL;
 import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayDeque;
-import java.util.Base64;
 import java.util.concurrent.ConcurrentLinkedDeque;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.CountDownLatch;
@@ -747,7 +746,7 @@ public class HttpPostEmitter implements Flushable, 
Closeable, Emitter
         final String[] parts = config.getBasicAuthentication().split(":", 2);
         final String user = parts[0];
         final String password = parts.length > 1 ? parts[1] : "";
-        String encoded = Base64.getEncoder().encodeToString((user + ':' + 
password).getBytes(StandardCharsets.UTF_8));
+        String encoded = StringUtils.encodeBase64String((user + ':' + 
password).getBytes(StandardCharsets.UTF_8));
         request.setHeader(HttpHeaders.Names.AUTHORIZATION, "Basic " + encoded);
       }
 
diff --git 
a/core/src/test/java/org/apache/druid/java/util/emitter/core/EmitterTest.java 
b/core/src/test/java/org/apache/druid/java/util/emitter/core/EmitterTest.java
index be43df7..a23f967 100644
--- 
a/core/src/test/java/org/apache/druid/java/util/emitter/core/EmitterTest.java
+++ 
b/core/src/test/java/org/apache/druid/java/util/emitter/core/EmitterTest.java
@@ -21,7 +21,6 @@ package org.apache.druid.java.util.emitter.core;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.io.BaseEncoding;
 import io.netty.buffer.Unpooled;
 import io.netty.handler.codec.http.DefaultHttpResponse;
 import io.netty.handler.codec.http.HttpHeaders;
@@ -454,7 +453,7 @@ public class EmitterTest
                 request.getHeaders().get(HttpHeaders.Names.CONTENT_TYPE)
             );
             Assert.assertEquals(
-                "Basic " + 
BaseEncoding.base64().encode(StringUtils.toUtf8("foo:bar")),
+                "Basic " + 
StringUtils.encodeBase64String(StringUtils.toUtf8("foo:bar")),
                 request.getHeaders().get(HttpHeaders.Names.AUTHORIZATION)
             );
             Assert.assertEquals(
diff --git 
a/extensions-contrib/thrift-extensions/src/main/java/org/apache/druid/data/input/thrift/ThriftDeserialization.java
 
b/extensions-contrib/thrift-extensions/src/main/java/org/apache/druid/data/input/thrift/ThriftDeserialization.java
index ae5f1f0..90b8027 100644
--- 
a/extensions-contrib/thrift-extensions/src/main/java/org/apache/druid/data/input/thrift/ThriftDeserialization.java
+++ 
b/extensions-contrib/thrift-extensions/src/main/java/org/apache/druid/data/input/thrift/ThriftDeserialization.java
@@ -20,7 +20,7 @@
 package org.apache.druid.data.input.thrift;
 
 import com.google.common.base.Preconditions;
-import org.apache.commons.codec.binary.Base64;
+import org.apache.druid.java.util.common.StringUtils;
 import org.apache.thrift.TBase;
 import org.apache.thrift.TDeserializer;
 import org.apache.thrift.TException;
@@ -85,7 +85,7 @@ public class ThriftDeserialization
       return EMPTY_BYTES;
     }
     final byte last = src[src.length - 1];
-    return (0 == last || '}' == last) ? src : Base64.decodeBase64(src);
+    return (0 == last || '}' == last) ? src : StringUtils.decodeBase64(src);
   }
 
   /**
diff --git 
a/extensions-contrib/thrift-extensions/src/test/java/org/apache/druid/data/input/thrift/ThriftInputRowParserTest.java
 
b/extensions-contrib/thrift-extensions/src/test/java/org/apache/druid/data/input/thrift/ThriftInputRowParserTest.java
index 6816f64..3d890a7 100644
--- 
a/extensions-contrib/thrift-extensions/src/test/java/org/apache/druid/data/input/thrift/ThriftInputRowParserTest.java
+++ 
b/extensions-contrib/thrift-extensions/src/test/java/org/apache/druid/data/input/thrift/ThriftInputRowParserTest.java
@@ -21,7 +21,6 @@ package org.apache.druid.data.input.thrift;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.data.input.InputRow;
 import org.apache.druid.data.input.impl.DimensionsSpec;
 import org.apache.druid.data.input.impl.JSONParseSpec;
@@ -29,6 +28,7 @@ import org.apache.druid.data.input.impl.JavaScriptParseSpec;
 import org.apache.druid.data.input.impl.ParseSpec;
 import org.apache.druid.data.input.impl.StringDimensionSchema;
 import org.apache.druid.data.input.impl.TimestampSpec;
+import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.java.util.common.parsers.JSONPathFieldSpec;
 import org.apache.druid.java.util.common.parsers.JSONPathFieldType;
 import org.apache.druid.java.util.common.parsers.JSONPathSpec;
@@ -109,7 +109,7 @@ public class ThriftInputRowParserTest
 
     // 2. binary + base64
     serializer = new TSerializer(new TBinaryProtocol.Factory());
-    serializationAndTest(parser, 
Base64.encodeBase64(serializer.serialize(book)));
+    serializationAndTest(parser, 
StringUtils.encodeBase64(serializer.serialize(book)));
 
     // 3. json
     serializer = new TSerializer(new TJSONProtocol.Factory());
diff --git 
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchMergeComplexMetricSerde.java
 
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchMergeComplexMetricSerde.java
index 62c02e3..3865008 100644
--- 
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchMergeComplexMetricSerde.java
+++ 
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchMergeComplexMetricSerde.java
@@ -21,9 +21,9 @@ package org.apache.druid.query.aggregation.datasketches.hll;
 
 import com.yahoo.memory.Memory;
 import com.yahoo.sketches.hll.HllSketch;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.data.input.InputRow;
 import org.apache.druid.java.util.common.IAE;
+import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.segment.GenericColumnSerializer;
 import org.apache.druid.segment.column.ColumnBuilder;
 import org.apache.druid.segment.data.GenericIndexed;
@@ -89,7 +89,7 @@ public class HllSketchMergeComplexMetricSerde extends 
ComplexMetricSerde
   static HllSketch deserializeSketch(final Object object)
   {
     if (object instanceof String) {
-      return HllSketch.wrap(Memory.wrap(Base64.decodeBase64(((String) 
object).getBytes(StandardCharsets.UTF_8))));
+      return HllSketch.wrap(Memory.wrap(StringUtils.decodeBase64(((String) 
object).getBytes(StandardCharsets.UTF_8))));
     } else if (object instanceof byte[]) {
       return HllSketch.wrap(Memory.wrap((byte[]) object));
     } else if (object instanceof HllSketch) {
diff --git 
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchOperations.java
 
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchOperations.java
index d746012..1eb413e 100644
--- 
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchOperations.java
+++ 
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchOperations.java
@@ -21,8 +21,8 @@ package 
org.apache.druid.query.aggregation.datasketches.quantiles;
 
 import com.yahoo.memory.Memory;
 import com.yahoo.sketches.quantiles.DoublesSketch;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.java.util.common.ISE;
+import org.apache.druid.java.util.common.StringUtils;
 
 import java.nio.charset.StandardCharsets;
 
@@ -47,7 +47,7 @@ public class DoublesSketchOperations
 
   public static DoublesSketch deserializeFromBase64EncodedString(final String 
str)
   {
-    return 
deserializeFromByteArray(Base64.decodeBase64(str.getBytes(StandardCharsets.UTF_8)));
+    return 
deserializeFromByteArray(StringUtils.decodeBase64(str.getBytes(StandardCharsets.UTF_8)));
   }
 
   public static DoublesSketch deserializeFromByteArray(final byte[] data)
diff --git 
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchHolder.java
 
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchHolder.java
index 1e70a71..9ac9056 100644
--- 
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchHolder.java
+++ 
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchHolder.java
@@ -31,7 +31,6 @@ import com.yahoo.sketches.theta.SetOperation;
 import com.yahoo.sketches.theta.Sketch;
 import com.yahoo.sketches.theta.Sketches;
 import com.yahoo.sketches.theta.Union;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.java.util.common.IAE;
 import org.apache.druid.java.util.common.ISE;
 import org.apache.druid.java.util.common.StringUtils;
@@ -223,7 +222,7 @@ public class SketchHolder
 
   private static Sketch deserializeFromBase64EncodedString(String str)
   {
-    return 
deserializeFromByteArray(Base64.decodeBase64(StringUtils.toUtf8(str)));
+    return 
deserializeFromByteArray(StringUtils.decodeBase64(StringUtils.toUtf8(str)));
   }
 
   private static Sketch deserializeFromByteArray(byte[] data)
diff --git 
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchOperations.java
 
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchOperations.java
index 21afbfd..8846b2e 100644
--- 
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchOperations.java
+++ 
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchOperations.java
@@ -27,9 +27,9 @@ import 
com.yahoo.sketches.tuple.ArrayOfDoublesSetOperationBuilder;
 import com.yahoo.sketches.tuple.ArrayOfDoublesSketch;
 import com.yahoo.sketches.tuple.ArrayOfDoublesSketches;
 import com.yahoo.sketches.tuple.ArrayOfDoublesUnion;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.java.util.common.IAE;
 import org.apache.druid.java.util.common.ISE;
+import org.apache.druid.java.util.common.StringUtils;
 
 import java.nio.charset.StandardCharsets;
 
@@ -117,7 +117,7 @@ public class ArrayOfDoublesSketchOperations
 
   public static ArrayOfDoublesSketch deserializeFromBase64EncodedString(final 
String str)
   {
-    return 
deserializeFromByteArray(Base64.decodeBase64(str.getBytes(StandardCharsets.UTF_8)));
+    return 
deserializeFromByteArray(StringUtils.decodeBase64(str.getBytes(StandardCharsets.UTF_8)));
   }
 
   public static ArrayOfDoublesSketch deserializeFromByteArray(final byte[] 
data)
diff --git 
a/extensions-core/datasketches/src/test/java/org/apache/druid/query/aggregation/datasketches/hll/GenerateTestData.java
 
b/extensions-core/datasketches/src/test/java/org/apache/druid/query/aggregation/datasketches/hll/GenerateTestData.java
index 75882ff..f877cef 100644
--- 
a/extensions-core/datasketches/src/test/java/org/apache/druid/query/aggregation/datasketches/hll/GenerateTestData.java
+++ 
b/extensions-core/datasketches/src/test/java/org/apache/druid/query/aggregation/datasketches/hll/GenerateTestData.java
@@ -20,7 +20,7 @@
 package org.apache.druid.query.aggregation.datasketches.hll;
 
 import com.yahoo.sketches.hll.HllSketch;
-import org.apache.commons.codec.binary.Base64;
+import org.apache.druid.java.util.common.StringUtils;
 
 import java.io.BufferedWriter;
 import java.nio.charset.StandardCharsets;
@@ -80,7 +80,7 @@ class GenerateTestData
     out.write("\t");
     out.write(dimension);
     out.write("\t");
-    out.write(Base64.encodeBase64String(sketch.toCompactByteArray()));
+    out.write(StringUtils.encodeBase64String(sketch.toCompactByteArray()));
     out.newLine();
   }
 
diff --git 
a/extensions-core/datasketches/src/test/java/org/apache/druid/query/aggregation/datasketches/quantiles/GenerateTestData.java
 
b/extensions-core/datasketches/src/test/java/org/apache/druid/query/aggregation/datasketches/quantiles/GenerateTestData.java
index ea9d328..1f30dc1 100644
--- 
a/extensions-core/datasketches/src/test/java/org/apache/druid/query/aggregation/datasketches/quantiles/GenerateTestData.java
+++ 
b/extensions-core/datasketches/src/test/java/org/apache/druid/query/aggregation/datasketches/quantiles/GenerateTestData.java
@@ -21,7 +21,7 @@ package 
org.apache.druid.query.aggregation.datasketches.quantiles;
 
 import com.yahoo.sketches.quantiles.DoublesSketch;
 import com.yahoo.sketches.quantiles.UpdateDoublesSketch;
-import org.apache.commons.codec.binary.Base64;
+import org.apache.druid.java.util.common.StringUtils;
 
 import java.io.BufferedWriter;
 import java.nio.charset.StandardCharsets;
@@ -63,7 +63,7 @@ public class GenerateTestData
       sketchData.write('\t');
       sketchData.write(Integer.toString(product)); // product dimension
       sketchData.write('\t');
-      sketchData.write(Base64.encodeBase64String(sketch.toByteArray(true)));
+      
sketchData.write(StringUtils.encodeBase64String(sketch.toByteArray(true)));
       sketchData.newLine();
     }
     buildData.close();
diff --git 
a/extensions-core/datasketches/src/test/java/org/apache/druid/query/aggregation/datasketches/tuple/GenerateTestData.java
 
b/extensions-core/datasketches/src/test/java/org/apache/druid/query/aggregation/datasketches/tuple/GenerateTestData.java
index da68be7..10840ee 100644
--- 
a/extensions-core/datasketches/src/test/java/org/apache/druid/query/aggregation/datasketches/tuple/GenerateTestData.java
+++ 
b/extensions-core/datasketches/src/test/java/org/apache/druid/query/aggregation/datasketches/tuple/GenerateTestData.java
@@ -21,7 +21,7 @@ package org.apache.druid.query.aggregation.datasketches.tuple;
 
 import com.yahoo.sketches.tuple.ArrayOfDoublesUpdatableSketch;
 import com.yahoo.sketches.tuple.ArrayOfDoublesUpdatableSketchBuilder;
-import org.apache.commons.codec.binary.Base64;
+import org.apache.druid.java.util.common.StringUtils;
 
 import java.io.BufferedWriter;
 import java.nio.charset.StandardCharsets;
@@ -56,7 +56,7 @@ class GenerateTestData
         out.write('\t');
         out.write("product_" + (rand.nextInt(10) + 1));
         out.write('\t');
-        out.write(Base64.encodeBase64String(sketch.compact().toByteArray()));
+        
out.write(StringUtils.encodeBase64String(sketch.compact().toByteArray()));
         out.newLine();
       }
     }
diff --git 
a/extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/BasicAuthUtils.java
 
b/extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/BasicAuthUtils.java
index 714fe8f..d66dc1d 100644
--- 
a/extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/BasicAuthUtils.java
+++ 
b/extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/BasicAuthUtils.java
@@ -39,7 +39,6 @@ import java.io.IOException;
 import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
 import java.security.spec.InvalidKeySpecException;
-import java.util.Base64;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -136,7 +135,7 @@ public class BasicAuthUtils
   public static String decodeUserSecret(String encodedUserSecret)
   {
     try {
-      return 
StringUtils.fromUtf8(Base64.getDecoder().decode(encodedUserSecret));
+      return 
StringUtils.fromUtf8(StringUtils.decodeBase64String(encodedUserSecret));
     }
     catch (IllegalArgumentException iae) {
       return null;
diff --git 
a/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/sql/BloomFilterOperatorConversion.java
 
b/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/sql/BloomFilterOperatorConversion.java
index ab9419e..d5592cb 100644
--- 
a/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/sql/BloomFilterOperatorConversion.java
+++ 
b/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/sql/BloomFilterOperatorConversion.java
@@ -19,7 +19,6 @@
 
 package org.apache.druid.query.filter.sql;
 
-import com.google.common.io.BaseEncoding;
 import org.apache.calcite.rex.RexCall;
 import org.apache.calcite.rex.RexLiteral;
 import org.apache.calcite.rex.RexNode;
@@ -28,6 +27,7 @@ import org.apache.calcite.sql.SqlOperator;
 import org.apache.calcite.sql.type.ReturnTypes;
 import org.apache.calcite.sql.type.SqlTypeFamily;
 import org.apache.druid.guice.BloomFilterSerializersModule;
+import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.query.filter.BloomDimFilter;
 import org.apache.druid.query.filter.BloomKFilter;
 import org.apache.druid.query.filter.BloomKFilterHolder;
@@ -76,7 +76,7 @@ public class BloomFilterOperatorConversion implements 
SqlOperatorConversion
     }
 
     String base64EncodedBloomKFilter = RexLiteral.stringValue(operands.get(1));
-    final byte[] decoded = 
BaseEncoding.base64().decode(base64EncodedBloomKFilter);
+    final byte[] decoded = 
StringUtils.decodeBase64String(base64EncodedBloomKFilter);
     BloomKFilter filter;
     BloomKFilterHolder holder;
     try {
diff --git 
a/extensions-core/druid-bloom-filter/src/test/java/org/apache/druid/query/filter/sql/BloomDimFilterSqlTest.java
 
b/extensions-core/druid-bloom-filter/src/test/java/org/apache/druid/query/filter/sql/BloomDimFilterSqlTest.java
index 3f1f719..ce1cfc2 100644
--- 
a/extensions-core/druid-bloom-filter/src/test/java/org/apache/druid/query/filter/sql/BloomDimFilterSqlTest.java
+++ 
b/extensions-core/druid-bloom-filter/src/test/java/org/apache/druid/query/filter/sql/BloomDimFilterSqlTest.java
@@ -26,7 +26,6 @@ import com.google.common.collect.ImmutableSet;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Key;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.guice.BloomFilterExtensionModule;
 import org.apache.druid.guice.BloomFilterSerializersModule;
 import org.apache.druid.guice.annotations.Json;
@@ -90,7 +89,7 @@ public class BloomDimFilterSqlTest extends 
BaseCalciteQueryTest
     BloomKFilter filter = new BloomKFilter(1500);
     filter.addString("def");
     byte[] bytes = BloomFilterSerializersModule.bloomKFilterToBytes(filter);
-    String base64 = Base64.encodeBase64String(bytes);
+    String base64 = StringUtils.encodeBase64String(bytes);
 
     testQuery(
         StringUtils.format("SELECT COUNT(*) FROM druid.foo WHERE 
bloom_filter_test(dim1, '%s')", base64),
@@ -121,8 +120,8 @@ public class BloomDimFilterSqlTest extends 
BaseCalciteQueryTest
     filter.addString("abc");
     byte[] bytes = BloomFilterSerializersModule.bloomKFilterToBytes(filter);
     byte[] bytes2 = BloomFilterSerializersModule.bloomKFilterToBytes(filter2);
-    String base64 = Base64.encodeBase64String(bytes);
-    String base642 = Base64.encodeBase64String(bytes2);
+    String base64 = StringUtils.encodeBase64String(bytes);
+    String base642 = StringUtils.encodeBase64String(bytes2);
 
 
     testQuery(
diff --git 
a/extensions-core/druid-kerberos/src/main/java/org/apache/druid/security/kerberos/DruidKerberosAuthenticationHandler.java
 
b/extensions-core/druid-kerberos/src/main/java/org/apache/druid/security/kerberos/DruidKerberosAuthenticationHandler.java
index 12ebb4b..add3767 100644
--- 
a/extensions-core/druid-kerberos/src/main/java/org/apache/druid/security/kerberos/DruidKerberosAuthenticationHandler.java
+++ 
b/extensions-core/druid-kerberos/src/main/java/org/apache/druid/security/kerberos/DruidKerberosAuthenticationHandler.java
@@ -19,7 +19,7 @@
 
 package org.apache.druid.security.kerberos;
 
-import org.apache.commons.codec.binary.Base64;
+import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.java.util.common.logger.Logger;
 import 
org.apache.hadoop.security.authentication.client.AuthenticationException;
 import org.apache.hadoop.security.authentication.server.AuthenticationToken;
@@ -154,8 +154,7 @@ public class DruidKerberosAuthenticationHandler extends 
KerberosAuthenticationHa
       authorization = authorization
           
.substring(org.apache.hadoop.security.authentication.client.KerberosAuthenticator.NEGOTIATE.length())
           .trim();
-      final Base64 base64 = new Base64(0);
-      final byte[] clientToken = base64.decode(authorization);
+      final byte[] clientToken = StringUtils.decodeBase64String(authorization);
       final String serverName = request.getServerName();
       try {
         token = Subject.doAs(serverSubject, new 
PrivilegedExceptionAction<AuthenticationToken>()
@@ -183,7 +182,7 @@ public class DruidKerberosAuthenticationHandler extends 
KerberosAuthenticationHa
               gssContext = gssManager.createContext(gssCreds);
               byte[] serverToken = gssContext.acceptSecContext(clientToken, 0, 
clientToken.length);
               if (serverToken != null && serverToken.length > 0) {
-                String authenticate = base64.encodeToString(serverToken);
+                String authenticate = 
StringUtils.encodeBase64String(serverToken);
                 response.setHeader(
                     
org.apache.hadoop.security.authentication.client.KerberosAuthenticator.WWW_AUTHENTICATE,
                     
org.apache.hadoop.security.authentication.client.KerberosAuthenticator.NEGOTIATE
diff --git 
a/extensions-core/druid-kerberos/src/main/java/org/apache/druid/security/kerberos/DruidKerberosUtil.java
 
b/extensions-core/druid-kerberos/src/main/java/org/apache/druid/security/kerberos/DruidKerberosUtil.java
index 1caa76a..bd43888 100644
--- 
a/extensions-core/druid-kerberos/src/main/java/org/apache/druid/security/kerberos/DruidKerberosUtil.java
+++ 
b/extensions-core/druid-kerberos/src/main/java/org/apache/druid/security/kerberos/DruidKerberosUtil.java
@@ -20,8 +20,8 @@
 package org.apache.druid.security.kerberos;
 
 import com.google.common.base.Strings;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.java.util.common.ISE;
+import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.java.util.common.logger.Logger;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
@@ -47,8 +47,6 @@ public class DruidKerberosUtil
 {
   private static final Logger log = new Logger(DruidKerberosUtil.class);
 
-  private static final Base64 base64codec = new Base64(0);
-
   // A fair reentrant lock
   private static ReentrantLock kerberosLock = new ReentrantLock(true);
 
@@ -81,7 +79,7 @@ public class DruidKerberosUtil
       byte[] outToken = gssContext.initSecContext(inToken, 0, inToken.length);
       gssContext.dispose();
       // Base64 encoded and stringified token for server
-      return new String(base64codec.encode(outToken), 
StandardCharsets.US_ASCII);
+      return new String(StringUtils.encodeBase64(outToken), 
StandardCharsets.US_ASCII);
     }
     catch (GSSException | IllegalAccessException | NoSuchFieldException | 
ClassNotFoundException e) {
       throw new AuthenticationException(e);
diff --git 
a/extensions-core/druid-kerberos/src/main/java/org/apache/druid/security/kerberos/KerberosAuthenticator.java
 
b/extensions-core/druid-kerberos/src/main/java/org/apache/druid/security/kerberos/KerberosAuthenticator.java
index 07b27a6..1c71dde 100644
--- 
a/extensions-core/druid-kerberos/src/main/java/org/apache/druid/security/kerberos/KerberosAuthenticator.java
+++ 
b/extensions-core/druid-kerberos/src/main/java/org/apache/druid/security/kerberos/KerberosAuthenticator.java
@@ -26,7 +26,6 @@ import com.fasterxml.jackson.annotation.JsonTypeName;
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Throwables;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.guice.annotations.Self;
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.java.util.common.logger.Logger;
@@ -561,8 +560,7 @@ public class KerberosAuthenticator implements Authenticator
     } else {
       authorization = 
authorization.substring(org.apache.hadoop.security.authentication.client.KerberosAuthenticator.NEGOTIATE
                                                   .length()).trim();
-      final Base64 base64 = new Base64(0);
-      final byte[] clientToken = base64.decode(authorization);
+      final byte[] clientToken = StringUtils.decodeBase64String(authorization);
       try {
         DerInputStream ticketStream = new DerInputStream(clientToken);
         DerValue[] values = ticketStream.getSet(clientToken.length, true);
diff --git 
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramAggregatorFactory.java
 
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramAggregatorFactory.java
index 65c2a86..4c8c09a 100644
--- 
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramAggregatorFactory.java
+++ 
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramAggregatorFactory.java
@@ -24,7 +24,6 @@ import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeName;
 import com.google.common.base.Preconditions;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.query.aggregation.AggregateCombiner;
 import org.apache.druid.query.aggregation.Aggregator;
@@ -204,7 +203,7 @@ public class ApproximateHistogramAggregatorFactory extends 
AggregatorFactory
 
       return ah;
     } else if (object instanceof String) {
-      byte[] bytes = Base64.decodeBase64(StringUtils.toUtf8((String) object));
+      byte[] bytes = StringUtils.decodeBase64(StringUtils.toUtf8((String) 
object));
       final ApproximateHistogram ah = ApproximateHistogram.fromBytes(bytes);
       ah.setLowerLimit(lowerLimit);
       ah.setUpperLimit(upperLimit);
diff --git 
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java
 
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java
index 5ddafeb..c623948 100644
--- 
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java
+++ 
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogram.java
@@ -25,7 +25,6 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonValue;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.java.util.common.ISE;
 import org.apache.druid.java.util.common.StringUtils;
 
@@ -751,7 +750,7 @@ public class FixedBucketsHistogram
   public String toBase64()
   {
     byte[] asBytes = toBytes();
-    return StringUtils.fromUtf8(Base64.encodeBase64(asBytes));
+    return StringUtils.fromUtf8(StringUtils.encodeBase64(asBytes));
   }
 
   /**
@@ -902,7 +901,7 @@ public class FixedBucketsHistogram
    */
   public static FixedBucketsHistogram fromBase64(String encodedHistogram)
   {
-    byte[] asBytes = 
Base64.decodeBase64(encodedHistogram.getBytes(StandardCharsets.UTF_8));
+    byte[] asBytes = 
StringUtils.decodeBase64(encodedHistogram.getBytes(StandardCharsets.UTF_8));
     return fromBytes(asBytes);
   }
 
diff --git 
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogramAggregatorFactory.java
 
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogramAggregatorFactory.java
index 0dca0c6..de30747 100644
--- 
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogramAggregatorFactory.java
+++ 
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/FixedBucketsHistogramAggregatorFactory.java
@@ -22,7 +22,6 @@ package org.apache.druid.query.aggregation.histogram;
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeName;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.query.aggregation.AggregateCombiner;
 import org.apache.druid.query.aggregation.Aggregator;
@@ -205,7 +204,7 @@ public class FixedBucketsHistogramAggregatorFactory extends 
AggregatorFactory
   public Object deserialize(Object object)
   {
     if (object instanceof String) {
-      byte[] bytes = Base64.decodeBase64(StringUtils.toUtf8((String) object));
+      byte[] bytes = StringUtils.decodeBase64(StringUtils.toUtf8((String) 
object));
       final FixedBucketsHistogram fbh = FixedBucketsHistogram.fromBytes(bytes);
       return fbh;
     } else {
diff --git 
a/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceAggregatorFactory.java
 
b/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceAggregatorFactory.java
index d94385b..d7e9d95 100644
--- 
a/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceAggregatorFactory.java
+++ 
b/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceAggregatorFactory.java
@@ -23,7 +23,6 @@ import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeName;
 import com.google.common.base.Preconditions;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.java.util.common.IAE;
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.query.aggregation.AggregateCombiner;
@@ -218,7 +217,7 @@ public class VarianceAggregatorFactory extends 
AggregatorFactory
       return VarianceAggregatorCollector.from((ByteBuffer) object);
     } else if (object instanceof String) {
       return VarianceAggregatorCollector.from(
-          ByteBuffer.wrap(Base64.decodeBase64(StringUtils.toUtf8((String) 
object)))
+          ByteBuffer.wrap(StringUtils.decodeBase64(StringUtils.toUtf8((String) 
object)))
       );
     }
     return object;
diff --git 
a/hll/src/test/java/org/apache/druid/hll/HyperLogLogCollectorTest.java 
b/hll/src/test/java/org/apache/druid/hll/HyperLogLogCollectorTest.java
index 64c1915..ffcbd988 100644
--- a/hll/src/test/java/org/apache/druid/hll/HyperLogLogCollectorTest.java
+++ b/hll/src/test/java/org/apache/druid/hll/HyperLogLogCollectorTest.java
@@ -23,7 +23,6 @@ import com.google.common.collect.Collections2;
 import com.google.common.collect.Lists;
 import com.google.common.hash.HashFunction;
 import com.google.common.hash.Hashing;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.java.util.common.logger.Logger;
 import org.junit.Assert;
@@ -762,7 +761,7 @@ public class HyperLogLogCollectorTest
 
     List<HyperLogLogCollector> collectors = Lists.transform(
         objects,
-        s -> 
HyperLogLogCollector.makeCollector(ByteBuffer.wrap(Base64.decodeBase64(s)))
+        s -> 
HyperLogLogCollector.makeCollector(ByteBuffer.wrap(StringUtils.decodeBase64String(s)))
     );
 
     Collection<List<HyperLogLogCollector>> permutations = 
Collections2.permutations(collectors);
diff --git 
a/indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/ec2/GalaxyEC2UserData.java
 
b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/ec2/GalaxyEC2UserData.java
index bbb36b2..6ca47d6 100644
--- 
a/indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/ec2/GalaxyEC2UserData.java
+++ 
b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/ec2/GalaxyEC2UserData.java
@@ -24,8 +24,8 @@ import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Throwables;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.guice.annotations.Json;
+import org.apache.druid.java.util.common.StringUtils;
 
 /**
  */
@@ -78,7 +78,7 @@ public class GalaxyEC2UserData implements 
EC2UserData<GalaxyEC2UserData>
   public String getUserDataBase64()
   {
     try {
-      return Base64.encodeBase64String(jsonMapper.writeValueAsBytes(this));
+      return 
StringUtils.encodeBase64String(jsonMapper.writeValueAsBytes(this));
     }
     catch (Exception e) {
       throw Throwables.propagate(e);
diff --git 
a/indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/ec2/StringEC2UserData.java
 
b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/ec2/StringEC2UserData.java
index 8ee0a99..98241c2 100644
--- 
a/indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/ec2/StringEC2UserData.java
+++ 
b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/autoscaling/ec2/StringEC2UserData.java
@@ -21,7 +21,6 @@ package org.apache.druid.indexing.overlord.autoscaling.ec2;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.java.util.common.StringUtils;
 
 import javax.annotation.Nullable;
@@ -80,7 +79,7 @@ public class StringEC2UserData implements 
EC2UserData<StringEC2UserData>
     } else {
       finalData = data;
     }
-    return Base64.encodeBase64String(StringUtils.toUtf8(finalData));
+    return StringUtils.encodeBase64String(StringUtils.toUtf8(finalData));
   }
 
   @Override
diff --git 
a/indexing-service/src/test/java/org/apache/druid/indexing/overlord/autoscaling/EC2AutoScalerSerdeTest.java
 
b/indexing-service/src/test/java/org/apache/druid/indexing/overlord/autoscaling/EC2AutoScalerSerdeTest.java
index d5e2a64..f49d6dc 100644
--- 
a/indexing-service/src/test/java/org/apache/druid/indexing/overlord/autoscaling/EC2AutoScalerSerdeTest.java
+++ 
b/indexing-service/src/test/java/org/apache/druid/indexing/overlord/autoscaling/EC2AutoScalerSerdeTest.java
@@ -23,7 +23,6 @@ import com.fasterxml.jackson.databind.BeanProperty;
 import com.fasterxml.jackson.databind.DeserializationContext;
 import com.fasterxml.jackson.databind.InjectableValues;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.io.BaseEncoding;
 import org.apache.druid.indexing.overlord.autoscaling.ec2.EC2AutoScaler;
 import org.apache.druid.jackson.DefaultObjectMapper;
 import org.apache.druid.java.util.common.StringUtils;
@@ -128,8 +127,8 @@ public class EC2AutoScalerSerdeTest
     Assert.assertEquals(
         "VERSION=1234\n",
         StringUtils.fromUtf8(
-            BaseEncoding.base64()
-                        
.decode(autoScaler.getEnvConfig().getUserData().withVersion("1234").getUserDataBase64())
+            StringUtils
+                
.decodeBase64String(autoScaler.getEnvConfig().getUserData().withVersion("1234").getUserDataBase64())
         )
     );
   }
diff --git 
a/processing/src/main/java/org/apache/druid/query/aggregation/HistogramAggregatorFactory.java
 
b/processing/src/main/java/org/apache/druid/query/aggregation/HistogramAggregatorFactory.java
index 5a1e6dd..9ca499e 100644
--- 
a/processing/src/main/java/org/apache/druid/query/aggregation/HistogramAggregatorFactory.java
+++ 
b/processing/src/main/java/org/apache/druid/query/aggregation/HistogramAggregatorFactory.java
@@ -22,7 +22,6 @@ package org.apache.druid.query.aggregation;
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.base.Preconditions;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.segment.ColumnSelectorFactory;
 import org.apache.druid.segment.ColumnValueSelector;
@@ -149,7 +148,7 @@ public class HistogramAggregatorFactory extends 
AggregatorFactory
     } else if (object instanceof ByteBuffer) {
       return Histogram.fromBytes((ByteBuffer) object);
     } else if (object instanceof String) {
-      byte[] bytes = Base64.decodeBase64(StringUtils.toUtf8((String) object));
+      byte[] bytes = StringUtils.decodeBase64(StringUtils.toUtf8((String) 
object));
       return Histogram.fromBytes(bytes);
     }
     return object;
diff --git 
a/processing/src/main/java/org/apache/druid/query/aggregation/cardinality/CardinalityAggregatorFactory.java
 
b/processing/src/main/java/org/apache/druid/query/aggregation/cardinality/CardinalityAggregatorFactory.java
index fc9afe6..4647c40 100644
--- 
a/processing/src/main/java/org/apache/druid/query/aggregation/cardinality/CardinalityAggregatorFactory.java
+++ 
b/processing/src/main/java/org/apache/druid/query/aggregation/cardinality/CardinalityAggregatorFactory.java
@@ -25,7 +25,6 @@ import com.google.common.base.Function;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.hll.HyperLogLogCollector;
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.query.ColumnSelectorPlus;
@@ -227,7 +226,7 @@ public class CardinalityAggregatorFactory extends 
AggregatorFactory
       // Be conservative, don't assume we own this buffer.
       buffer = ((ByteBuffer) object).duplicate();
     } else if (object instanceof String) {
-      buffer = ByteBuffer.wrap(Base64.decodeBase64(StringUtils.toUtf8((String) 
object)));
+      buffer = 
ByteBuffer.wrap(StringUtils.decodeBase64(StringUtils.toUtf8((String) object)));
     } else {
       return object;
     }
diff --git 
a/processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/HyperUniquesAggregatorFactory.java
 
b/processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/HyperUniquesAggregatorFactory.java
index 05a0818..e2427a6 100644
--- 
a/processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/HyperUniquesAggregatorFactory.java
+++ 
b/processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/HyperUniquesAggregatorFactory.java
@@ -21,7 +21,6 @@ package org.apache.druid.query.aggregation.hyperloglog;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.hll.HyperLogLogCollector;
 import org.apache.druid.java.util.common.IAE;
 import org.apache.druid.java.util.common.StringUtils;
@@ -185,7 +184,7 @@ public class HyperUniquesAggregatorFactory extends 
AggregatorFactory
       // Be conservative, don't assume we own this buffer.
       buffer = ((ByteBuffer) object).duplicate();
     } else if (object instanceof String) {
-      buffer = ByteBuffer.wrap(Base64.decodeBase64(StringUtils.toUtf8((String) 
object)));
+      buffer = 
ByteBuffer.wrap(StringUtils.decodeBase64(StringUtils.toUtf8((String) object)));
     } else {
       return object;
     }
diff --git 
a/processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/PreComputedHyperUniquesSerde.java
 
b/processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/PreComputedHyperUniquesSerde.java
index 3eb0710..5411724 100644
--- 
a/processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/PreComputedHyperUniquesSerde.java
+++ 
b/processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/PreComputedHyperUniquesSerde.java
@@ -19,11 +19,11 @@
 
 package org.apache.druid.query.aggregation.hyperloglog;
 
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.data.input.InputRow;
 import org.apache.druid.hll.HyperLogLogCollector;
 import org.apache.druid.hll.HyperLogLogHash;
 import org.apache.druid.java.util.common.ISE;
+import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.segment.serde.ComplexMetricExtractor;
 
 import java.nio.ByteBuffer;
@@ -59,7 +59,7 @@ public class PreComputedHyperUniquesSerde extends 
HyperUniquesSerde
           return 
HyperLogLogCollector.makeLatestCollector().fold(ByteBuffer.wrap((byte[]) 
rawValue));
         } else if (rawValue instanceof String) {
           return HyperLogLogCollector.makeLatestCollector()
-                                     
.fold(ByteBuffer.wrap(Base64.decodeBase64((String) rawValue)));
+                                     
.fold(ByteBuffer.wrap(StringUtils.decodeBase64String((String) rawValue)));
         }
 
         throw new ISE("Object is not of a type[%s] that can be deserialized to 
HyperLogLog.", rawValue.getClass());
diff --git 
a/server/src/main/java/org/apache/druid/client/CachingClusteredClient.java 
b/server/src/main/java/org/apache/druid/client/CachingClusteredClient.java
index b826697..253aa0f 100644
--- a/server/src/main/java/org/apache/druid/client/CachingClusteredClient.java
+++ b/server/src/main/java/org/apache/druid/client/CachingClusteredClient.java
@@ -31,7 +31,6 @@ import com.google.common.collect.RangeSet;
 import com.google.common.hash.Hasher;
 import com.google.common.hash.Hashing;
 import com.google.inject.Inject;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.druid.client.cache.Cache;
 import org.apache.druid.client.cache.CacheConfig;
 import org.apache.druid.client.cache.CachePopulator;
@@ -391,7 +390,7 @@ public class CachingClusteredClient implements 
QuerySegmentWalker
       if (hasOnlyHistoricalSegments) {
         hasher.putBytes(queryCacheKey == null ? 
strategy.computeCacheKey(query) : queryCacheKey);
 
-        String currEtag = Base64.encodeBase64String(hasher.hash().asBytes());
+        String currEtag = 
StringUtils.encodeBase64String(hasher.hash().asBytes());
         responseContext.put(QueryResource.HEADER_ETAG, currEtag);
         return currEtag;
       } else {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to