Enforce Druid's exception class use (#6456)
diff --git a/.idea/inspectionProfiles/Druid.xml b/.idea/inspectionProfiles/Druid.xml
index 38d6033..b1748e7 100644
--- a/.idea/inspectionProfiles/Druid.xml
+++ b/.idea/inspectionProfiles/Druid.xml
@@ -63,7 +63,6 @@
<inspection_tool class="InvalidComparatorMethodReference" enabled="true" level="ERROR" enabled_by_default="true" />
<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="JavadocReference" enabled="true" level="ERROR" enabled_by_default="true" />
<inspection_tool class="JsonStandardCompliance" enabled="true" level="WARNING" 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" />
@@ -113,7 +112,7 @@
<searchConfiguration name="Suboptimal IndexedInts iteration" text="$x$ < $y$.size()" recursive="false" caseInsensitive="true" type="JAVA">
<constraint name="__context__" target="true" within="" contains="" />
<constraint name="x" within="" contains="" />
- <constraint name="y" nameOfExprType="IndexedInts" exprTypeWithinHierarchy="true" within="" contains="" />
+ <constraint name="y" nameOfExprType="IndexedInts" expressionTypes="IndexedInts" exprTypeWithinHierarchy="true" within="" contains="" />
</searchConfiguration>
<searchConfiguration name="Lists.newArrayList() with a single argument. Use Collections.singletonList() instead" created="1532737126203" text="Lists.newArrayList($x$)" recursive="false" caseInsensitive="true" type="JAVA">
<constraint name="x" nameOfExprType="java\.lang\.Iterable|java\.util\.Iterator|Object\[\]" expressionTypes="java.lang.Iterable|java.util.Iterator|Object[]" exprTypeWithinHierarchy="true" negateName="true" negateExprType="true" within="" contains="" />
@@ -134,6 +133,55 @@
<constraint name="x" nameOfFormalType="java\.util\.Random" exceptedTypes="java.util.Random" exprTypeWithinHierarchy="true" formalTypeWithinHierarchy="true" within="" contains="" />
<constraint name="a" within="" contains="" />
</searchConfiguration>
+ <searchConfiguration name="Use RE (a Druid's class)" created="1539352150701" text="new $E$(org.apache.druid.java.util.common.StringUtils.format($x$))" recursive="false" caseInsensitive="true" type="JAVA">
+ <constraint name="__context__" target="true" within="" contains="" />
+ <constraint name="E" regexp="java\.lang\.RuntimeException" within="" contains="" />
+ <constraint name="x" minCount="0" maxCount="2147483647" within="" contains="" />
+ </searchConfiguration>
+ <searchConfiguration name="Use RE (a Druid's class) with cause" created="1539353059868" text="new $E$(org.apache.druid.java.util.common.StringUtils.format($x$),$y$)" recursive="false" caseInsensitive="true" type="JAVA">
+ <constraint name="__context__" target="true" within="" contains="" />
+ <constraint name="E" regexp="java\.lang\.RuntimeException" within="" contains="" />
+ <constraint name="x" minCount="0" maxCount="2147483647" within="" contains="" />
+ <constraint name="y" minCount="0" maxCount="2147483647" within="" contains="" />
+ </searchConfiguration>
+ <searchConfiguration name="Use ISE (a Druid's class)" created="1539353519594" text="new $E$(org.apache.druid.java.util.common.StringUtils.format($x$))" recursive="false" caseInsensitive="true" type="JAVA">
+ <constraint name="__context__" target="true" within="" contains="" />
+ <constraint name="E" regexp="java\.lang\.IllegalStateException" within="" contains="" />
+ <constraint name="x" minCount="0" maxCount="2147483647" within="" contains="" />
+ </searchConfiguration>
+ <searchConfiguration name="Use ISE (a Druid's class) with cause" created="1539353595734" text="new $E$(org.apache.druid.java.util.common.StringUtils.format($x$),$y$)" recursive="false" caseInsensitive="true" type="JAVA">
+ <constraint name="__context__" target="true" within="" contains="" />
+ <constraint name="E" regexp="java\.lang\.IllegalStateException" within="" contains="" />
+ <constraint name="x" minCount="0" maxCount="2147483647" within="" contains="" />
+ <constraint name="y" minCount="0" maxCount="2147483647" within="" contains="" />
+ </searchConfiguration>
+ <searchConfiguration name="Use IAE (a Druid's class)" created="1539353691746" text="new $E$(org.apache.druid.java.util.common.StringUtils.format($x$))" recursive="false" caseInsensitive="true" type="JAVA">
+ <constraint name="__context__" target="true" within="" contains="" />
+ <constraint name="E" regexp="java\.lang\.IllegalArgumentException" within="" contains="" />
+ <constraint name="x" minCount="0" maxCount="2147483647" within="" contains="" />
+ </searchConfiguration>
+ <searchConfiguration name="Use IAE (a Druid's class) with cause" created="1539353766336" text="new $E$(org.apache.druid.java.util.common.StringUtils.format($x$),$y$)" recursive="false" caseInsensitive="true" type="JAVA">
+ <constraint name="__context__" target="true" within="" contains="" />
+ <constraint name="E" regexp="java\.lang\.IllegalArgumentException" within="" contains="" />
+ <constraint name="x" minCount="0" maxCount="2147483647" within="" contains="" />
+ <constraint name="y" minCount="0" maxCount="2147483647" within="" contains="" />
+ </searchConfiguration>
+ <searchConfiguration name="Use IOE (a Druid's class)" created="1539353913074" text="new $E$(org.apache.druid.java.util.common.StringUtils.format($x$))" recursive="false" caseInsensitive="true" type="JAVA">
+ <constraint name="__context__" target="true" within="" contains="" />
+ <constraint name="E" regexp="java\.io\.IOException" within="" contains="" />
+ <constraint name="x" minCount="0" maxCount="2147483647" within="" contains="" />
+ </searchConfiguration>
+ <searchConfiguration name="Use IOE (a Druid's class) with cause" created="1539354009031" text="new $E$(org.apache.druid.java.util.common.StringUtils.format($x$),$y$)" recursive="false" caseInsensitive="true" type="JAVA">
+ <constraint name="__context__" target="true" within="" contains="" />
+ <constraint name="E" regexp="java\.io\.IOException" within="" contains="" />
+ <constraint name="x" minCount="0" maxCount="2147483647" within="" contains="" />
+ <constraint name="y" minCount="0" maxCount="2147483647" within="" contains="" />
+ </searchConfiguration>
+ <searchConfiguration name="Use UOE (a Druid's class)" created="1539354091201" text="new $E$(org.apache.druid.java.util.common.StringUtils.format($x$))" recursive="false" caseInsensitive="true" type="JAVA">
+ <constraint name="__context__" target="true" within="" contains="" />
+ <constraint name="E" regexp="java\.lang\.UnsupportedOperationException" within="" contains="" />
+ <constraint name="x" minCount="0" maxCount="2147483647" within="" contains="" />
+ </searchConfiguration>
</inspection_tool>
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
<option name="processCode" value="true" />
diff --git a/api/src/main/java/org/apache/druid/indexer/TaskStatusPlus.java b/api/src/main/java/org/apache/druid/indexer/TaskStatusPlus.java
index e58d831..4912900 100644
--- a/api/src/main/java/org/apache/druid/indexer/TaskStatusPlus.java
+++ b/api/src/main/java/org/apache/druid/indexer/TaskStatusPlus.java
@@ -22,7 +22,7 @@
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Preconditions;
-import org.apache.druid.java.util.common.StringUtils;
+import org.apache.druid.java.util.common.RE;
import org.apache.druid.java.util.common.logger.Logger;
import org.joda.time.DateTime;
@@ -104,7 +104,7 @@
this.statusCode = status;
} else {
if (statusCode != null && status != null && statusCode != status) {
- throw new RuntimeException(StringUtils.format("statusCode[%s] and status[%s] must match", statusCode, status));
+ throw new RE("statusCode[%s] and status[%s] must match", statusCode, status);
}
this.statusCode = statusCode;
}
diff --git a/common/src/main/java/org/apache/druid/indexer/Jobby.java b/common/src/main/java/org/apache/druid/indexer/Jobby.java
index c6ea58c..2d13400 100644
--- a/common/src/main/java/org/apache/druid/indexer/Jobby.java
+++ b/common/src/main/java/org/apache/druid/indexer/Jobby.java
@@ -19,7 +19,7 @@
package org.apache.druid.indexer;
-import org.apache.druid.java.util.common.StringUtils;
+import org.apache.druid.java.util.common.UOE;
import javax.annotation.Nullable;
import java.util.Map;
@@ -36,9 +36,7 @@
@Nullable
default Map<String, Object> getStats()
{
- throw new UnsupportedOperationException(
- StringUtils.format("This Jobby does not implement getJobStats(), Jobby class: [%s]", getClass())
- );
+ throw new UOE("This Jobby does not implement getJobStats(), Jobby class: [%s]", getClass());
}
/**
@@ -48,8 +46,6 @@
@Nullable
default String getErrorMessage()
{
- throw new UnsupportedOperationException(
- StringUtils.format("This Jobby does not implement getErrorMessage(), Jobby class: [%s]", getClass())
- );
+ throw new UOE("This Jobby does not implement getErrorMessage(), Jobby class: [%s]", getClass());
}
}
diff --git a/extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/BasicAuthUtils.java b/extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/BasicAuthUtils.java
index 6677fbc..2274875 100644
--- a/extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/BasicAuthUtils.java
+++ b/extensions-core/druid-basic-security/src/main/java/org/apache/druid/security/basic/BasicAuthUtils.java
@@ -23,6 +23,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Maps;
import org.apache.druid.java.util.common.ISE;
+import org.apache.druid.java.util.common.RE;
import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.logger.Logger;
import org.apache.druid.security.basic.authentication.entity.BasicAuthenticatorUser;
@@ -100,7 +101,7 @@
}
catch (NoSuchAlgorithmException nsae) {
log.error("%s not supported on this system.", ALGORITHM);
- throw new RuntimeException(StringUtils.format("%s not supported on this system.", ALGORITHM), nsae);
+ throw new RE(nsae, "%s not supported on this system.", ALGORITHM);
}
}
diff --git a/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/BloomDimFilter.java b/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/BloomDimFilter.java
index 808f709..bfaa37c 100644
--- a/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/BloomDimFilter.java
+++ b/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/filter/BloomDimFilter.java
@@ -25,6 +25,7 @@
import com.google.common.base.Predicate;
import com.google.common.collect.RangeSet;
import com.google.common.collect.Sets;
+import org.apache.druid.java.util.common.ISE;
import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.query.cache.CacheKeyBuilder;
import org.apache.druid.query.extraction.ExtractionFn;
@@ -66,7 +67,7 @@
BloomKFilter.serialize(byteArrayOutputStream, bloomKFilter);
}
catch (IOException e) {
- throw new IllegalStateException(StringUtils.format("Exception when generating cache key for [%s]", this), e);
+ throw new ISE(e, "Exception when generating cache key for [%s]", this);
}
byte[] bloomFilterBytes = byteArrayOutputStream.toByteArray();
return new CacheKeyBuilder(DimFilterUtils.BLOOM_DIM_FILTER_CACHE_ID)
diff --git a/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaIndexTaskClient.java b/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaIndexTaskClient.java
index c81b1be..3bc52eb 100644
--- a/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaIndexTaskClient.java
+++ b/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaIndexTaskClient.java
@@ -26,6 +26,7 @@
import org.apache.druid.indexing.common.IndexTaskClient;
import org.apache.druid.indexing.common.TaskInfoProvider;
import org.apache.druid.java.util.common.ISE;
+import org.apache.druid.java.util.common.RE;
import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.jackson.JacksonUtils;
import org.apache.druid.java.util.emitter.EmittingLogger;
@@ -142,10 +143,7 @@
return ImmutableMap.of();
}
catch (IOException | InterruptedException e) {
- throw new RuntimeException(
- StringUtils.format("Exception [%s] while pausing Task [%s]", e.getMessage(), id),
- e
- );
+ throw new RE(e, "Exception [%s] while pausing Task [%s]", e.getMessage(), id);
}
}
diff --git a/java-util/src/main/java/org/apache/druid/java/util/emitter/core/ParametrizedUriExtractor.java b/java-util/src/main/java/org/apache/druid/java/util/emitter/core/ParametrizedUriExtractor.java
index 68baeff..9dcde24 100644
--- a/java-util/src/main/java/org/apache/druid/java/util/emitter/core/ParametrizedUriExtractor.java
+++ b/java-util/src/main/java/org/apache/druid/java/util/emitter/core/ParametrizedUriExtractor.java
@@ -19,6 +19,7 @@
package org.apache.druid.java.util.emitter.core;
+import org.apache.druid.java.util.common.IAE;
import org.apache.druid.java.util.common.StringUtils;
import java.net.URI;
@@ -57,12 +58,12 @@
for (String key : params) {
Object paramValue = eventMap.get(key);
if (paramValue == null) {
- throw new IllegalArgumentException(StringUtils.format(
+ throw new IAE(
"ParametrizedUriExtractor with pattern %s requires %s to be set in event, but found %s",
uriPattern,
key,
eventMap
- ));
+ );
}
processedUri = processedUri.replace(StringUtils.format("{%s}", key), paramValue.toString());
}
diff --git a/java-util/src/main/java/org/apache/druid/java/util/http/client/NettyHttpClient.java b/java-util/src/main/java/org/apache/druid/java/util/http/client/NettyHttpClient.java
index 4603a33..ea41e7d 100644
--- a/java-util/src/main/java/org/apache/druid/java/util/http/client/NettyHttpClient.java
+++ b/java-util/src/main/java/org/apache/druid/java/util/http/client/NettyHttpClient.java
@@ -253,7 +253,7 @@
possiblySuspendReads(response);
}
} else {
- throw new IllegalStateException(StringUtils.format("Unknown message type[%s]", msg.getClass()));
+ throw new ISE("Unknown message type[%s]", msg.getClass());
}
}
catch (Exception ex) {
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 8e219a6..8a1dbc8 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
@@ -47,6 +47,7 @@
import org.apache.druid.client.indexing.IndexingService;
import org.apache.druid.discovery.DruidLeaderClient;
import org.apache.druid.indexer.TaskStatusPlus;
+import org.apache.druid.java.util.common.RE;
import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.parsers.CloseableIterator;
import org.apache.druid.java.util.http.client.Request;
@@ -259,10 +260,7 @@
};
}
catch (JsonProcessingException e) {
- throw new RuntimeException(StringUtils.format(
- "Error getting segment payload for segment %s",
- val.getIdentifier()
- ), e);
+ throw new RE(e, "Error getting segment payload for segment %s", val.getIdentifier());
}
});
@@ -294,15 +292,13 @@
};
}
catch (JsonProcessingException e) {
- throw new RuntimeException(StringUtils.format(
- "Error getting segment payload for segment %s",
- val.getKey().getIdentifier()
- ), e);
+ throw new RE(e, "Error getting segment payload for segment %s", val.getKey().getIdentifier());
}
});
final Iterable<Object[]> allSegments = Iterables.unmodifiableIterable(
- Iterables.concat(publishedSegments, availableSegments));
+ Iterables.concat(publishedSegments, availableSegments)
+ );
return Linq4j.asEnumerable(allSegments).where(t -> t != null);