This is an automated email from the ASF dual-hosted git repository.
bslim 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 8f3fe9c Prohibit String.replace() and String.replaceAll(), fix and
prohibit some toString()-related redundancies (#6607)
8f3fe9c is described below
commit 8f3fe9cd028592b4b1449c2a5e6dba482bed0549
Author: Roman Leventov <[email protected]>
AuthorDate: Thu Nov 15 22:21:34 2018 +0100
Prohibit String.replace() and String.replaceAll(), fix and prohibit some
toString()-related redundancies (#6607)
* Prohibit String.replace() and String.replaceAll(), fix and prohibit some
toString()-related redundancies
* Fix bug
* Replace checkstyle regexp with IntelliJ inspection
---
.idea/inspectionProfiles/Druid.xml | 8 ++
.../DimensionPredicateFilterBenchmark.java | 2 +-
.../FloatCompressionBenchmarkFileGenerator.java | 2 +-
.../LongCompressionBenchmarkFileGenerator.java | 2 +-
.../benchmark/BenchmarkDataGeneratorTest.java | 2 +-
codestyle/druid-forbidden-apis.txt | 5 ++
.../apache/druid/java/util/common/StringUtils.java | 89 +++++++++++++++++-----
.../util/common/granularity/PeriodGranularity.java | 6 +-
.../util/emitter/core/ParametrizedUriEmitter.java | 3 +-
.../emitter/core/ParametrizedUriExtractor.java | 2 +-
.../main/java/org/apache/druid/math/expr/Expr.java | 4 +-
.../java/org/apache/druid/math/expr/Function.java | 8 +-
.../apache/druid/common/utils/UUIDUtilsTest.java | 3 +-
.../druid/java/util/common/StringUtilsTest.java | 25 +++++-
.../emitter/core/ParametrizedUriEmitterTest.java | 2 +-
.../java/util/http/client/FriendlyServersTest.java | 2 +-
.../java/util/http/client/JankyServersTest.java | 2 +-
.../druid/java/util/metrics/cgroups/TestUtils.java | 6 +-
.../examples/wikipedia/WikipediaIrcDecoder.java | 32 ++++----
.../storage/azure/AzureDataSegmentPusher.java | 2 +-
.../storage/azure/AzureDataSegmentPusherTest.java | 3 +-
.../druid/storage/cloudfiles/CloudFilesUtils.java | 2 +-
.../storage/google/GoogleDataSegmentKiller.java | 2 +-
.../druid/storage/google/GoogleTaskLogs.java | 4 +-
.../apache/druid/storage/google/GoogleUtils.java | 6 +-
.../google/GoogleDataSegmentKillerTest.java | 2 +-
.../druid/emitter/graphite/GraphiteEmitter.java | 2 +-
.../druid/data/input/influx/InfluxParser.java | 9 ++-
.../materializedview/MaterializedViewQuery.java | 4 +-
.../druid/emitter/opentsdb/EventConverter.java | 10 +--
.../data/input/orc/OrcHadoopInputRowParser.java | 12 ++-
.../apache/druid/emitter/statsd/StatsDEmitter.java | 17 +++--
.../data/input/AvroStreamInputRowParserTest.java | 19 +++--
.../hll/HllSketchAggregatorFactory.java | 16 ++--
.../theta/SketchEstimateWithErrorBounds.java | 10 +--
.../apache/druid/query/filter/BloomKFilter.java | 2 +-
.../druid/storage/hdfs/HdfsDataSegmentFinder.java | 2 +-
.../druid/storage/hdfs/HdfsDataSegmentPusher.java | 2 +-
.../druid/storage/hdfs/tasklog/HdfsTaskLogs.java | 4 +-
.../segment/loading/HdfsDataSegmentFinderTest.java | 4 +-
.../storage/hdfs/HdfsDataSegmentPullerTest.java | 6 +-
.../storage/hdfs/HdfsDataSegmentPusherTest.java | 6 +-
.../query/lookup/KafkaLookupExtractorFactory.java | 2 +-
.../lookup/namespace/UriCacheGeneratorTest.java | 3 +-
.../lookup/cache/loading/OffHeapLoadingCache.java | 2 +-
.../metadata/storage/mysql/MySQLConnector.java | 2 +-
.../input/protobuf/ProtobufInputRowParser.java | 2 +-
.../druid/firehose/s3/StaticS3FirehoseFactory.java | 4 +-
.../java/org/apache/druid/storage/s3/S3Utils.java | 6 +-
.../druid/storage/s3/S3DataSegmentPusherTest.java | 3 +-
.../druid/indexer/HadoopDruidIndexerConfig.java | 7 +-
.../java/org/apache/druid/indexer/JobHelper.java | 6 +-
.../main/java/org/apache/druid/indexer/Utils.java | 6 +-
.../druid/indexer/updater/HadoopConverterJob.java | 2 +-
.../java/org/apache/druid/indexer/UtilsTest.java | 2 +-
.../autoscaling/ec2/StringEC2UserData.java | 24 +++---
.../indexing/overlord/http/OverlordResource.java | 2 +-
.../indexing/common/task/MergeTaskBaseTest.java | 2 +-
.../OverlordSecurityResourceFilterTest.java | 4 +-
.../clients/CoordinatorResourceTestClient.java | 3 +-
.../druid/tests/hadoop/ITHadoopIndexTest.java | 3 +-
.../indexer/AbstractITRealtimeIndexTaskTest.java | 24 +++---
.../ITAppenderatorDriverRealtimeIndexTaskTest.java | 3 +-
.../druid/tests/indexer/ITCompactionTaskTest.java | 4 +-
.../tests/indexer/ITKafkaIndexingServiceTest.java | 28 +++----
.../apache/druid/tests/indexer/ITKafkaTest.java | 36 ++++-----
.../tests/indexer/ITRealtimeIndexTaskTest.java | 3 +-
.../druid/tests/indexer/ITUnionQueryTest.java | 6 +-
pom.xml | 2 +-
.../collections/bitmap/WrappedConciseBitmap.java | 2 +-
.../bitmap/WrappedImmutableConciseBitmap.java | 2 +-
.../bitmap/WrappedImmutableRoaringBitmap.java | 2 +-
.../collections/bitmap/WrappedRoaringBitmap.java | 2 +-
.../query/extraction/CascadeExtractionFn.java | 3 +-
.../monomorphicprocessing/StringRuntimeShape.java | 2 +-
.../query/search/BySegmentSearchResultValue.java | 2 +-
.../druid/query/topn/BySegmentTopNResultValue.java | 2 +-
.../druid/collections/bitmap/BitmapBenchmark.java | 4 +-
.../druid/segment/filter/BaseFilterTest.java | 8 +-
.../client/coordinator/CoordinatorClient.java | 2 +-
.../curator/discovery/CuratorServiceUtils.java | 2 +-
.../segment/loading/LocalDataSegmentPusher.java | 2 +-
.../firehose/EventReceiverFirehoseFactory.java | 5 +-
.../segment/realtime/plumber/RealtimePlumber.java | 11 ++-
.../druid/server/coordination/ServerType.java | 4 +-
.../druid/server/http/DatasourcesResource.java | 6 +-
.../druid/server/http/IntervalsResource.java | 2 +-
.../druid/server/metrics/MonitorsConfig.java | 9 ++-
.../org/apache/druid/curator/CuratorTestBase.java | 2 +-
.../curator/discovery/ServiceAnnouncerTest.java | 2 +-
.../apache/druid/metadata/TestDerbyConnector.java | 2 +-
.../loading/LocalDataSegmentPusherTest.java | 7 +-
.../server/AsyncQueryForwardingServletTest.java | 7 +-
.../druid/server/http/DatasourcesResourceTest.java | 2 +-
.../http/security/SecurityResourceFilterTest.java | 5 +-
.../druid/server/log/FileRequestLoggerTest.java | 2 +-
.../org/apache/druid/cli/convert/PrefixRename.java | 69 -----------------
.../apache/druid/sql/avatica/AvaticaMonitor.java | 3 +-
.../apache/druid/sql/calcite/planner/Calcites.java | 15 +++-
.../druid/sql/calcite/schema/SystemSchema.java | 2 +-
.../sql/calcite/expression/ExpressionsTest.java | 4 +-
101 files changed, 399 insertions(+), 337 deletions(-)
diff --git a/.idea/inspectionProfiles/Druid.xml
b/.idea/inspectionProfiles/Druid.xml
index 4ada214..97f079f 100644
--- a/.idea/inspectionProfiles/Druid.xml
+++ b/.idea/inspectionProfiles/Druid.xml
@@ -62,6 +62,7 @@
<inspection_tool class="ForLoopThatDoesntUseLoopVariable" enabled="true"
level="ERROR" enabled_by_default="true" />
<inspection_tool class="HashCodeUsesNonFinalVariable" enabled="true"
level="WARNING" enabled_by_default="true" />
<inspection_tool class="ImplicitArrayToString" enabled="true"
level="ERROR" enabled_by_default="true" />
+ <inspection_tool class="IndexOfReplaceableByContains" enabled="true"
level="ERROR" enabled_by_default="true" />
<inspection_tool class="InfiniteRecursion" enabled="true" level="ERROR"
enabled_by_default="true" />
<inspection_tool class="InjectedReferences" enabled="true" level="WARNING"
enabled_by_default="true" />
<inspection_tool class="InnerClassReferencedViaSubclass" enabled="true"
level="ERROR" enabled_by_default="true" />
@@ -71,6 +72,8 @@
<inspection_tool class="IteratorHasNextCallsIteratorNext" enabled="true"
level="ERROR" enabled_by_default="true" />
<inspection_tool class="IteratorNextDoesNotThrowNoSuchElementException"
enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="JsonStandardCompliance" enabled="true"
level="WARNING" enabled_by_default="true" />
+ <inspection_tool class="LengthOneStringInIndexOf" enabled="true"
level="ERROR" enabled_by_default="true" />
+ <inspection_tool class="ListIndexOfReplaceableByContains" enabled="true"
level="ERROR" enabled_by_default="true" />
<inspection_tool class="MalformedFormatString" enabled="true"
level="ERROR" enabled_by_default="true">
<option name="additionalClasses"
value="org.apache.druid.java.util.common.StringUtils,org.apache.druid.java.util.common.logger.Logger"
/>
<option name="additionalMethods"
value="trace,debug,info,warn,error,wtf,format,nonStrictFormat" />
@@ -112,10 +115,13 @@
<inspection_tool class="ObjectEqualsNull" enabled="true" level="ERROR"
enabled_by_default="true" />
<inspection_tool class="ObjectToString" enabled="true" level="ERROR"
enabled_by_default="true" />
<inspection_tool class="OverwrittenKey" enabled="true" level="ERROR"
enabled_by_default="true" />
+ <inspection_tool class="PointlessIndexOfComparison" enabled="true"
level="ERROR" enabled_by_default="true" />
<inspection_tool class="PrimitiveArrayArgumentToVariableArgMethod"
enabled="true" level="ERROR" enabled_by_default="true" />
+ <inspection_tool class="RedundantStringOperation" enabled="true"
level="ERROR" enabled_by_default="true" />
<inspection_tool class="RedundantThrows" enabled="true" level="ERROR"
enabled_by_default="true" />
<inspection_tool class="RedundantTypeArguments" enabled="true"
level="ERROR" enabled_by_default="true" />
<inspection_tool class="ReflectionForUnavailableAnnotation" enabled="true"
level="ERROR" enabled_by_default="true" />
+ <inspection_tool class="RemoveToStringInStringTemplate" enabled="true"
level="WARNING" enabled_by_default="true" />
<inspection_tool class="ReplaceAllDot" enabled="true" level="ERROR"
enabled_by_default="true" />
<inspection_tool class="ResultOfObjectAllocationIgnored" enabled="true"
level="WARNING" enabled_by_default="true">
<scope name="Production" level="ERROR" enabled="true" />
@@ -251,6 +257,7 @@
<inspection_tool class="ToArrayCallWithZeroLengthArrayArgument"
enabled="true" level="WARNING" enabled_by_default="true">
<option name="myMode" value="BY_LEVEL" />
</inspection_tool>
+ <inspection_tool class="UnnecessaryCallToStringValueOf" enabled="true"
level="ERROR" enabled_by_default="true" />
<inspection_tool class="UnnecessaryEnumModifier" enabled="true"
level="ERROR" enabled_by_default="true" />
<inspection_tool class="UnnecessaryFullyQualifiedName" enabled="true"
level="WARNING" enabled_by_default="true">
<scope name="NonGeneratedFiles" level="ERROR" enabled="true">
@@ -261,6 +268,7 @@
<option name="ignoreInModuleStatements" value="true" />
</inspection_tool>
<inspection_tool class="UnnecessaryInterfaceModifier" enabled="true"
level="ERROR" enabled_by_default="true" />
+ <inspection_tool class="UnnecessaryToStringCall" enabled="true"
level="ERROR" enabled_by_default="true" />
<inspection_tool class="UnusedAssignment" enabled="true" level="ERROR"
enabled_by_default="true">
<option name="REPORT_PREFIX_EXPRESSIONS" value="true" />
<option name="REPORT_POSTFIX_EXPRESSIONS" value="true" />
diff --git
a/benchmarks/src/main/java/org/apache/druid/benchmark/DimensionPredicateFilterBenchmark.java
b/benchmarks/src/main/java/org/apache/druid/benchmark/DimensionPredicateFilterBenchmark.java
index fc9c969..6f7a2bb 100644
---
a/benchmarks/src/main/java/org/apache/druid/benchmark/DimensionPredicateFilterBenchmark.java
+++
b/benchmarks/src/main/java/org/apache/druid/benchmark/DimensionPredicateFilterBenchmark.java
@@ -79,7 +79,7 @@ public class DimensionPredicateFilterBenchmark
if (input == null) {
return false;
}
- return Integer.parseInt(input.toString()) % 2 == 0;
+ return Integer.parseInt(input) % 2 == 0;
}
};
}
diff --git
a/benchmarks/src/main/java/org/apache/druid/benchmark/FloatCompressionBenchmarkFileGenerator.java
b/benchmarks/src/main/java/org/apache/druid/benchmark/FloatCompressionBenchmarkFileGenerator.java
index 68c92f9..eacbc16 100644
---
a/benchmarks/src/main/java/org/apache/druid/benchmark/FloatCompressionBenchmarkFileGenerator.java
+++
b/benchmarks/src/main/java/org/apache/druid/benchmark/FloatCompressionBenchmarkFileGenerator.java
@@ -139,7 +139,7 @@ public class FloatCompressionBenchmarkFileGenerator
// create compressed files using all combinations of CompressionStrategy
and FloatEncoding provided
for (Map.Entry<String, BenchmarkColumnValueGenerator> entry :
generators.entrySet()) {
for (CompressionStrategy compression : compressions) {
- String name = entry.getKey() + "-" + compression.toString();
+ String name = entry.getKey() + "-" + compression;
log.info("%s: ", name);
File compFile = new File(dir, name);
compFile.delete();
diff --git
a/benchmarks/src/main/java/org/apache/druid/benchmark/LongCompressionBenchmarkFileGenerator.java
b/benchmarks/src/main/java/org/apache/druid/benchmark/LongCompressionBenchmarkFileGenerator.java
index 6a71ddc..68e3ae7 100644
---
a/benchmarks/src/main/java/org/apache/druid/benchmark/LongCompressionBenchmarkFileGenerator.java
+++
b/benchmarks/src/main/java/org/apache/druid/benchmark/LongCompressionBenchmarkFileGenerator.java
@@ -132,7 +132,7 @@ public class LongCompressionBenchmarkFileGenerator
for (Map.Entry<String, BenchmarkColumnValueGenerator> entry :
generators.entrySet()) {
for (CompressionStrategy compression : compressions) {
for (CompressionFactory.LongEncodingStrategy encoding : encodings) {
- String name = entry.getKey() + "-" + compression.toString() + "-" +
encoding.toString();
+ String name = entry.getKey() + "-" + compression + "-" + encoding;
log.info("%s: ", name);
File compFile = new File(dir, name);
compFile.delete();
diff --git
a/benchmarks/src/test/java/org/apache/druid/benchmark/BenchmarkDataGeneratorTest.java
b/benchmarks/src/test/java/org/apache/druid/benchmark/BenchmarkDataGeneratorTest.java
index a1ed394..035e330 100644
---
a/benchmarks/src/test/java/org/apache/druid/benchmark/BenchmarkDataGeneratorTest.java
+++
b/benchmarks/src/test/java/org/apache/druid/benchmark/BenchmarkDataGeneratorTest.java
@@ -443,7 +443,7 @@ public class BenchmarkDataGeneratorTest
Collections.sort(valList);
for (Comparable val : valList) {
- System.out.println(" VAL: " + val.toString() + " CNT: " +
valueMap.get(val));
+ System.out.println(" VAL: " + val + " CNT: " + valueMap.get(val));
}
System.out.println();
}
diff --git a/codestyle/druid-forbidden-apis.txt
b/codestyle/druid-forbidden-apis.txt
index eaa0673..be5c40f 100644
--- a/codestyle/druid-forbidden-apis.txt
+++ b/codestyle/druid-forbidden-apis.txt
@@ -22,6 +22,11 @@ com.google.common.collect.Sets#newTreeSet() @ Create
java.util.TreeSet directly
com.google.common.collect.Sets#newTreeSet(java.util.Comparator) @ Create
java.util.TreeSet directly
com.google.common.util.concurrent.Futures#transform(com.google.common.util.concurrent.ListenableFuture,
com.google.common.util.concurrent.AsyncFunction) @ Use
org.apache.druid.java.util.common.concurrent.ListenableFutures#transformAsync
java.io.File#toURL() @ Use java.io.File#toURI() and java.net.URI#toURL()
instead
+java.lang.String#matches(java.lang.String) @ Use startsWith(), endsWith(),
contains(), or compile and cache a Pattern explicitly
+java.lang.String#replace(java.lang.CharSequence,java.lang.CharSequence) @ Use
one of the appropriate methods in StringUtils instead
+java.lang.String#replaceAll(java.lang.String,java.lang.String) @ Use one of
the appropriate methods in StringUtils instead, or compile and cache a Pattern
explicitly
+java.lang.String#replaceFirst(java.lang.String,java.lang.String) @ Use
String.indexOf() and substring methods, or compile and cache a Pattern
explicitly
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.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
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 e402099..85f71d8 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
@@ -153,16 +153,6 @@ public class StringUtils
return s.toUpperCase(Locale.ENGLISH);
}
- public static String removeChar(String s, char c)
- {
- for (int i = 0; i < s.length(); i++) {
- if (s.charAt(i) == c) {
- return removeChar(s, c, i);
- }
- }
- return s;
- }
-
public static String urlEncode(String s)
{
try {
@@ -173,16 +163,81 @@ public class StringUtils
}
}
- private static String removeChar(String s, char c, int firstOccurranceIndex)
+ /**
+ * Removes all occurrences of the given char from the given string. This
method is an optimal version of
+ * {@link String#replace(CharSequence, CharSequence) s.replace("c", "")}.
+ */
+ public static String removeChar(String s, char c)
{
+ int pos = s.indexOf(c);
+ if (pos < 0) {
+ return s;
+ }
StringBuilder sb = new StringBuilder(s.length() - 1);
- sb.append(s, 0, firstOccurranceIndex);
- for (int i = firstOccurranceIndex + 1; i < s.length(); i++) {
- char charOfString = s.charAt(i);
- if (charOfString != c) {
- sb.append(charOfString);
- }
+ int prevPos = 0;
+ do {
+ sb.append(s, prevPos, pos);
+ prevPos = pos + 1;
+ pos = s.indexOf(c, pos + 1);
+ } while (pos > 0);
+ sb.append(s, prevPos, s.length());
+ return sb.toString();
+ }
+
+ /**
+ * Replaces all occurrences of the given char in the given string with the
given replacement string. This method is an
+ * optimal version of {@link String#replace(CharSequence, CharSequence)
s.replace("c", replacement)}.
+ */
+ public static String replaceChar(String s, char c, String replacement)
+ {
+ int pos = s.indexOf(c);
+ if (pos < 0) {
+ return s;
+ }
+ StringBuilder sb = new StringBuilder(s.length() - 1 +
replacement.length());
+ int prevPos = 0;
+ do {
+ sb.append(s, prevPos, pos);
+ sb.append(replacement);
+ prevPos = pos + 1;
+ pos = s.indexOf(c, pos + 1);
+ } while (pos > 0);
+ sb.append(s, prevPos, s.length());
+ return sb.toString();
+ }
+
+ /**
+ * Replaces all occurrences of the given target substring in the given
string with the given replacement string. This
+ * method is an optimal version of {@link String#replace(CharSequence,
CharSequence) s.replace(target, replacement)}.
+ */
+ public static String replace(String s, String target, String replacement)
+ {
+ // String.replace() is suboptimal in JDK8, but is fixed in JDK9+. When the
minimal JDK version supported by Druid is
+ // JDK9+, the implementation of this method should be replaced with simple
delegation to String.replace(). However,
+ // the method should still be prohibited to use in all other places except
this method body, because it's easy to
+ // suboptimally call String.replace("a", "b"), String.replace("a", ""),
String.replace("a", "abc"), which have
+ // better alternatives String.replace('a', 'b'), removeChar() and
replaceChar() respectively.
+ int pos = s.indexOf(target);
+ if (pos < 0) {
+ return s;
}
+ int sLength = s.length();
+ int targetLength = target.length();
+ // This is needed to work correctly with empty target string and mimic
String.replace() behavior
+ int searchSkip = Math.max(targetLength, 1);
+ StringBuilder sb = new StringBuilder(sLength - targetLength +
replacement.length());
+ int prevPos = 0;
+ do {
+ sb.append(s, prevPos, pos);
+ sb.append(replacement);
+ prevPos = pos + targetLength;
+ // Break from the loop if the target is empty
+ if (pos == sLength) {
+ break;
+ }
+ pos = s.indexOf(target, pos + searchSkip);
+ } while (pos > 0);
+ sb.append(s, prevPos, sLength);
return sb.toString();
}
diff --git
a/core/src/main/java/org/apache/druid/java/util/common/granularity/PeriodGranularity.java
b/core/src/main/java/org/apache/druid/java/util/common/granularity/PeriodGranularity.java
index e8f88da..a88d530 100644
---
a/core/src/main/java/org/apache/druid/java/util/common/granularity/PeriodGranularity.java
+++
b/core/src/main/java/org/apache/druid/java/util/common/granularity/PeriodGranularity.java
@@ -139,8 +139,7 @@ public class PeriodGranularity extends Granularity
implements JsonSerializable
@Override
public byte[] getCacheKey()
{
- return StringUtils.toUtf8(getPeriod().toString() + ":" +
- getTimeZone().toString() + ":" + getOrigin());
+ return StringUtils.toUtf8(getPeriod() + ":" + getTimeZone() + ":" +
getOrigin());
}
@Override
@@ -420,8 +419,7 @@ public class PeriodGranularity extends Granularity
implements JsonSerializable
return t - offset;
} else {
throw new UnsupportedOperationException(
- "Period cannot be converted to milliseconds as some fields mays vary
in length with chronology "
- + chronology.toString()
+ "Period cannot be converted to milliseconds as some fields mays vary
in length with chronology " + chronology
);
}
}
diff --git
a/core/src/main/java/org/apache/druid/java/util/emitter/core/ParametrizedUriEmitter.java
b/core/src/main/java/org/apache/druid/java/util/emitter/core/ParametrizedUriEmitter.java
index bcdf887..2588b32 100644
---
a/core/src/main/java/org/apache/druid/java/util/emitter/core/ParametrizedUriEmitter.java
+++
b/core/src/main/java/org/apache/druid/java/util/emitter/core/ParametrizedUriEmitter.java
@@ -22,6 +22,7 @@ package org.apache.druid.java.util.emitter.core;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableSet;
+import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.lifecycle.Lifecycle;
import org.apache.druid.java.util.common.lifecycle.LifecycleStart;
import org.apache.druid.java.util.common.lifecycle.LifecycleStop;
@@ -48,7 +49,7 @@ public class ParametrizedUriEmitter implements Flushable,
Closeable, Emitter
final ParametrizedUriExtractor parametrizedUriExtractor = new
ParametrizedUriExtractor(baseUri);
UriExtractor uriExtractor = parametrizedUriExtractor;
if (ONLY_FEED_PARAM.equals(parametrizedUriExtractor.getParams())) {
- uriExtractor = new FeedUriExtractor(baseUri.replace("{feed}", "%s"));
+ uriExtractor = new FeedUriExtractor(StringUtils.replace(baseUri,
"{feed}", "%s"));
}
return uriExtractor;
}
diff --git
a/core/src/main/java/org/apache/druid/java/util/emitter/core/ParametrizedUriExtractor.java
b/core/src/main/java/org/apache/druid/java/util/emitter/core/ParametrizedUriExtractor.java
index 9dcde24..9bd7ebb 100644
---
a/core/src/main/java/org/apache/druid/java/util/emitter/core/ParametrizedUriExtractor.java
+++
b/core/src/main/java/org/apache/druid/java/util/emitter/core/ParametrizedUriExtractor.java
@@ -65,7 +65,7 @@ public class ParametrizedUriExtractor implements UriExtractor
eventMap
);
}
- processedUri = processedUri.replace(StringUtils.format("{%s}", key),
paramValue.toString());
+ processedUri = StringUtils.replace(processedUri,
StringUtils.format("{%s}", key), paramValue.toString());
}
return new URI(processedUri);
}
diff --git a/core/src/main/java/org/apache/druid/math/expr/Expr.java
b/core/src/main/java/org/apache/druid/math/expr/Expr.java
index fd45a65..cce15b6 100644
--- a/core/src/main/java/org/apache/druid/math/expr/Expr.java
+++ b/core/src/main/java/org/apache/druid/math/expr/Expr.java
@@ -294,7 +294,7 @@ class UnaryMinusExpr extends UnaryExpr
@Override
public String toString()
{
- return "-" + expr.toString();
+ return "-" + expr;
}
}
@@ -321,7 +321,7 @@ class UnaryNotExpr extends UnaryExpr
@Override
public String toString()
{
- return "!" + expr.toString();
+ return "!" + expr;
}
}
diff --git a/core/src/main/java/org/apache/druid/math/expr/Function.java
b/core/src/main/java/org/apache/druid/math/expr/Function.java
index 3521708..2424755 100644
--- a/core/src/main/java/org/apache/druid/math/expr/Function.java
+++ b/core/src/main/java/org/apache/druid/math/expr/Function.java
@@ -1033,14 +1033,12 @@ interface Function
}
final String arg = args.get(0).eval(bindings).asString();
- final String pattern = args.get(1).eval(bindings).asString();
- final String replacement = args.get(2).eval(bindings).asString();
+ final String pattern =
NullHandling.nullToEmptyIfNeeded(args.get(1).eval(bindings).asString());
+ final String replacement =
NullHandling.nullToEmptyIfNeeded(args.get(2).eval(bindings).asString());
if (arg == null) {
return ExprEval.of(NullHandling.defaultStringValue());
}
- return ExprEval.of(
- arg.replace(NullHandling.nullToEmptyIfNeeded(pattern),
NullHandling.nullToEmptyIfNeeded(replacement))
- );
+ return ExprEval.of(StringUtils.replace(arg, pattern, replacement));
}
}
diff --git
a/core/src/test/java/org/apache/druid/common/utils/UUIDUtilsTest.java
b/core/src/test/java/org/apache/druid/common/utils/UUIDUtilsTest.java
index 2a6c366..d822d22 100644
--- a/core/src/test/java/org/apache/druid/common/utils/UUIDUtilsTest.java
+++ b/core/src/test/java/org/apache/druid/common/utils/UUIDUtilsTest.java
@@ -24,6 +24,7 @@ import com.google.common.base.Joiner;
import com.google.common.base.Strings;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
+import org.apache.druid.java.util.common.StringUtils;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -102,7 +103,7 @@ public class UUIDUtilsTest
strings.add(uuidString.substring(16, 20));
strings.add(uuidString.substring(20, 32));
UUID uuid = UUID.fromString(Joiner.on('-').join(strings));
- Assert.assertEquals(uuid.toString().replace("-", ""), uuidString);
+ Assert.assertEquals(StringUtils.removeChar(uuid.toString(), '-'),
uuidString);
}
@Test
diff --git
a/core/src/test/java/org/apache/druid/java/util/common/StringUtilsTest.java
b/core/src/test/java/org/apache/druid/java/util/common/StringUtilsTest.java
index 87f7afa..53f4942 100644
--- a/core/src/test/java/org/apache/druid/java/util/common/StringUtilsTest.java
+++ b/core/src/test/java/org/apache/druid/java/util/common/StringUtilsTest.java
@@ -118,11 +118,34 @@ public class StringUtilsTest
}
@Test
- public void testRemoveCharacter()
+ public void testRemoveChar()
{
Assert.assertEquals("123", StringUtils.removeChar("123", ','));
Assert.assertEquals("123", StringUtils.removeChar("123,", ','));
Assert.assertEquals("123", StringUtils.removeChar(",1,,2,3,", ','));
Assert.assertEquals("", StringUtils.removeChar(",,", ','));
}
+
+ @Test
+ public void testReplaceChar()
+ {
+ Assert.assertEquals("123", StringUtils.replaceChar("123", ',', "x"));
+ Assert.assertEquals("12345", StringUtils.replaceChar("123,", ',', "45"));
+ Assert.assertEquals("", StringUtils.replaceChar("", 'a', "bb"));
+ Assert.assertEquals("bb", StringUtils.replaceChar("a", 'a', "bb"));
+ Assert.assertEquals("bbbb", StringUtils.replaceChar("aa", 'a', "bb"));
+ }
+
+ @Test
+ public void testReplace()
+ {
+ Assert.assertEquals("x1x2x3x", StringUtils.replace("123", "", "x"));
+ Assert.assertEquals("12345", StringUtils.replace("123,", ",", "45"));
+ Assert.assertEquals("", StringUtils.replace("", "a", "bb"));
+ Assert.assertEquals("bb", StringUtils.replace("a", "a", "bb"));
+ Assert.assertEquals("bba", StringUtils.replace("aaa", "aa", "bb"));
+ Assert.assertEquals("bcb", StringUtils.replace("aacaa", "aa", "b"));
+ Assert.assertEquals("bb", StringUtils.replace("aaaa", "aa", "b"));
+ Assert.assertEquals("", StringUtils.replace("aaaa", "aa", ""));
+ }
}
diff --git
a/core/src/test/java/org/apache/druid/java/util/emitter/core/ParametrizedUriEmitterTest.java
b/core/src/test/java/org/apache/druid/java/util/emitter/core/ParametrizedUriEmitterTest.java
index 64d0eed..40f79dd 100644
---
a/core/src/test/java/org/apache/druid/java/util/emitter/core/ParametrizedUriEmitterTest.java
+++
b/core/src/test/java/org/apache/druid/java/util/emitter/core/ParametrizedUriEmitterTest.java
@@ -137,7 +137,7 @@ public class ParametrizedUriEmitterTest
protected ListenableFuture<Response> go(Request request)
{
results.put(
- request.getUrl().toString(),
+ request.getUrl(),
StandardCharsets.UTF_8.decode(request.getByteBufferData().slice()).toString()
);
return GoHandlers.immediateFuture(okResponse());
diff --git
a/core/src/test/java/org/apache/druid/java/util/http/client/FriendlyServersTest.java
b/core/src/test/java/org/apache/druid/java/util/http/client/FriendlyServersTest.java
index 2a47033..bad0350 100644
---
a/core/src/test/java/org/apache/druid/java/util/http/client/FriendlyServersTest.java
+++
b/core/src/test/java/org/apache/druid/java/util/http/client/FriendlyServersTest.java
@@ -238,7 +238,7 @@ public class FriendlyServersTest
}
Assert.assertTrue("ChannelException thrown by 'get'", ea instanceof
ChannelException);
- Assert.assertTrue("Expected error message",
ea.getCause().getMessage().matches(".*Failed to handshake.*"));
+ Assert.assertTrue("Expected error message",
ea.getCause().getMessage().contains("Failed to handshake"));
}
{
diff --git
a/core/src/test/java/org/apache/druid/java/util/http/client/JankyServersTest.java
b/core/src/test/java/org/apache/druid/java/util/http/client/JankyServersTest.java
index 4172454..77ca8e3 100644
---
a/core/src/test/java/org/apache/druid/java/util/http/client/JankyServersTest.java
+++
b/core/src/test/java/org/apache/druid/java/util/http/client/JankyServersTest.java
@@ -298,7 +298,7 @@ public class JankyServersTest
public boolean isChannelClosedException(Throwable e)
{
return e instanceof ChannelException ||
- (e instanceof IOException && e.getMessage().matches(".*Connection
reset by peer.*"));
+ (e instanceof IOException && e.getMessage().contains("Connection
reset by peer"));
}
@Test
diff --git
a/core/src/test/java/org/apache/druid/java/util/metrics/cgroups/TestUtils.java
b/core/src/test/java/org/apache/druid/java/util/metrics/cgroups/TestUtils.java
index a69d30a..1ba0bb1 100644
---
a/core/src/test/java/org/apache/druid/java/util/metrics/cgroups/TestUtils.java
+++
b/core/src/test/java/org/apache/druid/java/util/metrics/cgroups/TestUtils.java
@@ -25,7 +25,6 @@ import org.junit.Assert;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
-import java.util.regex.Pattern;
public class TestUtils
{
@@ -41,10 +40,7 @@ public class TestUtils
final String procMountsString =
StringUtils.fromUtf8(Files.readAllBytes(procMountsTemplate.toPath()));
Files.write(
procMounts.toPath(),
- StringUtils.toUtf8(procMountsString.replaceAll(
- Pattern.quote("/sys/fs/cgroup"),
- cgroupDir.getAbsolutePath()
- ))
+ StringUtils.toUtf8(StringUtils.replace(procMountsString,
"/sys/fs/cgroup", cgroupDir.getAbsolutePath()))
);
Assert.assertTrue(new File(
diff --git
a/examples/src/main/java/org/apache/druid/examples/wikipedia/WikipediaIrcDecoder.java
b/examples/src/main/java/org/apache/druid/examples/wikipedia/WikipediaIrcDecoder.java
index bb90c28..edefc04 100644
---
a/examples/src/main/java/org/apache/druid/examples/wikipedia/WikipediaIrcDecoder.java
+++
b/examples/src/main/java/org/apache/druid/examples/wikipedia/WikipediaIrcDecoder.java
@@ -46,17 +46,16 @@ import java.util.zip.GZIPInputStream;
class WikipediaIrcDecoder implements IrcDecoder
{
- static final Logger log = new Logger(WikipediaIrcDecoder.class);
+ static final Logger LOG = new Logger(WikipediaIrcDecoder.class);
- final DatabaseReader geoLookup;
-
- static final Pattern pattern = Pattern.compile(
+ private static final Pattern PATTERN = Pattern.compile(
".*\\x0314\\[\\[\\x0307(.+?)\\x0314\\]\\]\\x034
(.*?)\\x0310.*\\x0302(http.+?)" +
"\\x03.+\\x0303(.+?)\\x03.+\\x03 (\\(([+-]\\d+)\\).*|.+)
\\x0310(.+)\\x03.*"
);
- static final Pattern ipPattern = Pattern.compile("\\d+.\\d+.\\d+.\\d+");
- static final Pattern shortnamePattern = Pattern.compile("#(\\w\\w)\\..*");
+ private static final Pattern IP_PATTERN =
Pattern.compile("\\d+.\\d+.\\d+.\\d+");
+ private static final Pattern SHORTNAME_PATTERN =
Pattern.compile("#(\\w\\w)\\..*");
+ private static final Pattern SINGLE_SPACE_PATTERN = Pattern.compile("\\s");
static final List<String> dimensionList = Lists.newArrayList(
"page",
@@ -73,6 +72,7 @@ class WikipediaIrcDecoder implements IrcDecoder
"city"
);
+ final DatabaseReader geoLookup;
final Map<String, Map<String, String>> namespaces;
final String geoIpDatabase;
@@ -108,7 +108,7 @@ class WikipediaIrcDecoder implements IrcDecoder
return openDefaultGeoIpDb(geoDb);
}
catch (RuntimeException e) {
- log.warn(e.getMessage() + " Attempting to re-download.", e);
+ LOG.warn(e.getMessage() + " Attempting to re-download.", e);
if (geoDb.exists() && !geoDb.delete()) {
throw new RuntimeException("Could not delete geo db file [" +
geoDb.getAbsolutePath() + "].");
}
@@ -127,7 +127,7 @@ class WikipediaIrcDecoder implements IrcDecoder
{
try {
DatabaseReader reader = new DatabaseReader(geoDb);
- log.info("Using geo ip database at [%s].", geoDb);
+ LOG.info("Using geo ip database at [%s].", geoDb);
return reader;
}
catch (IOException e) {
@@ -142,7 +142,7 @@ class WikipediaIrcDecoder implements IrcDecoder
}
try {
- log.info("Downloading geo ip database to [%s]. This may take a few
minutes.", geoDb.getAbsolutePath());
+ LOG.info("Downloading geo ip database to [%s]. This may take a few
minutes.", geoDb.getAbsolutePath());
File tmpFile = File.createTempFile("druid", "geo");
@@ -180,23 +180,23 @@ class WikipediaIrcDecoder implements IrcDecoder
final Map<String, String> dimensions = new HashMap<>();
final Map<String, Float> metrics = new HashMap<>();
- Matcher m = pattern.matcher(msg);
+ Matcher m = PATTERN.matcher(msg);
if (!m.matches()) {
throw new IllegalArgumentException("Invalid input format");
}
- Matcher shortname = shortnamePattern.matcher(channel);
+ Matcher shortname = SHORTNAME_PATTERN.matcher(channel);
if (shortname.matches()) {
dimensions.put("language", shortname.group(1));
}
String page = m.group(1);
- String pageUrl = page.replaceAll("\\s", "_");
+ String pageUrl = SINGLE_SPACE_PATTERN.matcher(page).replaceAll("_");
dimensions.put("page", pageUrl);
String user = m.group(4);
- Matcher ipMatch = ipPattern.matcher(user);
+ Matcher ipMatch = IP_PATTERN.matcher(user);
boolean anonymous = ipMatch.matches();
if (anonymous) {
try {
@@ -209,13 +209,13 @@ class WikipediaIrcDecoder implements IrcDecoder
dimensions.put("city", lookup.getCity().getName());
}
catch (UnknownHostException e) {
- log.error(e, "invalid ip [%s]", ipMatch.group());
+ LOG.error(e, "invalid ip [%s]", ipMatch.group());
}
catch (IOException e) {
- log.error(e, "error looking up geo ip");
+ LOG.error(e, "error looking up geo ip");
}
catch (GeoIp2Exception e) {
- log.error(e, "error looking up geo ip");
+ LOG.error(e, "error looking up geo ip");
}
}
dimensions.put("user", user);
diff --git
a/extensions-contrib/azure-extensions/src/main/java/org/apache/druid/storage/azure/AzureDataSegmentPusher.java
b/extensions-contrib/azure-extensions/src/main/java/org/apache/druid/storage/azure/AzureDataSegmentPusher.java
index 32d749b..ae80812 100644
---
a/extensions-contrib/azure-extensions/src/main/java/org/apache/druid/storage/azure/AzureDataSegmentPusher.java
+++
b/extensions-contrib/azure-extensions/src/main/java/org/apache/druid/storage/azure/AzureDataSegmentPusher.java
@@ -95,7 +95,7 @@ public class AzureDataSegmentPusher implements
DataSegmentPusher
dataSegment.getInterval().getStart().toString(ISODateTimeFormat.basicDateTime()),
dataSegment.getInterval().getEnd().toString(ISODateTimeFormat.basicDateTime())
),
- dataSegment.getVersion().replace(":", "_"),
+ dataSegment.getVersion().replace(':', '_'),
dataSegment.getShardSpec().getPartitionNum(),
useUniquePath ? DataSegmentPusher.generateUniquePath() : null
);
diff --git
a/extensions-contrib/azure-extensions/src/test/java/org/apache/druid/storage/azure/AzureDataSegmentPusherTest.java
b/extensions-contrib/azure-extensions/src/test/java/org/apache/druid/storage/azure/AzureDataSegmentPusherTest.java
index 1981a78..d1dfbe8 100644
---
a/extensions-contrib/azure-extensions/src/test/java/org/apache/druid/storage/azure/AzureDataSegmentPusherTest.java
+++
b/extensions-contrib/azure-extensions/src/test/java/org/apache/druid/storage/azure/AzureDataSegmentPusherTest.java
@@ -42,6 +42,7 @@ import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
+import java.util.regex.Pattern;
import static org.easymock.EasyMock.expectLastCall;
import static org.junit.Assert.assertEquals;
@@ -119,7 +120,7 @@ public class AzureDataSegmentPusherTest extends
EasyMockSupport
Assert.assertTrue(
segment.getLoadSpec().get("blobPath").toString(),
- segment.getLoadSpec().get("blobPath").toString().matches(matcher)
+
Pattern.compile(matcher).matcher(segment.getLoadSpec().get("blobPath").toString()).matches()
);
Assert.assertEquals(segmentToPush.getSize(), segment.getSize());
diff --git
a/extensions-contrib/cloudfiles-extensions/src/main/java/org/apache/druid/storage/cloudfiles/CloudFilesUtils.java
b/extensions-contrib/cloudfiles-extensions/src/main/java/org/apache/druid/storage/cloudfiles/CloudFilesUtils.java
index 06722ea..bc883b2 100644
---
a/extensions-contrib/cloudfiles-extensions/src/main/java/org/apache/druid/storage/cloudfiles/CloudFilesUtils.java
+++
b/extensions-contrib/cloudfiles-extensions/src/main/java/org/apache/druid/storage/cloudfiles/CloudFilesUtils.java
@@ -58,7 +58,7 @@ public class CloudFilesUtils
{
String path = fileName;
if (!basePath.isEmpty()) {
- int lastSlashIndex = basePath.lastIndexOf("/");
+ int lastSlashIndex = basePath.lastIndexOf('/');
if (lastSlashIndex != -1) {
basePath = basePath.substring(0, lastSlashIndex);
}
diff --git
a/extensions-contrib/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleDataSegmentKiller.java
b/extensions-contrib/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleDataSegmentKiller.java
index b3f11c4..4435f62 100644
---
a/extensions-contrib/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleDataSegmentKiller.java
+++
b/extensions-contrib/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleDataSegmentKiller.java
@@ -52,7 +52,7 @@ public class GoogleDataSegmentKiller implements
DataSegmentKiller
Map<String, Object> loadSpec = segment.getLoadSpec();
final String bucket = MapUtils.getString(loadSpec, "bucket");
final String indexPath = MapUtils.getString(loadSpec, "path");
- final String descriptorPath = indexPath.substring(0,
indexPath.lastIndexOf("/")) + "/descriptor.json";
+ final String descriptorPath = indexPath.substring(0,
indexPath.lastIndexOf('/')) + "/descriptor.json";
try {
deleteIfPresent(bucket, indexPath);
diff --git
a/extensions-contrib/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleTaskLogs.java
b/extensions-contrib/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleTaskLogs.java
index 2f747f3..0bb80ad 100644
---
a/extensions-contrib/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleTaskLogs.java
+++
b/extensions-contrib/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleTaskLogs.java
@@ -131,12 +131,12 @@ public class GoogleTaskLogs implements TaskLogs
private String getTaskLogKey(String taskid)
{
- return config.getPrefix() + "/" + taskid.replaceAll(":", "_");
+ return config.getPrefix() + "/" + taskid.replace(':', '_');
}
private String getTaskReportKey(String taskid)
{
- return config.getPrefix() + "/" + taskid.replaceAll(":", "_") +
".report.json";
+ return config.getPrefix() + "/" + taskid.replace(':', '_') +
".report.json";
}
@Override
diff --git
a/extensions-contrib/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleUtils.java
b/extensions-contrib/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleUtils.java
index ebb47d6..6f23f9c 100644
---
a/extensions-contrib/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleUtils.java
+++
b/extensions-contrib/google-extensions/src/main/java/org/apache/druid/storage/google/GoogleUtils.java
@@ -27,14 +27,12 @@ public class GoogleUtils
{
public static String toFilename(String path)
{
- String filename = path.substring(path.lastIndexOf("/") + 1); // characters
after last '/'
- filename = filename.substring(0, filename.length());
- return filename;
+ return path.substring(path.lastIndexOf('/') + 1); // characters after last
'/'
}
public static String indexZipForSegmentPath(String path)
{
- return path.substring(0, path.lastIndexOf("/")) + "/index.zip";
+ return path.substring(0, path.lastIndexOf('/')) + "/index.zip";
}
public static boolean isRetryable(Throwable t)
diff --git
a/extensions-contrib/google-extensions/src/test/java/org/apache/druid/storage/google/GoogleDataSegmentKillerTest.java
b/extensions-contrib/google-extensions/src/test/java/org/apache/druid/storage/google/GoogleDataSegmentKillerTest.java
index 6734cb7..6ab2a1a 100644
---
a/extensions-contrib/google-extensions/src/test/java/org/apache/druid/storage/google/GoogleDataSegmentKillerTest.java
+++
b/extensions-contrib/google-extensions/src/test/java/org/apache/druid/storage/google/GoogleDataSegmentKillerTest.java
@@ -40,7 +40,7 @@ public class GoogleDataSegmentKillerTest extends
EasyMockSupport
{
private static final String bucket = "bucket";
private static final String indexPath =
"test/2015-04-12T00:00:00.000Z_2015-04-13T00:00:00.000Z/1/0/index.zip";
- private static final String descriptorPath = indexPath.substring(0,
indexPath.lastIndexOf("/")) + "/descriptor.json";
+ private static final String descriptorPath = indexPath.substring(0,
indexPath.lastIndexOf('/')) + "/descriptor.json";
private static final DataSegment dataSegment = new DataSegment(
"test",
diff --git
a/extensions-contrib/graphite-emitter/src/main/java/org/apache/druid/emitter/graphite/GraphiteEmitter.java
b/extensions-contrib/graphite-emitter/src/main/java/org/apache/druid/emitter/graphite/GraphiteEmitter.java
index e80a249..7fd10ca 100644
---
a/extensions-contrib/graphite-emitter/src/main/java/org/apache/druid/emitter/graphite/GraphiteEmitter.java
+++
b/extensions-contrib/graphite-emitter/src/main/java/org/apache/druid/emitter/graphite/GraphiteEmitter.java
@@ -252,7 +252,7 @@ public class GraphiteEmitter implements Emitter
Pattern DOT_OR_WHITESPACE = Pattern.compile("[\\s]+|[.]+");
String sanitizedNamespace =
DOT_OR_WHITESPACE.matcher(namespace).replaceAll("_");
if (replaceSlashToDot) {
- sanitizedNamespace = sanitizedNamespace.replace("/", ".");
+ sanitizedNamespace = sanitizedNamespace.replace('/', '.');
}
return sanitizedNamespace;
}
diff --git
a/extensions-contrib/influx-extensions/src/main/java/org/apache/druid/data/input/influx/InfluxParser.java
b/extensions-contrib/influx-extensions/src/main/java/org/apache/druid/data/input/influx/InfluxParser.java
index db3705d..a090068 100644
---
a/extensions-contrib/influx-extensions/src/main/java/org/apache/druid/data/input/influx/InfluxParser.java
+++
b/extensions-contrib/influx-extensions/src/main/java/org/apache/druid/data/input/influx/InfluxParser.java
@@ -31,11 +31,16 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.regex.Pattern;
public class InfluxParser implements Parser<String, Object>
{
public static final String TIMESTAMP_KEY = "__ts";
private static final String MEASUREMENT_KEY = "measurement";
+
+ private static final Pattern BACKSLASH_PATTERN = Pattern.compile("\\\\\"");
+ private static final Pattern IDENTIFIER_PATTERN = Pattern.compile("\\\\([,=
])");
+
private final Set<String> measurementWhitelist;
public InfluxParser(Set<String> measurementWhitelist)
@@ -112,7 +117,7 @@ public class InfluxParser implements Parser<String, Object>
private Object parseQuotedString(String text)
{
- return text.substring(1, text.length() - 1).replaceAll("\\\\\"", "\"");
+ return BACKSLASH_PATTERN.matcher(text.substring(1, text.length() -
1)).replaceAll("\"");
}
private Object parseNumber(String raw)
@@ -140,7 +145,7 @@ public class InfluxParser implements Parser<String, Object>
return ctx.getText();
}
- return ctx.IDENTIFIER_STRING().getText().replaceAll("\\\\([,= ])", "$1");
+ return
IDENTIFIER_PATTERN.matcher(ctx.IDENTIFIER_STRING().getText()).replaceAll("$1");
}
private boolean checkWhitelist(String m)
diff --git
a/extensions-contrib/materialized-view-selection/src/main/java/org/apache/druid/query/materializedview/MaterializedViewQuery.java
b/extensions-contrib/materialized-view-selection/src/main/java/org/apache/druid/query/materializedview/MaterializedViewQuery.java
index 26a7026..e0e29ee 100644
---
a/extensions-contrib/materialized-view-selection/src/main/java/org/apache/druid/query/materializedview/MaterializedViewQuery.java
+++
b/extensions-contrib/materialized-view-selection/src/main/java/org/apache/druid/query/materializedview/MaterializedViewQuery.java
@@ -208,8 +208,8 @@ public class MaterializedViewQuery<T> implements Query<T>
public String toString()
{
return "MaterializedViewQuery{" +
- "query=" + query.toString() +
- "}";
+ "query=" + query +
+ "}";
}
@Override
diff --git
a/extensions-contrib/opentsdb-emitter/src/main/java/org/apache/druid/emitter/opentsdb/EventConverter.java
b/extensions-contrib/opentsdb-emitter/src/main/java/org/apache/druid/emitter/opentsdb/EventConverter.java
index dbd0568..3dddd9f 100644
---
a/extensions-contrib/opentsdb-emitter/src/main/java/org/apache/druid/emitter/opentsdb/EventConverter.java
+++
b/extensions-contrib/opentsdb-emitter/src/main/java/org/apache/druid/emitter/opentsdb/EventConverter.java
@@ -39,8 +39,6 @@ public class EventConverter
{
private static final Logger log = new Logger(EventConverter.class);
private static final Pattern WHITESPACE = Pattern.compile("[\\s]+");
- private static final String COLON = ":";
- private static final String DEFAULT_COLON_REPLACEMENT = "_";
private final Map<String, Set<String>> metricMap;
@@ -51,7 +49,7 @@ public class EventConverter
protected String sanitize(String metric)
{
- return WHITESPACE.matcher(metric.trim()).replaceAll("_").replaceAll("/",
".");
+ return WHITESPACE.matcher(metric.trim()).replaceAll("_").replace('/', '.');
}
/**
@@ -74,8 +72,8 @@ public class EventConverter
Number value = serviceMetricEvent.getValue();
Map<String, Object> tags = new HashMap<>();
- String service = serviceMetricEvent.getService().replaceAll(COLON,
DEFAULT_COLON_REPLACEMENT);
- String host = serviceMetricEvent.getHost().replaceAll(COLON,
DEFAULT_COLON_REPLACEMENT);
+ String service = serviceMetricEvent.getService().replace(':', '_');
+ String host = serviceMetricEvent.getHost().replace(':', '_');
tags.put("service", service);
tags.put("host", host);
@@ -84,7 +82,7 @@ public class EventConverter
if (userDims.containsKey(dim)) {
Object dimValue = userDims.get(dim);
if (dimValue instanceof String) {
- dimValue = ((String) dimValue).replaceAll(COLON,
DEFAULT_COLON_REPLACEMENT);
+ dimValue = ((String) dimValue).replace(':', '_');
}
tags.put(dim, dimValue);
}
diff --git
a/extensions-contrib/orc-extensions/src/main/java/org/apache/druid/data/input/orc/OrcHadoopInputRowParser.java
b/extensions-contrib/orc-extensions/src/main/java/org/apache/druid/data/input/orc/OrcHadoopInputRowParser.java
index 96a7e0b..21b249c 100644
---
a/extensions-contrib/orc-extensions/src/main/java/org/apache/druid/data/input/orc/OrcHadoopInputRowParser.java
+++
b/extensions-contrib/orc-extensions/src/main/java/org/apache/druid/data/input/orc/OrcHadoopInputRowParser.java
@@ -84,9 +84,9 @@ public class OrcHadoopInputRowParser implements
InputRowParser<OrcStruct>
this.typeString = typeString == null ? typeStringFromParseSpec(parseSpec)
: typeString;
this.mapFieldNameFormat =
mapFieldNameFormat == null ||
- mapFieldNameFormat.indexOf(MAP_PARENT_TAG) < 0 ||
- mapFieldNameFormat.indexOf(MAP_CHILD_TAG) < 0 ?
DEFAULT_MAP_FIELD_NAME_FORMAT : mapFieldNameFormat;
- this.mapParentFieldNameFormat =
this.mapFieldNameFormat.replace(MAP_PARENT_TAG, "%s");
+ !mapFieldNameFormat.contains(MAP_PARENT_TAG) ||
+ !mapFieldNameFormat.contains(MAP_CHILD_TAG) ?
DEFAULT_MAP_FIELD_NAME_FORMAT : mapFieldNameFormat;
+ this.mapParentFieldNameFormat =
StringUtils.replace(this.mapFieldNameFormat, MAP_PARENT_TAG, "%s");
this.dimensions = parseSpec.getDimensionsSpec().getDimensionNames();
this.oip = makeObjectInspector(this.typeString);
}
@@ -159,7 +159,11 @@ public class OrcHadoopInputRowParser implements
InputRowParser<OrcStruct>
if (mapObjectInspector.getMapSize(mapObject) < 0) {
return;
}
- String mapChildFieldNameFormat =
StringUtils.format(mapParentFieldNameFormat, parentName).replace(MAP_CHILD_TAG,
"%s");
+ String mapChildFieldNameFormat = StringUtils.replace(
+ StringUtils.format(mapParentFieldNameFormat, parentName),
+ MAP_CHILD_TAG,
+ "%s"
+ );
Map objectMap = mapObjectInspector.getMap(mapObject);
PrimitiveObjectInspector key = (PrimitiveObjectInspector)
mapObjectInspector.getMapKeyObjectInspector();
diff --git
a/extensions-contrib/statsd-emitter/src/main/java/org/apache/druid/emitter/statsd/StatsDEmitter.java
b/extensions-contrib/statsd-emitter/src/main/java/org/apache/druid/emitter/statsd/StatsDEmitter.java
index 5fb576b..d2f40b6 100644
---
a/extensions-contrib/statsd-emitter/src/main/java/org/apache/druid/emitter/statsd/StatsDEmitter.java
+++
b/extensions-contrib/statsd-emitter/src/main/java/org/apache/druid/emitter/statsd/StatsDEmitter.java
@@ -25,12 +25,14 @@ import com.google.common.collect.ImmutableList;
import com.timgroup.statsd.NonBlockingStatsDClient;
import com.timgroup.statsd.StatsDClient;
import com.timgroup.statsd.StatsDClientErrorHandler;
+import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.logger.Logger;
import org.apache.druid.java.util.emitter.core.Emitter;
import org.apache.druid.java.util.emitter.core.Event;
import org.apache.druid.java.util.emitter.service.ServiceMetricEvent;
import java.util.Map;
+import java.util.regex.Pattern;
/**
*/
@@ -38,9 +40,9 @@ public class StatsDEmitter implements Emitter
{
private static final Logger log = new Logger(StatsDEmitter.class);
- private static final String DRUID_METRIC_SEPARATOR = "\\/";
- private static final String STATSD_SEPARATOR = ":|\\|";
- private static final String BLANK = "\\s+";
+ private static final char DRUID_METRIC_SEPARATOR = '/';
+ private static final Pattern STATSD_SEPARATOR = Pattern.compile("[:|]");
+ private static final Pattern BLANK = Pattern.compile("\\s+");
static final StatsDEmitter of(StatsDEmitterConfig config, ObjectMapper
mapper)
{
@@ -101,11 +103,10 @@ public class StatsDEmitter implements Emitter
if (statsDMetric != null) {
- String fullName = Joiner.on(config.getSeparator())
- .join(nameBuilder.build())
- .replaceAll(DRUID_METRIC_SEPARATOR,
config.getSeparator())
- .replaceAll(STATSD_SEPARATOR,
config.getSeparator())
- .replaceAll(BLANK, config.getBlankHolder());
+ String fullName =
Joiner.on(config.getSeparator()).join(nameBuilder.build());
+ fullName = StringUtils.replaceChar(fullName, DRUID_METRIC_SEPARATOR,
config.getSeparator());
+ fullName =
STATSD_SEPARATOR.matcher(fullName).replaceAll(config.getSeparator());
+ fullName = BLANK.matcher(fullName).replaceAll(config.getBlankHolder());
long val = statsDMetric.convertRange ? Math.round(value.doubleValue()
* 100) : value.longValue();
switch (statsDMetric.type) {
diff --git
a/extensions-core/avro-extensions/src/test/java/org/apache/druid/data/input/AvroStreamInputRowParserTest.java
b/extensions-core/avro-extensions/src/test/java/org/apache/druid/data/input/AvroStreamInputRowParserTest.java
index 015ff14..4da8906 100644
---
a/extensions-core/avro-extensions/src/test/java/org/apache/druid/data/input/AvroStreamInputRowParserTest.java
+++
b/extensions-core/avro-extensions/src/test/java/org/apache/druid/data/input/AvroStreamInputRowParserTest.java
@@ -64,6 +64,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.regex.Pattern;
import static org.junit.Assert.assertEquals;
@@ -150,6 +151,8 @@ public class AvroStreamInputRowParserTest
public static final String SOME_UNION_VALUE = "string as union";
public static final ByteBuffer SOME_BYTES_VALUE = ByteBuffer.allocate(8);
+ private static final Pattern BRACES_AND_SPACE = Pattern.compile("[{} ]");
+
private final ObjectMapper jsonMapper = new ObjectMapper();
@@ -267,7 +270,7 @@ public class AvroStreamInputRowParserTest
assertEquals(1543698L, inputRow.getTimestampFromEpoch());
// test dimensions
- assertEquals(Collections.singletonList(String.valueOf(EVENT_TYPE_VALUE)),
inputRow.getDimension(EVENT_TYPE));
+ assertEquals(Collections.singletonList(EVENT_TYPE_VALUE),
inputRow.getDimension(EVENT_TYPE));
assertEquals(Collections.singletonList(String.valueOf(ID_VALUE)),
inputRow.getDimension(ID));
assertEquals(Collections.singletonList(String.valueOf(SOME_OTHER_ID_VALUE)),
inputRow.getDimension(SOME_OTHER_ID));
assertEquals(Collections.singletonList(String.valueOf(true)),
inputRow.getDimension(IS_VALID));
@@ -285,9 +288,10 @@ public class AvroStreamInputRowParserTest
SOME_INT_VALUE_MAP_VALUE,
new HashMap<CharSequence, Integer>(
Maps.transformValues(
- Splitter.on(",")
- .withKeyValueSeparator("=")
-
.split(inputRow.getDimension("someIntValueMap").get(0).replaceAll("[\\{\\} ]",
"")),
+ Splitter
+ .on(",")
+ .withKeyValueSeparator("=")
+
.split(BRACES_AND_SPACE.matcher(inputRow.getDimension("someIntValueMap").get(0)).replaceAll("")),
new Function<String, Integer>()
{
@Nullable
@@ -303,9 +307,10 @@ public class AvroStreamInputRowParserTest
assertEquals(
SOME_STRING_VALUE_MAP_VALUE,
new HashMap<CharSequence, CharSequence>(
- Splitter.on(",")
- .withKeyValueSeparator("=")
-
.split(inputRow.getDimension("someIntValueMap").get(0).replaceAll("[\\{\\} ]",
""))
+ Splitter
+ .on(",")
+ .withKeyValueSeparator("=")
+
.split(BRACES_AND_SPACE.matcher(inputRow.getDimension("someIntValueMap").get(0)).replaceAll(""))
)
);
assertEquals(Collections.singletonList(SOME_UNION_VALUE),
inputRow.getDimension("someUnion"));
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchAggregatorFactory.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchAggregatorFactory.java
index bb6fa9e..71a20de 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchAggregatorFactory.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchAggregatorFactory.java
@@ -19,24 +19,22 @@
package org.apache.druid.query.aggregation.datasketches.hll;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Objects;
-
-import javax.annotation.Nullable;
-
import com.fasterxml.jackson.annotation.JsonProperty;
import com.yahoo.sketches.hll.HllSketch;
import com.yahoo.sketches.hll.TgtHllType;
import com.yahoo.sketches.hll.Union;
-
import org.apache.druid.query.aggregation.AggregateCombiner;
import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.ObjectAggregateCombiner;
import org.apache.druid.query.cache.CacheKeyBuilder;
import org.apache.druid.segment.ColumnValueSelector;
+import javax.annotation.Nullable;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+
/**
* Base class for both build and merge factories
* @author Alexander Saydakov
@@ -176,7 +174,7 @@ abstract class HllSketchAggregatorFactory extends
AggregatorFactory
@Override
public AggregatorFactory getCombiningFactory()
{
- return new HllSketchMergeAggregatorFactory(getName(), getName(), getLgK(),
getTgtHllType().toString());
+ return new HllSketchMergeAggregatorFactory(getName(), getName(), getLgK(),
getTgtHllType());
}
@Override
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchEstimateWithErrorBounds.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchEstimateWithErrorBounds.java
index 41cd7c1..67f8302 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchEstimateWithErrorBounds.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchEstimateWithErrorBounds.java
@@ -74,11 +74,11 @@ public class SketchEstimateWithErrorBounds
public String toString()
{
return "SketchEstimateWithErrorBounds{" +
- "estimate=" + Double.toString(estimate) +
- ", highBound=" + Double.toString(highBound) +
- ", lowBound=" + Double.toString(lowBound) +
- ", numStdDev=" + Integer.toString(numStdDev) +
- "}";
+ "estimate=" + estimate +
+ ", highBound=" + highBound +
+ ", lowBound=" + lowBound +
+ ", numStdDev=" + numStdDev +
+ "}";
}
@Override
diff --git
a/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/BloomKFilter.java
b/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/BloomKFilter.java
index 3733145..2949287 100644
---
a/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/BloomKFilter.java
+++
b/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/BloomKFilter.java
@@ -433,7 +433,7 @@ public class BloomKFilter
this.bitSet.putAll(that.bitSet);
} else {
throw new IllegalArgumentException("BloomKFilters are not compatible for
merging." +
- " this - " + this.toString() + " that
- " + that.toString());
+ " this - " + this + " that - " +
that);
}
}
diff --git
a/extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsDataSegmentFinder.java
b/extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsDataSegmentFinder.java
index aaab1b5..45904d7 100644
---
a/extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsDataSegmentFinder.java
+++
b/extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsDataSegmentFinder.java
@@ -67,7 +67,7 @@ public class HdfsDataSegmentFinder implements
DataSegmentFinder
fs = workingDirPath.getFileSystem(config);
log.info(fs.getScheme());
- log.info("FileSystem URI:" + fs.getUri().toString());
+ log.info("FileSystem URI:" + fs.getUri());
if (!fs.exists(workingDirPath)) {
throw new SegmentLoadingException("Working directory [%s] doesn't
exist.", workingDirPath);
diff --git
a/extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPusher.java
b/extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPusher.java
index cf6ceab..1c3f50d 100644
---
a/extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPusher.java
+++
b/extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPusher.java
@@ -242,7 +242,7 @@ public class HdfsDataSegmentPusher implements
DataSegmentPusher
segment.getInterval().getStart().toString(ISODateTimeFormat.basicDateTime()),
segment.getInterval().getEnd().toString(ISODateTimeFormat.basicDateTime())
),
- segment.getVersion().replaceAll(":", "_")
+ segment.getVersion().replace(':', '_')
);
}
diff --git
a/extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/tasklog/HdfsTaskLogs.java
b/extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/tasklog/HdfsTaskLogs.java
index 94cd828..2f1df6d 100644
---
a/extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/tasklog/HdfsTaskLogs.java
+++
b/extensions-core/hdfs-storage/src/main/java/org/apache/druid/storage/hdfs/tasklog/HdfsTaskLogs.java
@@ -135,7 +135,7 @@ public class HdfsTaskLogs implements TaskLogs
*/
private Path getTaskLogFileFromId(String taskId)
{
- return new Path(mergePaths(config.getDirectory(), taskId.replaceAll(":",
"_")));
+ return new Path(mergePaths(config.getDirectory(), taskId.replace(':',
'_')));
}
/**
@@ -144,7 +144,7 @@ public class HdfsTaskLogs implements TaskLogs
*/
private Path getTaskReportsFileFromId(String taskId)
{
- return new Path(mergePaths(config.getDirectory(), taskId.replaceAll(":",
"_") + ".reports.json"));
+ return new Path(mergePaths(config.getDirectory(), taskId.replace(':', '_')
+ ".reports.json"));
}
// some hadoop version Path.mergePaths does not exist
diff --git
a/extensions-core/hdfs-storage/src/test/java/org/apache/druid/segment/loading/HdfsDataSegmentFinderTest.java
b/extensions-core/hdfs-storage/src/test/java/org/apache/druid/segment/loading/HdfsDataSegmentFinderTest.java
index ec8b0ea..0c5c520 100644
---
a/extensions-core/hdfs-storage/src/test/java/org/apache/druid/segment/loading/HdfsDataSegmentFinderTest.java
+++
b/extensions-core/hdfs-storage/src/test/java/org/apache/druid/segment/loading/HdfsDataSegmentFinderTest.java
@@ -306,13 +306,13 @@ public class HdfsDataSegmentFinderTest
private String getDescriptorPath(DataSegment segment)
{
final Path indexzip = new
Path(String.valueOf(segment.getLoadSpec().get("path")));
- return indexzip.getParent().toString() + "/" + DESCRIPTOR_JSON;
+ return indexzip.getParent() + "/" + DESCRIPTOR_JSON;
}
private String getDescriptorPathWithPartitionNum(DataSegment segment, int
partitionNum)
{
final Path indexzip = new
Path(String.valueOf(segment.getLoadSpec().get("path")));
- return indexzip.getParent().toString() + "/" + partitionNum + "_" +
DESCRIPTOR_JSON;
+ return indexzip.getParent() + "/" + partitionNum + "_" + DESCRIPTOR_JSON;
}
private String readContent(Path descriptor) throws IOException
diff --git
a/extensions-core/hdfs-storage/src/test/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPullerTest.java
b/extensions-core/hdfs-storage/src/test/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPullerTest.java
index 2924a6d..86e8c5d 100644
---
a/extensions-core/hdfs-storage/src/test/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPullerTest.java
+++
b/extensions-core/hdfs-storage/src/test/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPullerTest.java
@@ -118,7 +118,7 @@ public class HdfsDataSegmentPullerTest
final File outTmpDir = com.google.common.io.Files.createTempDir();
- final URI uri = URI.create(uriBase.toString() + zipPath.toString());
+ final URI uri = URI.create(uriBase.toString() + zipPath);
try (final OutputStream stream = new FileOutputStream(tmpFile)) {
ByteStreams.copy(new ByteArrayInputStream(pathByteContents), stream);
@@ -163,7 +163,7 @@ public class HdfsDataSegmentPullerTest
final File outFile = new File(outTmpDir, "testZip");
outFile.delete();
- final URI uri = URI.create(uriBase.toString() + zipPath.toString());
+ final URI uri = URI.create(uriBase.toString() + zipPath);
try (final OutputStream outputStream =
miniCluster.getFileSystem().create(zipPath);
final OutputStream gzStream = new GZIPOutputStream(outputStream);
@@ -197,7 +197,7 @@ public class HdfsDataSegmentPullerTest
final File outFile = new File(outTmpDir, "test.txt");
outFile.delete();
- final URI uri = URI.create(uriBase.toString() + perTestPath.toString());
+ final URI uri = URI.create(uriBase.toString() + perTestPath);
try (final OutputStream outputStream =
miniCluster.getFileSystem().create(zipPath);
final InputStream inputStream = new
ByteArrayInputStream(pathByteContents)) {
diff --git
a/extensions-core/hdfs-storage/src/test/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPusherTest.java
b/extensions-core/hdfs-storage/src/test/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPusherTest.java
index 03f4508..6333033 100644
---
a/extensions-core/hdfs-storage/src/test/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPusherTest.java
+++
b/extensions-core/hdfs-storage/src/test/java/org/apache/druid/storage/hdfs/HdfsDataSegmentPusherTest.java
@@ -68,6 +68,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.regex.Pattern;
/**
*/
@@ -161,10 +162,11 @@ public class HdfsDataSegmentPusherTest
DataSegment segment = pusher.push(segmentDir, segmentToPush, true);
- String matcher =
".*/foo/20150101T000000\\.000Z_20160101T000000\\.000Z/0/0_[A-Za-z0-9-]{36}_index\\.zip";
+ Pattern pattern =
+
Pattern.compile(".*/foo/20150101T000000\\.000Z_20160101T000000\\.000Z/0/0_[A-Za-z0-9-]{36}_index\\.zip");
Assert.assertTrue(
segment.getLoadSpec().get("path").toString(),
- segment.getLoadSpec().get("path").toString().matches(matcher)
+ pattern.matcher(segment.getLoadSpec().get("path").toString()).matches()
);
}
diff --git
a/extensions-core/kafka-extraction-namespace/src/main/java/org/apache/druid/query/lookup/KafkaLookupExtractorFactory.java
b/extensions-core/kafka-extraction-namespace/src/main/java/org/apache/druid/query/lookup/KafkaLookupExtractorFactory.java
index ced2d16..4fb1a24 100644
---
a/extensions-core/kafka-extraction-namespace/src/main/java/org/apache/druid/query/lookup/KafkaLookupExtractorFactory.java
+++
b/extensions-core/kafka-extraction-namespace/src/main/java/org/apache/druid/query/lookup/KafkaLookupExtractorFactory.java
@@ -117,7 +117,7 @@ public class KafkaLookupExtractorFactory implements
LookupExtractorFactory
this.cacheManager = cacheManager;
this.connectTimeout = connectTimeout;
this.injective = injective;
- this.factoryId = "kafka-factory-" + kafkaTopic +
UUID.randomUUID().toString();
+ this.factoryId = "kafka-factory-" + kafkaTopic + UUID.randomUUID();
}
public KafkaLookupExtractorFactory(
diff --git
a/extensions-core/lookups-cached-global/src/test/java/org/apache/druid/server/lookup/namespace/UriCacheGeneratorTest.java
b/extensions-core/lookups-cached-global/src/test/java/org/apache/druid/server/lookup/namespace/UriCacheGeneratorTest.java
index 2f2e23a..87cae6a 100644
---
a/extensions-core/lookups-cached-global/src/test/java/org/apache/druid/server/lookup/namespace/UriCacheGeneratorTest.java
+++
b/extensions-core/lookups-cached-global/src/test/java/org/apache/druid/server/lookup/namespace/UriCacheGeneratorTest.java
@@ -512,8 +512,7 @@ public class UriCacheGeneratorTest
{
Assert.assertNull(scheduler.scheduleAndWait(
new UriExtractionNamespace(
- new URI("file://tmp/I_DONT_REALLY_EXIST" +
- UUID.randomUUID().toString()),
+ new URI("file://tmp/I_DONT_REALLY_EXIST" + UUID.randomUUID()),
null,
null,
new UriExtractionNamespace.JSONFlatDataParser(
diff --git
a/extensions-core/lookups-cached-single/src/main/java/org/apache/druid/server/lookup/cache/loading/OffHeapLoadingCache.java
b/extensions-core/lookups-cached-single/src/main/java/org/apache/druid/server/lookup/cache/loading/OffHeapLoadingCache.java
index e20cf77..a5f7949 100644
---
a/extensions-core/lookups-cached-single/src/main/java/org/apache/druid/server/lookup/cache/loading/OffHeapLoadingCache.java
+++
b/extensions-core/lookups-cached-single/src/main/java/org/apache/druid/server/lookup/cache/loading/OffHeapLoadingCache.java
@@ -192,7 +192,7 @@ public class OffHeapLoadingCache<K, V> implements
LoadingCache<K, V>
public void close()
{
if (!closed.getAndSet(true)) {
- DB.delete(String.valueOf(name));
+ DB.delete(name);
}
}
diff --git
a/extensions-core/mysql-metadata-storage/src/main/java/org/apache/druid/metadata/storage/mysql/MySQLConnector.java
b/extensions-core/mysql-metadata-storage/src/main/java/org/apache/druid/metadata/storage/mysql/MySQLConnector.java
index ffb9567..f16dd8f 100644
---
a/extensions-core/mysql-metadata-storage/src/main/java/org/apache/druid/metadata/storage/mysql/MySQLConnector.java
+++
b/extensions-core/mysql-metadata-storage/src/main/java/org/apache/druid/metadata/storage/mysql/MySQLConnector.java
@@ -180,7 +180,7 @@ public class MySQLConnector extends SQLMetadataConnector
.map(StringMapper.FIRST)
.first();
- if (!databaseCharset.matches("utf8.*")) {
+ if (!databaseCharset.startsWith("utf8")) {
throw new ISE(
"Druid requires its MySQL database to be created with an UTF8
charset, found `%1$s`. "
+ "The recommended charset is `utf8mb4`.",
diff --git
a/extensions-core/protobuf-extensions/src/main/java/org/apache/druid/data/input/protobuf/ProtobufInputRowParser.java
b/extensions-core/protobuf-extensions/src/main/java/org/apache/druid/data/input/protobuf/ProtobufInputRowParser.java
index e47adee..b9075a1 100644
---
a/extensions-core/protobuf-extensions/src/main/java/org/apache/druid/data/input/protobuf/ProtobufInputRowParser.java
+++
b/extensions-core/protobuf-extensions/src/main/java/org/apache/druid/data/input/protobuf/ProtobufInputRowParser.java
@@ -122,7 +122,7 @@ public class ProtobufInputRowParser implements
ByteBufferInputRowParser
fin = url.openConnection().getInputStream();
}
catch (IOException e) {
- throw new ParseException(e, "Cannot read descriptor file: " +
url.toString());
+ throw new ParseException(e, "Cannot read descriptor file: " + url);
}
}
diff --git
a/extensions-core/s3-extensions/src/main/java/org/apache/druid/firehose/s3/StaticS3FirehoseFactory.java
b/extensions-core/s3-extensions/src/main/java/org/apache/druid/firehose/s3/StaticS3FirehoseFactory.java
index f3783b3..693f311 100644
---
a/extensions-core/s3-extensions/src/main/java/org/apache/druid/firehose/s3/StaticS3FirehoseFactory.java
+++
b/extensions-core/s3-extensions/src/main/java/org/apache/druid/firehose/s3/StaticS3FirehoseFactory.java
@@ -288,9 +288,7 @@ public class StaticS3FirehoseFactory extends
PrefetchableTextFilesFirehoseFactor
final String authority = originalAuthority.endsWith("/") ?
originalAuthority.substring(0,
originalAuthority.length() - 1) :
originalAuthority;
- final String path = originalPath.startsWith("/") ?
- originalPath.substring(1, originalPath.length()) :
- originalPath;
+ final String path = originalPath.startsWith("/") ?
originalPath.substring(1) : originalPath;
return URI.create(StringUtils.format("s3://%s/%s", authority, path));
}
diff --git
a/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3Utils.java
b/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3Utils.java
index ad13973..e0a3dac 100644
---
a/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3Utils.java
+++
b/extensions-core/s3-extensions/src/main/java/org/apache/druid/storage/s3/S3Utils.java
@@ -174,12 +174,12 @@ public class S3Utils
static String descriptorPathForSegmentPath(String s3Path)
{
- return s3Path.substring(0, s3Path.lastIndexOf("/")) + "/descriptor.json";
+ return s3Path.substring(0, s3Path.lastIndexOf('/')) + "/descriptor.json";
}
static String indexZipForSegmentPath(String s3Path)
{
- return s3Path.substring(0, s3Path.lastIndexOf("/")) + "/index.zip";
+ return s3Path.substring(0, s3Path.lastIndexOf('/')) + "/index.zip";
}
static String toFilename(String key)
@@ -189,7 +189,7 @@ public class S3Utils
static String toFilename(String key, final String suffix)
{
- String filename = key.substring(key.lastIndexOf("/") + 1); // characters
after last '/'
+ String filename = key.substring(key.lastIndexOf('/') + 1); // characters
after last '/'
filename = filename.substring(0, filename.length() - suffix.length()); //
remove the suffix from the end
return filename;
}
diff --git
a/extensions-core/s3-extensions/src/test/java/org/apache/druid/storage/s3/S3DataSegmentPusherTest.java
b/extensions-core/s3-extensions/src/test/java/org/apache/druid/storage/s3/S3DataSegmentPusherTest.java
index bc57e2a..5cacf1f 100644
---
a/extensions-core/s3-extensions/src/test/java/org/apache/druid/storage/s3/S3DataSegmentPusherTest.java
+++
b/extensions-core/s3-extensions/src/test/java/org/apache/druid/storage/s3/S3DataSegmentPusherTest.java
@@ -45,6 +45,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.regex.Pattern;
/**
*/
@@ -148,7 +149,7 @@ public class S3DataSegmentPusherTest
Assert.assertEquals("bucket", segment.getLoadSpec().get("bucket"));
Assert.assertTrue(
segment.getLoadSpec().get("key").toString(),
- segment.getLoadSpec().get("key").toString().matches(matcher)
+
Pattern.compile(matcher).matcher(segment.getLoadSpec().get("key").toString()).matches()
);
Assert.assertEquals("s3_zip", segment.getLoadSpec().get("type"));
diff --git
a/indexing-hadoop/src/main/java/org/apache/druid/indexer/HadoopDruidIndexerConfig.java
b/indexing-hadoop/src/main/java/org/apache/druid/indexer/HadoopDruidIndexerConfig.java
index d52db6e..4822e78 100644
---
a/indexing-hadoop/src/main/java/org/apache/druid/indexer/HadoopDruidIndexerConfig.java
+++
b/indexing-hadoop/src/main/java/org/apache/druid/indexer/HadoopDruidIndexerConfig.java
@@ -507,7 +507,7 @@ public class HadoopDruidIndexerConfig
"%s/%s/%s_%s",
getWorkingPath(),
schema.getDataSchema().getDataSource(),
- schema.getTuningConfig().getVersion().replace(":", ""),
+ StringUtils.removeChar(schema.getTuningConfig().getVersion(), ':'),
schema.getUniqueId()
)
);
@@ -547,7 +547,10 @@ public class HadoopDruidIndexerConfig
public Path makeDescriptorInfoPath(DataSegment segment)
{
- return new Path(makeDescriptorInfoDir(), StringUtils.format("%s.json",
segment.getIdentifier().replace(":", "")));
+ return new Path(
+ makeDescriptorInfoDir(),
+ StringUtils.removeChar(StringUtils.format("%s.json",
segment.getIdentifier()), ':')
+ );
}
public void addJobProperties(Job job)
diff --git
a/indexing-hadoop/src/main/java/org/apache/druid/indexer/JobHelper.java
b/indexing-hadoop/src/main/java/org/apache/druid/indexer/JobHelper.java
index 1a36459..59bc30d 100644
--- a/indexing-hadoop/src/main/java/org/apache/druid/indexer/JobHelper.java
+++ b/indexing-hadoop/src/main/java/org/apache/druid/indexer/JobHelper.java
@@ -766,7 +766,11 @@ public class JobHelper
// getHdfsStorageDir. But that wouldn't fix this issue for people who
already have segments with ":".
// Because of this we just URL encode the : making everything work as it
should.
segmentLocURI = URI.create(
- StringUtils.format("gs://%s/%s", loadSpec.get("bucket"),
loadSpec.get("path").toString().replace(":", "%3A"))
+ StringUtils.format(
+ "gs://%s/%s",
+ loadSpec.get("bucket"),
+ StringUtils.replaceChar(loadSpec.get("path").toString(), ':',
"%3A")
+ )
);
} else if ("local".equals(type)) {
try {
diff --git a/indexing-hadoop/src/main/java/org/apache/druid/indexer/Utils.java
b/indexing-hadoop/src/main/java/org/apache/druid/indexer/Utils.java
index 57883d6..c45b2b6 100644
--- a/indexing-hadoop/src/main/java/org/apache/druid/indexer/Utils.java
+++ b/indexing-hadoop/src/main/java/org/apache/druid/indexer/Utils.java
@@ -58,7 +58,7 @@ public class Utils
if (FileOutputFormat.getCompressOutput(job)) {
codecClass = FileOutputFormat.getOutputCompressorClass(job,
GzipCodec.class);
codec = ReflectionUtils.newInstance(codecClass, job.getConfiguration());
- outputPath = new Path(outputPath.toString() +
codec.getDefaultExtension());
+ outputPath = new Path(outputPath + codec.getDefaultExtension());
}
if (fs.exists(outputPath)) {
@@ -89,7 +89,7 @@ public class Utils
} else {
Class<? extends CompressionCodec> codecClass =
FileOutputFormat.getOutputCompressorClass(job, GzipCodec.class);
CompressionCodec codec = ReflectionUtils.newInstance(codecClass,
job.getConfiguration());
- return fs.exists(new Path(inputPath.toString() +
codec.getDefaultExtension()));
+ return fs.exists(new Path(inputPath + codec.getDefaultExtension()));
}
}
@@ -101,7 +101,7 @@ public class Utils
} else {
Class<? extends CompressionCodec> codecClass =
FileOutputFormat.getOutputCompressorClass(job, GzipCodec.class);
CompressionCodec codec = ReflectionUtils.newInstance(codecClass,
job.getConfiguration());
- inputPath = new Path(inputPath.toString() + codec.getDefaultExtension());
+ inputPath = new Path(inputPath + codec.getDefaultExtension());
return codec.createInputStream(fileSystem.open(inputPath));
}
diff --git
a/indexing-hadoop/src/main/java/org/apache/druid/indexer/updater/HadoopConverterJob.java
b/indexing-hadoop/src/main/java/org/apache/druid/indexer/updater/HadoopConverterJob.java
index f027577..174647d 100644
---
a/indexing-hadoop/src/main/java/org/apache/druid/indexer/updater/HadoopConverterJob.java
+++
b/indexing-hadoop/src/main/java/org/apache/druid/indexer/updater/HadoopConverterJob.java
@@ -141,7 +141,7 @@ public class HadoopConverterJob
public static Path getJobClassPathDir(String jobName, Path workingDirectory)
{
- return new Path(workingDirectory, jobName.replace(":", ""));
+ return new Path(workingDirectory, StringUtils.removeChar(jobName, ':'));
}
public static void cleanup(Job job) throws IOException
diff --git
a/indexing-hadoop/src/test/java/org/apache/druid/indexer/UtilsTest.java
b/indexing-hadoop/src/test/java/org/apache/druid/indexer/UtilsTest.java
index 6ba39dc..29e33a9 100644
--- a/indexing-hadoop/src/test/java/org/apache/druid/indexer/UtilsTest.java
+++ b/indexing-hadoop/src/test/java/org/apache/druid/indexer/UtilsTest.java
@@ -68,7 +68,7 @@ public class UtilsTest
@Override
public Object apply(Object input)
{
- return input.toString() + DUMMY_STRING;
+ return input + DUMMY_STRING;
}
}
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 7896ec8..8ee0a99 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
@@ -24,16 +24,20 @@ 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;
+import java.util.Objects;
+
public class StringEC2UserData implements EC2UserData<StringEC2UserData>
{
private final String data;
+ @Nullable
private final String versionReplacementString;
private final String version;
@JsonCreator
public StringEC2UserData(
@JsonProperty("data") String data,
- @JsonProperty("versionReplacementString") String
versionReplacementString,
+ @JsonProperty("versionReplacementString") @Nullable String
versionReplacementString,
@JsonProperty("version") String version
)
{
@@ -48,6 +52,7 @@ public class StringEC2UserData implements
EC2UserData<StringEC2UserData>
return data;
}
+ @Nullable
@JsonProperty
public String getVersionReplacementString()
{
@@ -71,7 +76,7 @@ public class StringEC2UserData implements
EC2UserData<StringEC2UserData>
{
final String finalData;
if (versionReplacementString != null && version != null) {
- finalData = data.replace(versionReplacementString, version);
+ finalData = StringUtils.replace(data, versionReplacementString, version);
} else {
finalData = data;
}
@@ -93,25 +98,16 @@ public class StringEC2UserData implements
EC2UserData<StringEC2UserData>
if (data != null ? !data.equals(that.data) : that.data != null) {
return false;
}
- if (version != null ? !version.equals(that.version) : that.version !=
null) {
- return false;
- }
- if (versionReplacementString != null
- ? !versionReplacementString.equals(that.versionReplacementString)
- : that.versionReplacementString != null) {
+ if (!Objects.equals(version, that.version)) {
return false;
}
-
- return true;
+ return Objects.equals(versionReplacementString,
that.versionReplacementString);
}
@Override
public int hashCode()
{
- int result = data != null ? data.hashCode() : 0;
- result = 31 * result + (versionReplacementString != null ?
versionReplacementString.hashCode() : 0);
- result = 31 * result + (version != null ? version.hashCode() : 0);
- return result;
+ return Objects.hash(data, versionReplacementString, version);
}
@Override
diff --git
a/indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java
b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java
index 6434dfe..a2be927 100644
---
a/indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java
+++
b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/http/OverlordResource.java
@@ -694,7 +694,7 @@ public class OverlordResource
if (state == null || "complete".equals(StringUtils.toLowerCase(state))) {
Duration duration = null;
if (interval != null) {
- final Interval theInterval = Intervals.of(interval.replace("_", "/"));
+ final Interval theInterval = Intervals.of(interval.replace('_', '/'));
duration = theInterval.toDuration();
}
final List<TaskInfo<Task, TaskStatus>> taskInfoList =
diff --git
a/indexing-service/src/test/java/org/apache/druid/indexing/common/task/MergeTaskBaseTest.java
b/indexing-service/src/test/java/org/apache/druid/indexing/common/task/MergeTaskBaseTest.java
index 0327513..ef14ba9 100644
---
a/indexing-service/src/test/java/org/apache/druid/indexing/common/task/MergeTaskBaseTest.java
+++
b/indexing-service/src/test/java/org/apache/druid/indexing/common/task/MergeTaskBaseTest.java
@@ -81,7 +81,7 @@ public class MergeTaskBaseTest
"_2012-01-04T00:00:00.000Z_2012-01-06T00:00:00.000Z_V1_0" +
"_2012-01-05T00:00:00.000Z_2012-01-07T00:00:00.000Z_V1_0",
StandardCharsets.UTF_8
- ).toString() +
+ ) +
"_";
Assert.assertEquals(
desiredPrefix,
diff --git
a/indexing-service/src/test/java/org/apache/druid/indexing/overlord/http/security/OverlordSecurityResourceFilterTest.java
b/indexing-service/src/test/java/org/apache/druid/indexing/overlord/http/security/OverlordSecurityResourceFilterTest.java
index 0a97709..27dd6a3 100644
---
a/indexing-service/src/test/java/org/apache/druid/indexing/overlord/http/security/OverlordSecurityResourceFilterTest.java
+++
b/indexing-service/src/test/java/org/apache/druid/indexing/overlord/http/security/OverlordSecurityResourceFilterTest.java
@@ -47,10 +47,12 @@ import org.junit.runners.Parameterized;
import java.util.Collection;
import java.util.List;
+import java.util.regex.Pattern;
@RunWith(Parameterized.class)
public class OverlordSecurityResourceFilterTest extends
ResourceFilterTestHelper
{
+ private static final Pattern WORD = Pattern.compile("\\w+");
@Parameterized.Parameters(name = "{index}: requestPath={0},
requestMethod={1}, resourceFilter={2}")
public static Collection<Object[]> data()
@@ -190,7 +192,7 @@ public class OverlordSecurityResourceFilterTest extends
ResourceFilterTestHelper
@Test
public void testDatasourcesResourcesFilteringBadPath()
{
- final String badRequestPath = requestPath.replaceAll("\\w+", "droid");
+ final String badRequestPath =
WORD.matcher(requestPath).replaceAll("droid");
EasyMock.expect(request.getPath()).andReturn(badRequestPath).anyTimes();
EasyMock.replay(req, request, authorizerMapper);
Assert.assertFalse(((AbstractResourceFilter)
resourceFilter.getRequestFilter()).isApplicable(badRequestPath));
diff --git
a/integration-tests/src/main/java/org/apache/druid/testing/clients/CoordinatorResourceTestClient.java
b/integration-tests/src/main/java/org/apache/druid/testing/clients/CoordinatorResourceTestClient.java
index a3a6683..c3145aa 100644
---
a/integration-tests/src/main/java/org/apache/druid/testing/clients/CoordinatorResourceTestClient.java
+++
b/integration-tests/src/main/java/org/apache/druid/testing/clients/CoordinatorResourceTestClient.java
@@ -165,7 +165,8 @@ public class CoordinatorResourceTestClient
StringUtils.format(
"%sdatasources/%s/intervals/%s",
getCoordinatorURL(),
- dataSource, interval.toString().replace("/", "_")
+ dataSource,
+ interval.toString().replace('/', '_')
)
);
}
diff --git
a/integration-tests/src/test/java/org/apache/druid/tests/hadoop/ITHadoopIndexTest.java
b/integration-tests/src/test/java/org/apache/druid/tests/hadoop/ITHadoopIndexTest.java
index 6e6b298..233add8 100644
---
a/integration-tests/src/test/java/org/apache/druid/tests/hadoop/ITHadoopIndexTest.java
+++
b/integration-tests/src/test/java/org/apache/druid/tests/hadoop/ITHadoopIndexTest.java
@@ -21,6 +21,7 @@ package org.apache.druid.tests.hadoop;
import com.google.common.base.Throwables;
import com.google.inject.Inject;
+import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.logger.Logger;
import org.apache.druid.testing.IntegrationTestingConfig;
import org.apache.druid.testing.guice.DruidTestModuleFactory;
@@ -65,7 +66,7 @@ public class ITHadoopIndexTest extends AbstractIndexerTest
try {
LOG.info("indexerFile name: [%s]", BATCH_TASK);
indexerSpec = getTaskAsString(BATCH_TASK);
- indexerSpec = indexerSpec.replaceAll("%%HADOOP_TEST_PATH%%", hadoopDir);
+ indexerSpec = StringUtils.replace(indexerSpec, "%%HADOOP_TEST_PATH%%",
hadoopDir);
}
catch (Exception e) {
LOG.error("could not read and modify indexer file: %s", e.getMessage());
diff --git
a/integration-tests/src/test/java/org/apache/druid/tests/indexer/AbstractITRealtimeIndexTaskTest.java
b/integration-tests/src/test/java/org/apache/druid/tests/indexer/AbstractITRealtimeIndexTaskTest.java
index 3d7802a..9bf9de2 100644
---
a/integration-tests/src/test/java/org/apache/druid/tests/indexer/AbstractITRealtimeIndexTaskTest.java
+++
b/integration-tests/src/test/java/org/apache/druid/tests/indexer/AbstractITRealtimeIndexTaskTest.java
@@ -107,17 +107,17 @@ public abstract class AbstractITRealtimeIndexTaskTest
extends AbstractIndexerTes
}
query_response_template = IOUtils.toString(is, "UTF-8");
- String queryStr = query_response_template
- .replace("%%TIMEBOUNDARY_RESPONSE_TIMESTAMP%%",
TIMESTAMP_FMT.print(dtFirst))
- .replace("%%TIMEBOUNDARY_RESPONSE_MAXTIME%%",
TIMESTAMP_FMT.print(dtLast))
- .replace("%%TIMEBOUNDARY_RESPONSE_MINTIME%%",
TIMESTAMP_FMT.print(dtFirst))
- .replace("%%TIMESERIES_QUERY_START%%", INTERVAL_FMT.print(dtFirst))
- .replace("%%TIMESERIES_QUERY_END%%",
INTERVAL_FMT.print(dtLast.plusMinutes(2)))
- .replace("%%TIMESERIES_RESPONSE_TIMESTAMP%%",
TIMESTAMP_FMT.print(dtFirst))
- .replace("%%POST_AG_REQUEST_START%%", INTERVAL_FMT.print(dtFirst))
- .replace("%%POST_AG_REQUEST_END%%",
INTERVAL_FMT.print(dtLast.plusMinutes(2)))
- .replace("%%POST_AG_RESPONSE_TIMESTAMP%%",
TIMESTAMP_FMT.print(dtGroupBy.withSecondOfMinute(0))
- );
+ String queryStr = query_response_template;
+ queryStr = StringUtils.replace(queryStr,
"%%TIMEBOUNDARY_RESPONSE_TIMESTAMP%%", TIMESTAMP_FMT.print(dtFirst));
+ queryStr = StringUtils.replace(queryStr,
"%%TIMEBOUNDARY_RESPONSE_MAXTIME%%", TIMESTAMP_FMT.print(dtLast));
+ queryStr = StringUtils.replace(queryStr,
"%%TIMEBOUNDARY_RESPONSE_MINTIME%%", TIMESTAMP_FMT.print(dtFirst));
+ queryStr = StringUtils.replace(queryStr, "%%TIMESERIES_QUERY_START%%",
INTERVAL_FMT.print(dtFirst));
+ queryStr = StringUtils.replace(queryStr, "%%TIMESERIES_QUERY_END%%",
INTERVAL_FMT.print(dtLast.plusMinutes(2)));
+ queryStr = StringUtils.replace(queryStr,
"%%TIMESERIES_RESPONSE_TIMESTAMP%%", TIMESTAMP_FMT.print(dtFirst));
+ queryStr = StringUtils.replace(queryStr, "%%POST_AG_REQUEST_START%%",
INTERVAL_FMT.print(dtFirst));
+ queryStr = StringUtils.replace(queryStr, "%%POST_AG_REQUEST_END%%",
INTERVAL_FMT.print(dtLast.plusMinutes(2)));
+ String postAgResponseTimestamp =
TIMESTAMP_FMT.print(dtGroupBy.withSecondOfMinute(0));
+ queryStr = StringUtils.replace(queryStr,
"%%POST_AG_RESPONSE_TIMESTAMP%%", postAgResponseTimestamp);
// should hit the queries all on realtime task or some on realtime task
// and some on historical. Which it is depends on where in the minute
we were
@@ -158,7 +158,7 @@ public abstract class AbstractITRealtimeIndexTaskTest
extends AbstractIndexerTes
String setShutOffTime(String taskAsString, DateTime time)
{
- return taskAsString.replace("#SHUTOFFTIME", time.toString());
+ return StringUtils.replace(taskAsString, "#SHUTOFFTIME", time.toString());
}
String getRouterURL()
diff --git
a/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITAppenderatorDriverRealtimeIndexTaskTest.java
b/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITAppenderatorDriverRealtimeIndexTaskTest.java
index bdd0df7..54d28d9 100644
---
a/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITAppenderatorDriverRealtimeIndexTaskTest.java
+++
b/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITAppenderatorDriverRealtimeIndexTaskTest.java
@@ -22,6 +22,7 @@ import com.google.common.base.Throwables;
import org.apache.druid.curator.discovery.ServerDiscoverySelector;
import org.apache.druid.java.util.common.DateTimes;
import org.apache.druid.java.util.common.ISE;
+import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.jackson.JacksonUtils;
import org.apache.druid.java.util.common.logger.Logger;
import org.apache.druid.testing.clients.EventReceiverFirehoseTestClient;
@@ -99,7 +100,7 @@ public class ITAppenderatorDriverRealtimeIndexTaskTest
extends AbstractITRealtim
} else if (i == 18) { // use a time 6 seconds ago so it will be out of
order
dt = dt.minusSeconds(6);
}
- String event = line.replace(TIME_PLACEHOLDER, EVENT_FMT.print(dt));
+ String event = StringUtils.replace(line, TIME_PLACEHOLDER,
EVENT_FMT.print(dt));
LOG.info("sending event: [%s]\n", event);
Collection<Map<String, Object>> events = new ArrayList<Map<String,
Object>>();
events.add(this.jsonMapper.readValue(event,
JacksonUtils.TYPE_REFERENCE_MAP_STRING_OBJECT));
diff --git
a/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITCompactionTaskTest.java
b/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITCompactionTaskTest.java
index 0901d39..5ae32fa 100644
---
a/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITCompactionTaskTest.java
+++
b/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITCompactionTaskTest.java
@@ -20,6 +20,7 @@
package org.apache.druid.tests.indexer;
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.druid.testing.guice.DruidTestModuleFactory;
import org.apache.druid.testing.utils.RetryUtil;
@@ -95,7 +96,8 @@ public class ITCompactionTaskTest extends AbstractIndexerTest
private void compactData(boolean keepSegmentGranularity) throws Exception
{
final String template = getTaskAsString(COMPACTION_TASK);
- final String taskSpec = template.replace("${KEEP_SEGMENT_GRANULARITY}",
Boolean.toString(keepSegmentGranularity));
+ final String taskSpec =
+ StringUtils.replace(template, "${KEEP_SEGMENT_GRANULARITY}",
Boolean.toString(keepSegmentGranularity));
final String taskID = indexer.submitTask(taskSpec);
LOG.info("TaskID for compaction task %s", taskID);
indexer.waitUntilTaskCompletes(taskID);
diff --git
a/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITKafkaIndexingServiceTest.java
b/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITKafkaIndexingServiceTest.java
index 4766e0f..3306da9 100644
---
a/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITKafkaIndexingServiceTest.java
+++
b/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITKafkaIndexingServiceTest.java
@@ -142,10 +142,10 @@ public class ITKafkaIndexingServiceTest extends
AbstractIndexerTest
consumerProperties.put("bootstrap.servers",
config.getKafkaInternalHost());
addFilteredProperties(consumerProperties);
- spec = getTaskAsString(INDEXER_FILE)
- .replaceAll("%%DATASOURCE%%", DATASOURCE)
- .replaceAll("%%TOPIC%%", TOPIC_NAME)
- .replaceAll("%%CONSUMER_PROPERTIES%%",
jsonMapper.writeValueAsString(consumerProperties));
+ spec = getTaskAsString(INDEXER_FILE);
+ spec = StringUtils.replace(spec, "%%DATASOURCE%%", DATASOURCE);
+ spec = StringUtils.replace(spec, "%%TOPIC%%", TOPIC_NAME);
+ spec = StringUtils.replace(spec, "%%CONSUMER_PROPERTIES%%",
jsonMapper.writeValueAsString(consumerProperties));
LOG.info("supervisorSpec: [%s]\n", spec);
}
catch (Exception e) {
@@ -227,16 +227,16 @@ public class ITKafkaIndexingServiceTest extends
AbstractIndexerTest
throw new ISE(e, "could not read query file: %s", QUERIES_FILE);
}
- String queryStr = query_response_template
- .replaceAll("%%DATASOURCE%%", DATASOURCE)
- .replace("%%TIMEBOUNDARY_RESPONSE_TIMESTAMP%%",
TIMESTAMP_FMT.print(dtFirst))
- .replace("%%TIMEBOUNDARY_RESPONSE_MAXTIME%%",
TIMESTAMP_FMT.print(dtLast))
- .replace("%%TIMEBOUNDARY_RESPONSE_MINTIME%%",
TIMESTAMP_FMT.print(dtFirst))
- .replace("%%TIMESERIES_QUERY_START%%", INTERVAL_FMT.print(dtFirst))
- .replace("%%TIMESERIES_QUERY_END%%",
INTERVAL_FMT.print(dtLast.plusMinutes(2)))
- .replace("%%TIMESERIES_RESPONSE_TIMESTAMP%%",
TIMESTAMP_FMT.print(dtFirst))
- .replace("%%TIMESERIES_ADDED%%", Integer.toString(added))
- .replace("%%TIMESERIES_NUMEVENTS%%", Integer.toString(num_events));
+ String queryStr = query_response_template;
+ queryStr = StringUtils.replace(queryStr, "%%DATASOURCE%%", DATASOURCE);
+ queryStr = StringUtils.replace(queryStr,
"%%TIMEBOUNDARY_RESPONSE_TIMESTAMP%%", TIMESTAMP_FMT.print(dtFirst));
+ queryStr = StringUtils.replace(queryStr,
"%%TIMEBOUNDARY_RESPONSE_MAXTIME%%", TIMESTAMP_FMT.print(dtLast));
+ queryStr = StringUtils.replace(queryStr,
"%%TIMEBOUNDARY_RESPONSE_MINTIME%%", TIMESTAMP_FMT.print(dtFirst));
+ queryStr = StringUtils.replace(queryStr, "%%TIMESERIES_QUERY_START%%",
INTERVAL_FMT.print(dtFirst));
+ queryStr = StringUtils.replace(queryStr, "%%TIMESERIES_QUERY_END%%",
INTERVAL_FMT.print(dtLast.plusMinutes(2)));
+ queryStr = StringUtils.replace(queryStr,
"%%TIMESERIES_RESPONSE_TIMESTAMP%%", TIMESTAMP_FMT.print(dtFirst));
+ queryStr = StringUtils.replace(queryStr, "%%TIMESERIES_ADDED%%",
Integer.toString(added));
+ queryStr = StringUtils.replace(queryStr, "%%TIMESERIES_NUMEVENTS%%",
Integer.toString(num_events));
// this query will probably be answered from the indexing tasks but
possibly from 2 historical segments / 2 indexing
try {
diff --git
a/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITKafkaTest.java
b/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITKafkaTest.java
index 4078984..3388efe 100644
---
a/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITKafkaTest.java
+++
b/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITKafkaTest.java
@@ -203,11 +203,12 @@ public class ITKafkaTest extends AbstractIndexerTest
addFilteredProperties(consumerProperties);
- indexerSpec = getTaskAsString(INDEXER_FILE)
- .replaceAll("%%DATASOURCE%%", DATASOURCE)
- .replaceAll("%%TOPIC%%", TOPIC_NAME)
- .replaceAll("%%COUNT%%", Integer.toString(num_events))
- .replaceAll("%%CONSUMER_PROPERTIES%%",
jsonMapper.writeValueAsString(consumerProperties));
+ indexerSpec = getTaskAsString(INDEXER_FILE);
+ indexerSpec = StringUtils.replace(indexerSpec, "%%DATASOURCE%%",
DATASOURCE);
+ indexerSpec = StringUtils.replace(indexerSpec, "%%TOPIC%%", TOPIC_NAME);
+ indexerSpec = StringUtils.replace(indexerSpec, "%%COUNT%%",
Integer.toString(num_events));
+ String consumerPropertiesJson =
jsonMapper.writeValueAsString(consumerProperties);
+ indexerSpec = StringUtils.replace(indexerSpec,
"%%CONSUMER_PROPERTIES%%", consumerPropertiesJson);
LOG.info("indexerFile: [%s]\n", indexerSpec);
}
@@ -261,18 +262,19 @@ public class ITKafkaTest extends AbstractIndexerTest
throw new ISE(e, "could not read query file: %s", QUERIES_FILE);
}
- String queryStr = queryResponseTemplate
- .replaceAll("%%DATASOURCE%%", DATASOURCE)
- // time boundary
- .replace("%%TIMEBOUNDARY_RESPONSE_TIMESTAMP%%",
TIMESTAMP_FMT.print(dtFirst))
- .replace("%%TIMEBOUNDARY_RESPONSE_MAXTIME%%",
TIMESTAMP_FMT.print(dtLast))
- .replace("%%TIMEBOUNDARY_RESPONSE_MINTIME%%",
TIMESTAMP_FMT.print(dtFirst))
- // time series
- .replace("%%TIMESERIES_QUERY_START%%", INTERVAL_FMT.print(dtFirst))
- .replace("%%TIMESERIES_QUERY_END%%",
INTERVAL_FMT.print(dtFirst.plusMinutes(MINUTES_TO_SEND + 2)))
- .replace("%%TIMESERIES_RESPONSE_TIMESTAMP%%",
TIMESTAMP_FMT.print(dtFirst))
- .replace("%%TIMESERIES_ADDED%%", Integer.toString(added))
- .replace("%%TIMESERIES_NUMEVENTS%%", Integer.toString(num_events));
+ String queryStr = queryResponseTemplate;
+ queryStr = StringUtils.replace(queryStr, "%%DATASOURCE%%", DATASOURCE);
+ // time boundary
+ queryStr = StringUtils.replace(queryStr,
"%%TIMEBOUNDARY_RESPONSE_TIMESTAMP%%", TIMESTAMP_FMT.print(dtFirst));
+ queryStr = StringUtils.replace(queryStr,
"%%TIMEBOUNDARY_RESPONSE_MAXTIME%%", TIMESTAMP_FMT.print(dtLast));
+ queryStr = StringUtils.replace(queryStr,
"%%TIMEBOUNDARY_RESPONSE_MINTIME%%", TIMESTAMP_FMT.print(dtFirst));
+ // time series
+ queryStr = StringUtils.replace(queryStr, "%%TIMESERIES_QUERY_START%%",
INTERVAL_FMT.print(dtFirst));
+ String queryEnd = INTERVAL_FMT.print(dtFirst.plusMinutes(MINUTES_TO_SEND +
2));
+ queryStr = StringUtils.replace(queryStr, "%%TIMESERIES_QUERY_END%%",
queryEnd);
+ queryStr = StringUtils.replace(queryStr,
"%%TIMESERIES_RESPONSE_TIMESTAMP%%", TIMESTAMP_FMT.print(dtFirst));
+ queryStr = StringUtils.replace(queryStr, "%%TIMESERIES_ADDED%%",
Integer.toString(added));
+ queryStr = StringUtils.replace(queryStr, "%%TIMESERIES_NUMEVENTS%%",
Integer.toString(num_events));
// this query will probably be answered from the realtime task
try {
diff --git
a/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITRealtimeIndexTaskTest.java
b/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITRealtimeIndexTaskTest.java
index af30db3..7dfeee1 100644
---
a/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITRealtimeIndexTaskTest.java
+++
b/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITRealtimeIndexTaskTest.java
@@ -23,6 +23,7 @@ import com.google.common.base.Throwables;
import org.apache.druid.curator.discovery.ServerDiscoverySelector;
import org.apache.druid.java.util.common.DateTimes;
import org.apache.druid.java.util.common.ISE;
+import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.jackson.JacksonUtils;
import org.apache.druid.java.util.common.logger.Logger;
import org.apache.druid.testing.clients.EventReceiverFirehoseTestClient;
@@ -111,7 +112,7 @@ public class ITRealtimeIndexTaskTest extends
AbstractITRealtimeIndexTaskTest
} else if (i == 18) { // use a time 6 seconds ago so it will be out of
order
dt = dt.minusSeconds(6);
}
- String event = line.replace(TIME_PLACEHOLDER, EVENT_FMT.print(dt));
+ String event = StringUtils.replace(line, TIME_PLACEHOLDER,
EVENT_FMT.print(dt));
LOG.info("sending event: [%s]\n", event);
Collection<Map<String, Object>> events = new ArrayList<Map<String,
Object>>();
events.add(this.jsonMapper.readValue(event,
JacksonUtils.TYPE_REFERENCE_MAP_STRING_OBJECT));
diff --git
a/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITUnionQueryTest.java
b/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITUnionQueryTest.java
index 5935efb..38adae8 100644
---
a/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITUnionQueryTest.java
+++
b/integration-tests/src/test/java/org/apache/druid/tests/indexer/ITUnionQueryTest.java
@@ -157,17 +157,17 @@ public class ITUnionQueryTest extends AbstractIndexerTest
private String setShutOffTime(String taskAsString, DateTime time)
{
- return taskAsString.replace("#SHUTOFFTIME", time.toString());
+ return StringUtils.replace(taskAsString, "#SHUTOFFTIME", time.toString());
}
private String withDataSource(String taskAsString, String dataSource)
{
- return taskAsString.replace(UNION_DATASOURCE, dataSource);
+ return StringUtils.replace(taskAsString, UNION_DATASOURCE, dataSource);
}
private String withServiceName(String taskAsString, String serviceName)
{
- return taskAsString.replace(EVENT_RECEIVER_SERVICE_PREFIX, serviceName);
+ return StringUtils.replace(taskAsString, EVENT_RECEIVER_SERVICE_PREFIX,
serviceName);
}
public void postEvents(int id) throws Exception
diff --git a/pom.xml b/pom.xml
index 17a1275..df30dd7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -933,7 +933,7 @@
<plugin>
<groupId>de.thetaphi</groupId>
<artifactId>forbiddenapis</artifactId>
- <version>2.3</version>
+ <version>2.6</version>
<configuration>
<failOnUnresolvableSignatures>false</failOnUnresolvableSignatures>
<bundledSignatures>
diff --git
a/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedConciseBitmap.java
b/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedConciseBitmap.java
index ee50739..f0e0cfa 100644
---
a/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedConciseBitmap.java
+++
b/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedConciseBitmap.java
@@ -94,7 +94,7 @@ public class WrappedConciseBitmap implements MutableBitmap
@Override
public String toString()
{
- return getClass().getSimpleName() + bitmap.toString();
+ return getClass().getSimpleName() + bitmap;
}
@Override
diff --git
a/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedImmutableConciseBitmap.java
b/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedImmutableConciseBitmap.java
index 19d3ac3..85e0a54 100644
---
a/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedImmutableConciseBitmap.java
+++
b/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedImmutableConciseBitmap.java
@@ -67,7 +67,7 @@ public class WrappedImmutableConciseBitmap implements
ImmutableBitmap
@Override
public String toString()
{
- return getClass().getSimpleName() + bitmap.toString();
+ return getClass().getSimpleName() + bitmap;
}
@Override
diff --git
a/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedImmutableRoaringBitmap.java
b/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedImmutableRoaringBitmap.java
index f689e81..50946ca 100644
---
a/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedImmutableRoaringBitmap.java
+++
b/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedImmutableRoaringBitmap.java
@@ -70,7 +70,7 @@ public class WrappedImmutableRoaringBitmap implements
ImmutableBitmap
@Override
public String toString()
{
- return getClass().getSimpleName() + bitmap.toString();
+ return getClass().getSimpleName() + bitmap;
}
@Override
diff --git
a/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedRoaringBitmap.java
b/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedRoaringBitmap.java
index de06d2b..bf20138 100644
---
a/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedRoaringBitmap.java
+++
b/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedRoaringBitmap.java
@@ -180,7 +180,7 @@ public class WrappedRoaringBitmap implements MutableBitmap
@Override
public String toString()
{
- return getClass().getSimpleName() + bitmap.toString();
+ return getClass().getSimpleName() + bitmap;
}
@Override
diff --git
a/processing/src/main/java/org/apache/druid/query/extraction/CascadeExtractionFn.java
b/processing/src/main/java/org/apache/druid/query/extraction/CascadeExtractionFn.java
index d03ff75..6564eac 100644
---
a/processing/src/main/java/org/apache/druid/query/extraction/CascadeExtractionFn.java
+++
b/processing/src/main/java/org/apache/druid/query/extraction/CascadeExtractionFn.java
@@ -178,8 +178,7 @@ public class CascadeExtractionFn implements ExtractionFn
@Override
public String toString()
{
- return "CascadeExtractionFn{" +
- "extractionFns=[" + chainedExtractionFn.toString() + "]}";
+ return "CascadeExtractionFn{extractionFns=[" + chainedExtractionFn + "]}";
}
private static class ChainedExtractionFn
diff --git
a/processing/src/main/java/org/apache/druid/query/monomorphicprocessing/StringRuntimeShape.java
b/processing/src/main/java/org/apache/druid/query/monomorphicprocessing/StringRuntimeShape.java
index 8c695b9..d08dfe4 100644
---
a/processing/src/main/java/org/apache/druid/query/monomorphicprocessing/StringRuntimeShape.java
+++
b/processing/src/main/java/org/apache/druid/query/monomorphicprocessing/StringRuntimeShape.java
@@ -119,7 +119,7 @@ public final class StringRuntimeShape
private void appendByteBufferShape(ByteBuffer byteBuffer)
{
sb.append(" {order: ");
- sb.append(byteBuffer.order().toString());
+ sb.append(byteBuffer.order());
sb.append('}');
}
diff --git
a/processing/src/main/java/org/apache/druid/query/search/BySegmentSearchResultValue.java
b/processing/src/main/java/org/apache/druid/query/search/BySegmentSearchResultValue.java
index bbb3a68..fc5efcf 100644
---
a/processing/src/main/java/org/apache/druid/query/search/BySegmentSearchResultValue.java
+++
b/processing/src/main/java/org/apache/druid/query/search/BySegmentSearchResultValue.java
@@ -83,7 +83,7 @@ public class BySegmentSearchResultValue extends
SearchResultValue
return "BySegmentSearchResultValue{" +
"results=" + results +
", segmentId='" + segmentId + '\'' +
- ", interval='" + interval.toString() + '\'' +
+ ", interval='" + interval + '\'' +
'}';
}
}
diff --git
a/processing/src/main/java/org/apache/druid/query/topn/BySegmentTopNResultValue.java
b/processing/src/main/java/org/apache/druid/query/topn/BySegmentTopNResultValue.java
index 0d82507..cc42610 100644
---
a/processing/src/main/java/org/apache/druid/query/topn/BySegmentTopNResultValue.java
+++
b/processing/src/main/java/org/apache/druid/query/topn/BySegmentTopNResultValue.java
@@ -85,7 +85,7 @@ public class BySegmentTopNResultValue extends TopNResultValue
implements BySegme
return "BySegmentTopNResultValue{" +
"results=" + results +
", segmentId='" + segmentId + '\'' +
- ", interval='" + interval.toString() + '\'' +
+ ", interval='" + interval + '\'' +
'}';
}
}
diff --git
a/processing/src/test/java/org/apache/druid/collections/bitmap/BitmapBenchmark.java
b/processing/src/test/java/org/apache/druid/collections/bitmap/BitmapBenchmark.java
index 81874b5..e7c3fba 100644
---
a/processing/src/test/java/org/apache/druid/collections/bitmap/BitmapBenchmark.java
+++
b/processing/src/test/java/org/apache/druid/collections/bitmap/BitmapBenchmark.java
@@ -100,9 +100,9 @@ public class BitmapBenchmark
protected static void printSizeStats(double density, String name)
{
- System.out.println("");
+ System.out.println();
System.out.println("## " + name);
- System.out.println("");
+ System.out.println();
System.out.printf(Locale.ENGLISH, " d = %06.5f | Concise | Roaring%n",
density);
System.out.println("-------------|---------|---------");
System.out.printf(Locale.ENGLISH, "Count | %5d | %5d %n",
conciseCount, roaringCount);
diff --git
a/processing/src/test/java/org/apache/druid/segment/filter/BaseFilterTest.java
b/processing/src/test/java/org/apache/druid/segment/filter/BaseFilterTest.java
index 100adf0..9200ec4 100644
---
a/processing/src/test/java/org/apache/druid/segment/filter/BaseFilterTest.java
+++
b/processing/src/test/java/org/apache/druid/segment/filter/BaseFilterTest.java
@@ -414,22 +414,22 @@ public abstract class BaseFilterTest
)
{
Assert.assertEquals(
- "Cursor: " + filter.toString(),
+ "Cursor: " + filter,
expectedRows,
selectColumnValuesMatchingFilter(filter, "dim0")
);
Assert.assertEquals(
- "Cursor with postFiltering: " + filter.toString(),
+ "Cursor with postFiltering: " + filter,
expectedRows,
selectColumnValuesMatchingFilterUsingPostFiltering(filter, "dim0")
);
Assert.assertEquals(
- "Filtered aggregator: " + filter.toString(),
+ "Filtered aggregator: " + filter,
expectedRows.size(),
selectCountUsingFilteredAggregator(filter)
);
Assert.assertEquals(
- "RowBasedColumnSelectorFactory: " + filter.toString(),
+ "RowBasedColumnSelectorFactory: " + filter,
expectedRows,
selectColumnValuesMatchingFilterUsingRowBasedColumnSelectorFactory(filter,
"dim0")
);
diff --git
a/server/src/main/java/org/apache/druid/client/coordinator/CoordinatorClient.java
b/server/src/main/java/org/apache/druid/client/coordinator/CoordinatorClient.java
index 0450af4..4f59d87 100644
---
a/server/src/main/java/org/apache/druid/client/coordinator/CoordinatorClient.java
+++
b/server/src/main/java/org/apache/druid/client/coordinator/CoordinatorClient.java
@@ -58,7 +58,7 @@ public class CoordinatorClient
StringUtils.format(
"/druid/coordinator/v1/datasources/%s/intervals/%s/serverview?partial=%s",
dataSource,
- interval.toString().replace("/",
"_"),
+ interval.toString().replace('/',
'_'),
incompleteOk
))
);
diff --git
a/server/src/main/java/org/apache/druid/curator/discovery/CuratorServiceUtils.java
b/server/src/main/java/org/apache/druid/curator/discovery/CuratorServiceUtils.java
index 60c51e3..1513d9f 100644
---
a/server/src/main/java/org/apache/druid/curator/discovery/CuratorServiceUtils.java
+++
b/server/src/main/java/org/apache/druid/curator/discovery/CuratorServiceUtils.java
@@ -42,6 +42,6 @@ public class CuratorServiceUtils
*/
protected static String makeCanonicalServiceName(String serviceName)
{
- return serviceName.replaceAll("/", ":");
+ return serviceName.replace('/', ':');
}
}
diff --git
a/server/src/main/java/org/apache/druid/segment/loading/LocalDataSegmentPusher.java
b/server/src/main/java/org/apache/druid/segment/loading/LocalDataSegmentPusher.java
index 6891350..bdddfaf 100644
---
a/server/src/main/java/org/apache/druid/segment/loading/LocalDataSegmentPusher.java
+++
b/server/src/main/java/org/apache/druid/segment/loading/LocalDataSegmentPusher.java
@@ -135,7 +135,7 @@ public class LocalDataSegmentPusher implements
DataSegmentPusher
private String makeIntermediateDir()
{
- return "intermediate_pushes/" + UUID.randomUUID().toString();
+ return "intermediate_pushes/" + UUID.randomUUID();
}
private long compressSegment(File dataSegmentFile, File dest) throws
IOException
diff --git
a/server/src/main/java/org/apache/druid/segment/realtime/firehose/EventReceiverFirehoseFactory.java
b/server/src/main/java/org/apache/druid/segment/realtime/firehose/EventReceiverFirehoseFactory.java
index 94e2c6c..3abf0c4 100644
---
a/server/src/main/java/org/apache/druid/segment/realtime/firehose/EventReceiverFirehoseFactory.java
+++
b/server/src/main/java/org/apache/druid/segment/realtime/firehose/EventReceiverFirehoseFactory.java
@@ -138,8 +138,9 @@ public class EventReceiverFirehoseFactory implements
FirehoseFactory<InputRowPar
if (chatHandlerProvider.isPresent()) {
log.info("Found chathandler of class[%s]",
chatHandlerProvider.get().getClass().getName());
chatHandlerProvider.get().register(serviceName, firehose);
- if (serviceName.contains(":")) {
- chatHandlerProvider.get().register(serviceName.replaceAll(".*:", ""),
firehose); // rofl
+ int lastIndexOfColon = serviceName.lastIndexOf(':');
+ if (lastIndexOfColon > 0) {
+
chatHandlerProvider.get().register(serviceName.substring(lastIndexOfColon + 1),
firehose);
}
} else {
log.warn("No chathandler detected");
diff --git
a/server/src/main/java/org/apache/druid/segment/realtime/plumber/RealtimePlumber.java
b/server/src/main/java/org/apache/druid/segment/realtime/plumber/RealtimePlumber.java
index 8d80f60..b0453d9 100644
---
a/server/src/main/java/org/apache/druid/segment/realtime/plumber/RealtimePlumber.java
+++
b/server/src/main/java/org/apache/druid/segment/realtime/plumber/RealtimePlumber.java
@@ -625,7 +625,7 @@ public class RealtimePlumber implements Plumber
Object metadata = null;
long latestCommitTime = 0;
for (File sinkDir : files) {
- final Interval sinkInterval =
Intervals.of(sinkDir.getName().replace("_", "/"));
+ final Interval sinkInterval =
Intervals.of(sinkDir.getName().replace('_', '/'));
//final File[] sinkFiles = sinkDir.listFiles();
// To avoid reading and listing of "merged" dir
@@ -921,14 +921,17 @@ public class RealtimePlumber implements Plumber
protected File computeCorruptedFileDumpDir(File persistDir, DataSchema
schema)
{
return new File(
- persistDir.getAbsolutePath()
- .replace(schema.getDataSource(), "corrupted" +
File.pathSeparator + schema.getDataSource())
+ StringUtils.replace(
+ persistDir.getAbsolutePath(),
+ schema.getDataSource(),
+ "corrupted" + File.pathSeparator + schema.getDataSource()
+ )
);
}
protected File computePersistDir(DataSchema schema, Interval interval)
{
- return new File(computeBaseDir(schema), interval.toString().replace("/",
"_"));
+ return new File(computeBaseDir(schema), interval.toString().replace('/',
'_'));
}
/**
diff --git
a/server/src/main/java/org/apache/druid/server/coordination/ServerType.java
b/server/src/main/java/org/apache/druid/server/coordination/ServerType.java
index 240cee6..d1b7fd1 100644
--- a/server/src/main/java/org/apache/druid/server/coordination/ServerType.java
+++ b/server/src/main/java/org/apache/druid/server/coordination/ServerType.java
@@ -86,13 +86,13 @@ public enum ServerType
@JsonCreator
public static ServerType fromString(String type)
{
- return ServerType.valueOf(StringUtils.toUpperCase(type).replace("-", "_"));
+ return ServerType.valueOf(StringUtils.toUpperCase(type).replace('-', '_'));
}
@Override
@JsonValue
public String toString()
{
- return StringUtils.toLowerCase(name()).replace("_", "-");
+ return StringUtils.toLowerCase(name()).replace('_', '-');
}
}
diff --git
a/server/src/main/java/org/apache/druid/server/http/DatasourcesResource.java
b/server/src/main/java/org/apache/druid/server/http/DatasourcesResource.java
index 77ca931..450dbd4 100644
--- a/server/src/main/java/org/apache/druid/server/http/DatasourcesResource.java
+++ b/server/src/main/java/org/apache/druid/server/http/DatasourcesResource.java
@@ -243,7 +243,7 @@ public class DatasourcesResource
if (indexingServiceClient == null) {
return Response.ok(ImmutableMap.of("error", "no indexing service
found")).build();
}
- final Interval theInterval = Intervals.of(interval.replace("_", "/"));
+ final Interval theInterval = Intervals.of(interval.replace('_', '/'));
try {
indexingServiceClient.killSegments(dataSourceName, theInterval);
}
@@ -336,7 +336,7 @@ public class DatasourcesResource
)
{
final ImmutableDruidDataSource dataSource = getDataSource(dataSourceName);
- final Interval theInterval = Intervals.of(interval.replace("_", "/"));
+ final Interval theInterval = Intervals.of(interval.replace('_', '/'));
if (dataSource == null) {
return Response.noContent().build();
@@ -629,7 +629,7 @@ public class DatasourcesResource
TimelineLookup<String, SegmentLoadInfo> timeline =
serverInventoryView.getTimeline(
new TableDataSource(dataSourceName)
);
- final Interval theInterval = Intervals.of(interval.replace("_", "/"));
+ final Interval theInterval = Intervals.of(interval.replace('_', '/'));
if (timeline == null) {
log.debug("No timeline found for datasource[%s]", dataSourceName);
return Response.ok(new ArrayList<ImmutableSegmentLoadInfo>()).build();
diff --git
a/server/src/main/java/org/apache/druid/server/http/IntervalsResource.java
b/server/src/main/java/org/apache/druid/server/http/IntervalsResource.java
index 5635794..957075a 100644
--- a/server/src/main/java/org/apache/druid/server/http/IntervalsResource.java
+++ b/server/src/main/java/org/apache/druid/server/http/IntervalsResource.java
@@ -98,7 +98,7 @@ public class IntervalsResource
@Context final HttpServletRequest req
)
{
- final Interval theInterval = Intervals.of(interval.replace("_", "/"));
+ final Interval theInterval = Intervals.of(interval.replace('_', '/'));
final Set<ImmutableDruidDataSource> datasources =
InventoryViewUtils.getSecuredDataSources(
req,
serverInventoryView,
diff --git
a/server/src/main/java/org/apache/druid/server/metrics/MonitorsConfig.java
b/server/src/main/java/org/apache/druid/server/metrics/MonitorsConfig.java
index 7130070..9d9241b 100644
--- a/server/src/main/java/org/apache/druid/server/metrics/MonitorsConfig.java
+++ b/server/src/main/java/org/apache/druid/server/metrics/MonitorsConfig.java
@@ -21,6 +21,7 @@ package org.apache.druid.server.metrics;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.collect.ImmutableMap;
+import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.logger.Logger;
import org.apache.druid.java.util.metrics.Monitor;
import org.apache.druid.query.DruidMetrics;
@@ -115,9 +116,11 @@ public class MonitorsConfig
}
try {
for (String monitorName : monitorNames) {
- String effectiveMonitorName = monitorName
- .replace(METAMX_PACKAGE, APACHE_DRUID_PACKAGE_NAME)
- .replace(IO_DRUID_PACKAGE, APACHE_DRUID_PACKAGE_NAME);
+ final String effectiveMonitorName = StringUtils.replace(
+ StringUtils.replace(monitorName, METAMX_PACKAGE,
APACHE_DRUID_PACKAGE_NAME),
+ IO_DRUID_PACKAGE,
+ APACHE_DRUID_PACKAGE_NAME
+ );
if (!effectiveMonitorName.equals(monitorName)) {
log.warn(
"Deprecated Monitor class name[%s] found, please use name[%s]
instead.",
diff --git a/server/src/test/java/org/apache/druid/curator/CuratorTestBase.java
b/server/src/test/java/org/apache/druid/curator/CuratorTestBase.java
index bf08087..40a039a 100644
--- a/server/src/test/java/org/apache/druid/curator/CuratorTestBase.java
+++ b/server/src/test/java/org/apache/druid/curator/CuratorTestBase.java
@@ -146,7 +146,7 @@ public class CuratorTestBase
druidServer.getType().toString(),
druidServer.getTier(),
DateTimes.nowUtc().toString()
- ) + String.valueOf(batchCtr++)
+ ) + (batchCtr++)
);
diff --git
a/server/src/test/java/org/apache/druid/curator/discovery/ServiceAnnouncerTest.java
b/server/src/test/java/org/apache/druid/curator/discovery/ServiceAnnouncerTest.java
index 1aa8e17..57f7517 100644
---
a/server/src/test/java/org/apache/druid/curator/discovery/ServiceAnnouncerTest.java
+++
b/server/src/test/java/org/apache/druid/curator/discovery/ServiceAnnouncerTest.java
@@ -62,7 +62,7 @@ public class ServiceAnnouncerTest extends CuratorTestBase
public boolean apply(String input)
{
try {
- return
serviceDiscovery.queryForInstances(input.replaceAll("/", ":")).size() == 1;
+ return serviceDiscovery.queryForInstances(input.replace('/',
':')).size() == 1;
}
catch (Exception e) {
throw new ISE(
diff --git
a/server/src/test/java/org/apache/druid/metadata/TestDerbyConnector.java
b/server/src/test/java/org/apache/druid/metadata/TestDerbyConnector.java
index 199720b..e5460ce 100644
--- a/server/src/test/java/org/apache/druid/metadata/TestDerbyConnector.java
+++ b/server/src/test/java/org/apache/druid/metadata/TestDerbyConnector.java
@@ -67,7 +67,7 @@ public class TestDerbyConnector extends DerbyConnector
public static String dbSafeUUID()
{
- return UUID.randomUUID().toString().replace("-", "");
+ return StringUtils.removeChar(UUID.randomUUID().toString(), '-');
}
public String getJdbcUri()
diff --git
a/server/src/test/java/org/apache/druid/segment/loading/LocalDataSegmentPusherTest.java
b/server/src/test/java/org/apache/druid/segment/loading/LocalDataSegmentPusherTest.java
index 9d79c07..6bfca90 100644
---
a/server/src/test/java/org/apache/druid/segment/loading/LocalDataSegmentPusherTest.java
+++
b/server/src/test/java/org/apache/druid/segment/loading/LocalDataSegmentPusherTest.java
@@ -39,6 +39,7 @@ import org.junit.rules.TemporaryFolder;
import java.io.File;
import java.io.IOException;
+import java.util.regex.Pattern;
public class LocalDataSegmentPusherTest
{
@@ -124,8 +125,10 @@ public class LocalDataSegmentPusherTest
DataSegment segment = localDataSegmentPusher.push(dataSegmentFiles,
dataSegment, true);
String path = segment.getLoadSpec().get("path").toString();
- String matcher =
".*/ds/1970-01-01T00:00:00\\.000Z_1970-01-01T00:00:00\\.001Z/v1/0/[A-Za-z0-9-]{36}/index\\.zip";
- Assert.assertTrue(path, path.matches(matcher));
+ Pattern pattern = Pattern.compile(
+
".*/ds/1970-01-01T00:00:00\\.000Z_1970-01-01T00:00:00\\.001Z/v1/0/[A-Za-z0-9-]{36}/index\\.zip"
+ );
+ Assert.assertTrue(path, pattern.matcher(path).matches());
Assert.assertTrue(new File(path).exists());
}
diff --git
a/server/src/test/java/org/apache/druid/server/AsyncQueryForwardingServletTest.java
b/server/src/test/java/org/apache/druid/server/AsyncQueryForwardingServletTest.java
index 262ad92..e86ac19 100644
---
a/server/src/test/java/org/apache/druid/server/AsyncQueryForwardingServletTest.java
+++
b/server/src/test/java/org/apache/druid/server/AsyncQueryForwardingServletTest.java
@@ -39,6 +39,7 @@ import org.apache.druid.guice.annotations.Self;
import org.apache.druid.guice.annotations.Smile;
import org.apache.druid.guice.http.DruidHttpClientConfig;
import org.apache.druid.initialization.Initialization;
+import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.granularity.Granularities;
import org.apache.druid.java.util.common.lifecycle.Lifecycle;
import org.apache.druid.query.DefaultGenericQueryMetricsFactory;
@@ -350,11 +351,11 @@ public class AsyncQueryForwardingServletTest extends
BaseJettyTest
@Override
protected String rewriteURI(HttpServletRequest request, String
scheme, String host)
{
- String uri = super.rewriteURI(request, scheme, host).toString();
+ String uri = super.rewriteURI(request, scheme, host);
if (uri.contains("/druid/v2")) {
- return URI.create(uri.replace("/druid/v2",
"/default")).toString();
+ return URI.create(StringUtils.replace(uri, "/druid/v2",
"/default")).toString();
}
- return URI.create(uri.replace("/proxy", "")).toString();
+ return URI.create(StringUtils.replace(uri, "/proxy",
"")).toString();
}
});
//NOTE: explicit maxThreads to workaround
https://tickets.puppetlabs.com/browse/TK-152
diff --git
a/server/src/test/java/org/apache/druid/server/http/DatasourcesResourceTest.java
b/server/src/test/java/org/apache/druid/server/http/DatasourcesResourceTest.java
index da95b0b..d42b678 100644
---
a/server/src/test/java/org/apache/druid/server/http/DatasourcesResourceTest.java
+++
b/server/src/test/java/org/apache/druid/server/http/DatasourcesResourceTest.java
@@ -538,7 +538,7 @@ public class DatasourcesResourceTest
public void testDeleteDataSourceSpecificInterval()
{
String interval = "2010-01-01_P1D";
- Interval theInterval = Intervals.of(interval.replace("_", "/"));
+ Interval theInterval = Intervals.of(interval.replace('_', '/'));
IndexingServiceClient indexingServiceClient =
EasyMock.createStrictMock(IndexingServiceClient.class);
indexingServiceClient.killSegments("datasource1", theInterval);
diff --git
a/server/src/test/java/org/apache/druid/server/http/security/SecurityResourceFilterTest.java
b/server/src/test/java/org/apache/druid/server/http/security/SecurityResourceFilterTest.java
index be85f25..a4c4156 100644
---
a/server/src/test/java/org/apache/druid/server/http/security/SecurityResourceFilterTest.java
+++
b/server/src/test/java/org/apache/druid/server/http/security/SecurityResourceFilterTest.java
@@ -46,10 +46,13 @@ import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Collection;
+import java.util.regex.Pattern;
@RunWith(Parameterized.class)
public class SecurityResourceFilterTest extends ResourceFilterTestHelper
{
+ private static final Pattern WORD = Pattern.compile("\\w+");
+
@Parameterized.Parameters
public static Collection<Object[]> data()
{
@@ -127,7 +130,7 @@ public class SecurityResourceFilterTest extends
ResourceFilterTestHelper
public void testResourcesFilteringBadPath()
{
EasyMock.replay(req, request, authorizerMapper);
- final String badRequestPath = requestPath.replaceAll("\\w+", "droid");
+ final String badRequestPath =
WORD.matcher(requestPath).replaceAll("droid");
Assert.assertFalse(((AbstractResourceFilter)
resourceFilter.getRequestFilter()).isApplicable(badRequestPath));
EasyMock.verify(req, request, authorizerMapper);
}
diff --git
a/server/src/test/java/org/apache/druid/server/log/FileRequestLoggerTest.java
b/server/src/test/java/org/apache/druid/server/log/FileRequestLoggerTest.java
index 060412c..6163fd3 100644
---
a/server/src/test/java/org/apache/druid/server/log/FileRequestLoggerTest.java
+++
b/server/src/test/java/org/apache/druid/server/log/FileRequestLoggerTest.java
@@ -49,7 +49,7 @@ public class FileRequestLoggerTest
ObjectMapper objectMapper = new ObjectMapper();
DateTime dateTime = DateTimes.nowUtc();
File logDir = temporaryFolder.newFolder();
- String actualLogString = dateTime.toString() + "\t" + HOST;
+ String actualLogString = dateTime + "\t" + HOST;
FileRequestLogger fileRequestLogger = new FileRequestLogger(objectMapper,
scheduler, logDir);
fileRequestLogger.start();
diff --git
a/services/src/main/java/org/apache/druid/cli/convert/PrefixRename.java
b/services/src/main/java/org/apache/druid/cli/convert/PrefixRename.java
deleted file mode 100644
index 866e3b8..0000000
--- a/services/src/main/java/org/apache/druid/cli/convert/PrefixRename.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * 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.druid.cli.convert;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
-
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-/**
- */
-public class PrefixRename implements PropertyConverter
-{
- private final String prefix;
- private final String outputPrefix;
-
- private final AtomicBoolean ran = new AtomicBoolean(false);
-
- public PrefixRename(
- String prefix,
- String outputPrefix
- )
- {
- this.prefix = prefix;
- this.outputPrefix = outputPrefix;
- }
-
- @Override
- public boolean canHandle(String property)
- {
- return property.startsWith(prefix) && !ran.get();
- }
-
- @Override
- public Map<String, String> convert(Properties properties)
- {
- if (!ran.getAndSet(true)) {
- Map<String, String> retVal = Maps.newLinkedHashMap();
-
- for (String property : properties.stringPropertyNames()) {
- if (property.startsWith(prefix)) {
- retVal.put(property.replace(prefix, outputPrefix),
properties.getProperty(property));
- }
- }
-
- return retVal;
- }
- return ImmutableMap.of();
- }
-}
diff --git a/sql/src/main/java/org/apache/druid/sql/avatica/AvaticaMonitor.java
b/sql/src/main/java/org/apache/druid/sql/avatica/AvaticaMonitor.java
index 369d6a5..45befef 100644
--- a/sql/src/main/java/org/apache/druid/sql/avatica/AvaticaMonitor.java
+++ b/sql/src/main/java/org/apache/druid/sql/avatica/AvaticaMonitor.java
@@ -25,6 +25,7 @@ import org.apache.calcite.avatica.metrics.Histogram;
import org.apache.calcite.avatica.metrics.Meter;
import org.apache.calcite.avatica.metrics.MetricsSystem;
import org.apache.calcite.avatica.metrics.Timer;
+import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.logger.Logger;
import org.apache.druid.java.util.emitter.service.ServiceEmitter;
import org.apache.druid.java.util.emitter.service.ServiceMetricEvent;
@@ -178,6 +179,6 @@ public class AvaticaMonitor extends AbstractMonitor
implements MetricsSystem
private String fullMetricName(final String name)
{
- return name.replace("org.apache.calcite.avatica", "avatica").replace(".",
"/");
+ return StringUtils.replace(name, "org.apache.calcite.avatica",
"avatica").replace('.', '/');
}
}
diff --git
a/sql/src/main/java/org/apache/druid/sql/calcite/planner/Calcites.java
b/sql/src/main/java/org/apache/druid/sql/calcite/planner/Calcites.java
index 3601e15..c251d31 100644
--- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/Calcites.java
+++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/Calcites.java
@@ -56,6 +56,7 @@ import org.joda.time.format.ISODateTimeFormat;
import java.nio.charset.Charset;
import java.util.NavigableSet;
+import java.util.regex.Pattern;
/**
* Utility functions for Calcite.
@@ -77,6 +78,8 @@ public class Calcites
private static final Charset DEFAULT_CHARSET =
Charset.forName(ConversionUtil.NATIVE_UTF16_CHARSET_NAME);
+ private static final Pattern TRAILING_ZEROS = Pattern.compile("\\.?0+$");
+
private Calcites()
{
// No instantiation.
@@ -129,7 +132,7 @@ public class Calcites
}
}
builder.append("'");
- return isPlainAscii ? builder.toString() : "U&" + builder.toString();
+ return isPlainAscii ? builder.toString() : "U&" + builder;
}
@@ -248,7 +251,10 @@ public class Calcites
public static TimestampString jodaToCalciteTimestampString(final DateTime
dateTime, final DateTimeZone timeZone)
{
// The replaceAll is because Calcite doesn't like trailing zeroes in its
fractional seconds part.
- return new
TimestampString(CALCITE_TIMESTAMP_PRINTER.print(dateTime.withZone(timeZone)).replaceAll("\\.?0+$",
""));
+ String timestampString = TRAILING_ZEROS
+ .matcher(CALCITE_TIMESTAMP_PRINTER.print(dateTime.withZone(timeZone)))
+ .replaceAll("");
+ return new TimestampString(timestampString);
}
/**
@@ -262,7 +268,10 @@ public class Calcites
public static TimeString jodaToCalciteTimeString(final DateTime dateTime,
final DateTimeZone timeZone)
{
// The replaceAll is because Calcite doesn't like trailing zeroes in its
fractional seconds part.
- return new
TimeString(CALCITE_TIME_PRINTER.print(dateTime.withZone(timeZone)).replaceAll("\\.?0+$",
""));
+ String timeString = TRAILING_ZEROS
+ .matcher(CALCITE_TIME_PRINTER.print(dateTime.withZone(timeZone)))
+ .replaceAll("");
+ return new TimeString(timeString);
}
/**
diff --git
a/sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java
b/sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java
index 1fa2388..ae8ba94 100644
--- a/sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java
+++ b/sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java
@@ -465,7 +465,7 @@ public class SystemSchema extends AbstractSchema
authorizerMapper
);
if (!access.isAllowed()) {
- throw new ForbiddenException("Insufficient permission to view servers
:" + access.toString());
+ throw new ForbiddenException("Insufficient permission to view servers
:" + access);
}
final FluentIterable<Object[]> results = FluentIterable
.from(druidServers)
diff --git
a/sql/src/test/java/org/apache/druid/sql/calcite/expression/ExpressionsTest.java
b/sql/src/test/java/org/apache/druid/sql/calcite/expression/ExpressionsTest.java
index d64b9a0..1dc8a5c 100644
---
a/sql/src/test/java/org/apache/druid/sql/calcite/expression/ExpressionsTest.java
+++
b/sql/src/test/java/org/apache/druid/sql/calcite/expression/ExpressionsTest.java
@@ -819,10 +819,10 @@ public class ExpressionsTest extends CalciteTestBase
)
{
final DruidExpression expression =
Expressions.toDruidExpression(plannerContext, rowSignature, rexNode);
- Assert.assertEquals("Expression for: " + rexNode.toString(),
expectedExpression, expression);
+ Assert.assertEquals("Expression for: " + rexNode, expectedExpression,
expression);
final ExprEval result = Parser.parse(expression.getExpression(),
plannerContext.getExprMacroTable())
.eval(Parser.withMap(bindings));
- Assert.assertEquals("Result for: " + rexNode.toString(), expectedResult,
result.value());
+ Assert.assertEquals("Result for: " + rexNode, expectedResult,
result.value());
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]