This is an automated email from the ASF dual-hosted git repository.
FrankChen021 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new 81d9e6d12d4 fix: address CodeQL control-flow and API warnings (#19820)
81d9e6d12d4 is described below
commit 81d9e6d12d4d0a0563fcacabe68716c6dd5fc57a
Author: Frank Chen <[email protected]>
AuthorDate: Wed Aug 5 21:29:37 2026 +0800
fix: address CodeQL control-flow and API warnings (#19820)
* Fix CodeQL control flow and API warnings
* Preserve query counter behavior for HTTP errors
* test: cover VSizeColumnarInts equality
---
.../rabbitstream/RabbitSequenceNumber.java | 2 +
.../query/expressions/BloomFilterExpressions.java | 6 ++
.../autoscaling/ec2/EC2AutoScalerTest.java | 2 -
.../histogram/ApproximateHistogram.java | 4 +-
.../indexing/kafka/KafkaDataSourceMetadata.java | 5 +-
.../druid/indexing/kafka/KafkaSequenceNumber.java | 2 +
.../indexing/kinesis/KinesisSequenceNumber.java | 2 +
.../apache/druid/indexing/common/task/Tasks.java | 2 +
.../SeekableStreamIndexTaskRunnerTest.java | 2 +
.../SeekableStreamSupervisorStateTest.java | 2 +
.../SeekableStreamSupervisorTestBase.java | 2 +
.../apache/druid/msq/exec/ControllerHolder.java | 3 +
.../processor/SegmentGeneratorFrameProcessor.java | 2 +
.../controller/BaseControllerQueryKernelTest.java | 3 +
.../druid/extendedset/intset/ConciseSet.java | 12 ++-
.../org/apache/druid/frame/field/FieldWriters.java | 3 +
.../java/util/common/guava/FunctionalIterator.java | 2 +
.../org/apache/druid/math/expr/ExpressionType.java | 9 ++
.../druid/math/expr/ExpressionTypeFactory.java | 3 +
.../druid/query/PrioritizedExecutorService.java | 2 +
.../org/apache/druid/query/filter/InDimFilter.java | 4 +-
.../epinephelinae/ByteBufferMinMaxOffsetHeap.java | 6 +-
.../druid/query/ordering/StringComparators.java | 12 ++-
.../TopNColumnAggregatesProcessorFactory.java | 4 +
.../druid/segment/data/CompressedBlockReader.java | 1 -
.../druid/segment/data/VSizeColumnarInts.java | 19 +++++
.../druid/segment/filter/ExpressionFilter.java | 3 +
.../SpatialDimensionRowTransformer.java | 4 +-
.../druid/collections/IntSetTestUtility.java | 52 +-----------
.../java/util/common/guava/ConcatSequenceTest.java | 5 +-
.../math/expr/VectorExprResultConsistencyTest.java | 3 +
.../druid/query/scan/ScanQueryRunnerTest.java | 2 +-
.../druid/query/search/SearchQueryRunnerTest.java | 1 -
.../druid/segment/column/TypeStrategiesTest.java | 20 ++++-
.../druid/segment/data/VSizeColumnarIntsTest.java | 17 ++++
.../druid/segment/transform/RowFunctionTest.java | 48 +----------
.../druid/segment/transform/TransformerTest.java | 55 ++----------
.../partition/HashBasedNumberedShardSpecTest.java | 26 +++++-
.../apache/druid/metadata/BasicDataSourceExt.java | 2 +
.../org/apache/druid/server/QueryResultPusher.java | 5 ++
.../druid/rpc/NoDelayScheduledExecutorService.java | 26 +++++-
.../druid/segment/realtime/sink/SinkTest.java | 97 +---------------------
.../coordinator/duty/CompactSegmentsTest.java | 6 +-
.../simulate/WrappingScheduledExecutorService.java | 26 +++++-
sql/src/main/codegen/templates/Parser.jj | 10 +++
45 files changed, 249 insertions(+), 275 deletions(-)
diff --git
a/extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/RabbitSequenceNumber.java
b/extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/RabbitSequenceNumber.java
index 0f5197d7a55..8ddc005fe8f 100644
---
a/extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/RabbitSequenceNumber.java
+++
b/extensions-contrib/rabbit-stream-indexing-service/src/main/java/org/apache/druid/indexing/rabbitstream/RabbitSequenceNumber.java
@@ -25,6 +25,8 @@ import javax.validation.constraints.NotNull;
// OrderedSequenceNumber.equals() should be used instead.
@SuppressWarnings("ComparableImplementedButEqualsNotOverridden")
+// Every Rabbit sequence number is inclusive, so inherited equality and
value-only ordering are consistent.
+// codeql[java/inconsistent-compareto-and-equals]
public class RabbitSequenceNumber extends OrderedSequenceNumber<Long>
{
private RabbitSequenceNumber(Long sequenceNumber)
diff --git
a/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/expressions/BloomFilterExpressions.java
b/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/expressions/BloomFilterExpressions.java
index 59f2b350727..72e3a830eb0 100644
---
a/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/expressions/BloomFilterExpressions.java
+++
b/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/expressions/BloomFilterExpressions.java
@@ -228,6 +228,9 @@ public class BloomFilterExpressions
matches = filter.testLong(longVal);
}
break;
+ case ARRAY:
+ case COMPLEX:
+ break;
}
return ExprEval.ofLongBoolean(matches);
@@ -293,6 +296,9 @@ public class BloomFilterExpressions
matches = filter.testLong(longVal);
}
break;
+ case ARRAY:
+ case COMPLEX:
+ break;
}
return ExprEval.ofLongBoolean(matches);
diff --git
a/extensions-core/ec2-extensions/src/test/java/org/apache/druid/indexing/overlord/autoscaling/ec2/EC2AutoScalerTest.java
b/extensions-core/ec2-extensions/src/test/java/org/apache/druid/indexing/overlord/autoscaling/ec2/EC2AutoScalerTest.java
index 9fb8f8eff75..1807c280963 100644
---
a/extensions-core/ec2-extensions/src/test/java/org/apache/druid/indexing/overlord/autoscaling/ec2/EC2AutoScalerTest.java
+++
b/extensions-core/ec2-extensions/src/test/java/org/apache/druid/indexing/overlord/autoscaling/ec2/EC2AutoScalerTest.java
@@ -140,7 +140,6 @@ public class EC2AutoScalerTest
);
final int n = 150;
- Assert.assertTrue(n <= 2 * EC2AutoScaler.MAX_AWS_FILTER_VALUES);
List<String> ips = Lists.transform(
ContiguousSet.create(Range.closedOpen(0, n),
DiscreteDomain.integers()).asList(),
@@ -193,7 +192,6 @@ public class EC2AutoScalerTest
);
final int n = 150;
- Assert.assertTrue(n <= 2 * EC2AutoScaler.MAX_AWS_FILTER_VALUES);
List<String> ids = Lists.transform(
ContiguousSet.create(Range.closedOpen(0, n),
DiscreteDomain.integers()).asList(),
diff --git
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java
index 11236b8d25f..8f72d3046ee 100644
---
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java
+++
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogram.java
@@ -747,17 +747,15 @@ public class ApproximateHistogram
// if there are values below the lower limit, fill in array position 1
// else array position 0
- while (j != leftBinCount || k != rightBinCount) {
+ if (j != leftBinCount || k != rightBinCount) {
if (j != leftBinCount && (k == rightBinCount || leftPositions[j] <
rightPositions[k])) {
mergedPositions[pos] = leftPositions[j];
mergedBins[pos] = leftBins[j];
++j;
- break;
} else {
mergedPositions[pos] = rightPositions[k];
mergedBins[pos] = rightBins[k];
++k;
- break;
}
}
diff --git
a/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaDataSourceMetadata.java
b/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaDataSourceMetadata.java
index 04a6c2ba928..d8b05c69c19 100644
---
a/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaDataSourceMetadata.java
+++
b/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaDataSourceMetadata.java
@@ -37,7 +37,10 @@ import javax.annotation.Nullable;
import java.util.Comparator;
import java.util.Map;
-public class KafkaDataSourceMetadata extends
SeekableStreamDataSourceMetadata<KafkaTopicPartition, Long> implements
Comparable<KafkaDataSourceMetadata>
+// Natural ordering intentionally compares offsets only; inherited equality
also includes the non-ordering stream config.
+// codeql[java/inconsistent-compareto-and-equals]
+public class KafkaDataSourceMetadata extends
SeekableStreamDataSourceMetadata<KafkaTopicPartition, Long>
+ implements Comparable<KafkaDataSourceMetadata>
{
private static final Logger LOGGER = new
Logger(KafkaDataSourceMetadata.class);
diff --git
a/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSequenceNumber.java
b/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSequenceNumber.java
index d727e5a7baf..1a21c6fe8a7 100644
---
a/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSequenceNumber.java
+++
b/extensions-core/kafka-indexing-service/src/main/java/org/apache/druid/indexing/kafka/KafkaSequenceNumber.java
@@ -25,6 +25,8 @@ import javax.validation.constraints.NotNull;
// OrderedSequenceNumber.equals() should be used instead.
@SuppressWarnings("ComparableImplementedButEqualsNotOverridden")
+// Every Kafka sequence number is inclusive, so inherited equality and
value-only ordering are consistent.
+// codeql[java/inconsistent-compareto-and-equals]
public class KafkaSequenceNumber extends OrderedSequenceNumber<Long>
{
private KafkaSequenceNumber(Long sequenceNumber)
diff --git
a/extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisSequenceNumber.java
b/extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisSequenceNumber.java
index ce5025238e6..f6c79f4896f 100644
---
a/extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisSequenceNumber.java
+++
b/extensions-core/kinesis-indexing-service/src/main/java/org/apache/druid/indexing/kinesis/KinesisSequenceNumber.java
@@ -26,6 +26,8 @@ import java.math.BigInteger;
// OrderedSequenceNumber.equals() should be used instead.
@SuppressWarnings("ComparableImplementedButEqualsNotOverridden")
+// Ordering intentionally groups equivalent unread/end markers while inherited
equality preserves their identities.
+// codeql[java/inconsistent-compareto-and-equals]
public class KinesisSequenceNumber extends OrderedSequenceNumber<String>
{
/**
diff --git
a/indexing-service/src/main/java/org/apache/druid/indexing/common/task/Tasks.java
b/indexing-service/src/main/java/org/apache/druid/indexing/common/task/Tasks.java
index 5e09198828e..fa2b0af0bc0 100644
---
a/indexing-service/src/main/java/org/apache/druid/indexing/common/task/Tasks.java
+++
b/indexing-service/src/main/java/org/apache/druid/indexing/common/task/Tasks.java
@@ -39,6 +39,8 @@ public class Tasks
public static final int DEFAULT_EMBEDDED_KILL_TASK_PRIORITY = 25;
static {
+ // Keep the independently defined indexing and compaction defaults aligned
when either constant changes.
+ // codeql[java/constant-comparison]
Verify.verify(DEFAULT_MERGE_TASK_PRIORITY ==
DataSourceCompactionConfig.DEFAULT_COMPACTION_TASK_PRIORITY);
}
diff --git
a/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunnerTest.java
b/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunnerTest.java
index d4cf8bb8961..0fc173c7d24 100644
---
a/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunnerTest.java
+++
b/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/SeekableStreamIndexTaskRunnerTest.java
@@ -1118,6 +1118,8 @@ public class SeekableStreamIndexTaskRunnerTest
if (sequenceNumber == null) {
return null;
}
+ // Offset ordering intentionally excludes boundary exclusivity, which
value equality includes.
+ // codeql[java/inconsistent-compareto-and-equals]
return new OrderedSequenceNumber<>(sequenceNumber.toString(), false)
{
@Override
diff --git
a/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorStateTest.java
b/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorStateTest.java
index 1bdc228b7e1..f4fa78c582f 100644
---
a/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorStateTest.java
+++
b/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorStateTest.java
@@ -3432,6 +3432,8 @@ public class SeekableStreamSupervisorStateTest extends
EasyMockSupport
@Override
protected OrderedSequenceNumber<String> makeSequenceNumber(String seq,
boolean isExclusive)
{
+ // Offset ordering intentionally excludes boundary exclusivity, which
value equality includes.
+ // codeql[java/inconsistent-compareto-and-equals]
return new OrderedSequenceNumber<>(seq, isExclusive)
{
@Override
diff --git
a/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorTestBase.java
b/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorTestBase.java
index 968e8a75092..c60de2e941c 100644
---
a/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorTestBase.java
+++
b/indexing-service/src/test/java/org/apache/druid/indexing/seekablestream/supervisor/SeekableStreamSupervisorTestBase.java
@@ -215,6 +215,8 @@ public abstract class SeekableStreamSupervisorTestBase
@Override
protected OrderedSequenceNumber<String> makeSequenceNumber(String seq,
boolean isExclusive)
{
+ // Offset ordering intentionally excludes boundary exclusivity, which
value equality includes.
+ // codeql[java/inconsistent-compareto-and-equals]
return new OrderedSequenceNumber<>(seq, isExclusive)
{
@Override
diff --git
a/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerHolder.java
b/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerHolder.java
index 5e0af589a86..7dedebe5471 100644
---
a/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerHolder.java
+++
b/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerHolder.java
@@ -348,6 +348,9 @@ public class ControllerHolder
case FAILED:
state = State.FAILED;
break;
+
+ case RUNNING:
+ break;
}
}
diff --git
a/multi-stage-query/src/main/java/org/apache/druid/msq/indexing/processor/SegmentGeneratorFrameProcessor.java
b/multi-stage-query/src/main/java/org/apache/druid/msq/indexing/processor/SegmentGeneratorFrameProcessor.java
index e37c755bdd5..4ce0b2cb5b3 100644
---
a/multi-stage-query/src/main/java/org/apache/druid/msq/indexing/processor/SegmentGeneratorFrameProcessor.java
+++
b/multi-stage-query/src/main/java/org/apache/druid/msq/indexing/processor/SegmentGeneratorFrameProcessor.java
@@ -218,6 +218,8 @@ public class SegmentGeneratorFrameProcessor implements
FrameProcessor<DataSegmen
}
}
+ // Input rows are never ordered during indexing, and compareTo always
rejects attempts to do so.
+ // codeql[java/inconsistent-compareto-and-equals]
private class MSQInputRow implements InputRow
{
private final Object[] backingArray;
diff --git
a/multi-stage-query/src/test/java/org/apache/druid/msq/kernel/controller/BaseControllerQueryKernelTest.java
b/multi-stage-query/src/test/java/org/apache/druid/msq/kernel/controller/BaseControllerQueryKernelTest.java
index bb802382045..41f160fcc45 100644
---
a/multi-stage-query/src/test/java/org/apache/druid/msq/kernel/controller/BaseControllerQueryKernelTest.java
+++
b/multi-stage-query/src/test/java/org/apache/druid/msq/kernel/controller/BaseControllerQueryKernelTest.java
@@ -210,6 +210,9 @@ public class BaseControllerQueryKernelTest extends
InitializedNullHandlingTest
case FAILED:
controllerQueryKernel.failStage(stageId);
break;
+
+ case RETRYING:
+ throw new IAE("Cannot initialize a stage directly in the retrying
phase");
}
if (!recursiveCall) {
setupStages.add(stageNumber);
diff --git
a/processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java
b/processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java
index 5bce5616a7b..c197da823d0 100755
---
a/processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java
+++
b/processing/src/main/java/org/apache/druid/extendedset/intset/ConciseSet.java
@@ -657,14 +657,16 @@ public class ConciseSet extends AbstractIntSet implements
Serializable
if (!otherItr.isLiteral) {
int minCount = Math.min(thisItr.count, otherItr.count);
res.appendFill(minCount, operator.combineLiterals(thisItr.word,
otherItr.word));
- //noinspection NonShortCircuitBooleanExpression
+ // Both iterators must advance before testing whether either is
exhausted.
+ // codeql[java/non-short-circuit-evaluation]
if (!thisItr.prepareNext(minCount) | /* NOT || */
!otherItr.prepareNext(minCount)) {
break;
}
} else {
res.appendLiteral(operator.combineLiterals(thisItr.toLiteral(),
otherItr.word));
thisItr.word--;
- //noinspection NonShortCircuitBooleanExpression
+ // Both iterators must advance before testing whether either is
exhausted.
+ // codeql[java/non-short-circuit-evaluation]
if (!thisItr.prepareNext(1) | /* do NOT use "||" */
!otherItr.prepareNext()) {
break;
}
@@ -672,13 +674,15 @@ public class ConciseSet extends AbstractIntSet implements
Serializable
} else if (!otherItr.isLiteral) {
res.appendLiteral(operator.combineLiterals(thisItr.word,
otherItr.toLiteral()));
otherItr.word--;
- //noinspection NonShortCircuitBooleanExpression
+ // Both iterators must advance before testing whether either is
exhausted.
+ // codeql[java/non-short-circuit-evaluation]
if (!thisItr.prepareNext() | /* do NOT use "||" */
!otherItr.prepareNext(1)) {
break;
}
} else {
res.appendLiteral(operator.combineLiterals(thisItr.word,
otherItr.word));
- //noinspection NonShortCircuitBooleanExpression
+ // Both iterators must advance before testing whether either is
exhausted.
+ // codeql[java/non-short-circuit-evaluation]
if (!thisItr.prepareNext() | /* do NOT use "||" */
!otherItr.prepareNext()) {
break;
}
diff --git
a/processing/src/main/java/org/apache/druid/frame/field/FieldWriters.java
b/processing/src/main/java/org/apache/druid/frame/field/FieldWriters.java
index 58d325f5a20..3df53e83caf 100644
--- a/processing/src/main/java/org/apache/druid/frame/field/FieldWriters.java
+++ b/processing/src/main/java/org/apache/druid/frame/field/FieldWriters.java
@@ -93,6 +93,9 @@ public class FieldWriters
return makeFloatArrayWriter(columnSelectorFactory, columnName,
frameType);
case DOUBLE:
return makeDoubleArrayWriter(columnSelectorFactory, columnName,
frameType);
+ case ARRAY:
+ case COMPLEX:
+ throw new UnsupportedColumnTypeException(columnName, columnType);
}
default:
throw new UnsupportedColumnTypeException(columnName, columnType);
diff --git
a/processing/src/main/java/org/apache/druid/java/util/common/guava/FunctionalIterator.java
b/processing/src/main/java/org/apache/druid/java/util/common/guava/FunctionalIterator.java
index fa06f25ac1b..20527a7f521 100644
---
a/processing/src/main/java/org/apache/druid/java/util/common/guava/FunctionalIterator.java
+++
b/processing/src/main/java/org/apache/druid/java/util/common/guava/FunctionalIterator.java
@@ -59,6 +59,8 @@ public class FunctionalIterator<T> implements Iterator<T>
@Override
public void remove()
{
+ // Iterator.remove is optional; preserve the removal capability of the
wrapped iterator.
+ // codeql[java/iterator-remove-failure]
delegate.remove();
}
diff --git
a/processing/src/main/java/org/apache/druid/math/expr/ExpressionType.java
b/processing/src/main/java/org/apache/druid/math/expr/ExpressionType.java
index 42f32212097..9d993baa7d2 100644
--- a/processing/src/main/java/org/apache/druid/math/expr/ExpressionType.java
+++ b/processing/src/main/java/org/apache/druid/math/expr/ExpressionType.java
@@ -103,6 +103,9 @@ public class ExpressionType extends
BaseTypeSignature<ExprType>
return LONG_ARRAY;
case DOUBLE:
return DOUBLE_ARRAY;
+ case ARRAY:
+ case COMPLEX:
+ return elementType;
}
}
return elementType;
@@ -138,6 +141,9 @@ public class ExpressionType extends
BaseTypeSignature<ExprType>
return DOUBLE_ARRAY;
case STRING:
return STRING_ARRAY;
+ case ARRAY:
+ case COMPLEX:
+ break;
}
return
ExpressionTypeFactory.getInstance().ofArray(fromColumnTypeStrict(valueType.getElementType()));
case COMPLEX:
@@ -175,6 +181,9 @@ public class ExpressionType extends
BaseTypeSignature<ExprType>
return DOUBLE_ARRAY;
case STRING:
return STRING_ARRAY;
+ case ARRAY:
+ case COMPLEX:
+ break;
}
return
ExpressionTypeFactory.getInstance().ofArray(fromColumnType(valueType.getElementType()));
case COMPLEX:
diff --git
a/processing/src/main/java/org/apache/druid/math/expr/ExpressionTypeFactory.java
b/processing/src/main/java/org/apache/druid/math/expr/ExpressionTypeFactory.java
index 29b8edd5aeb..03f77b56a9e 100644
---
a/processing/src/main/java/org/apache/druid/math/expr/ExpressionTypeFactory.java
+++
b/processing/src/main/java/org/apache/druid/math/expr/ExpressionTypeFactory.java
@@ -79,6 +79,9 @@ public class ExpressionTypeFactory implements
TypeFactory<ExpressionType>
return ExpressionType.DOUBLE_ARRAY;
case LONG:
return ExpressionType.LONG_ARRAY;
+ case ARRAY:
+ case COMPLEX:
+ break;
}
}
return INTERNER.intern(new ExpressionType(ExprType.ARRAY, null,
elementType));
diff --git
a/processing/src/main/java/org/apache/druid/query/PrioritizedExecutorService.java
b/processing/src/main/java/org/apache/druid/query/PrioritizedExecutorService.java
index af14e4cc83b..92844f4f959 100644
---
a/processing/src/main/java/org/apache/druid/query/PrioritizedExecutorService.java
+++
b/processing/src/main/java/org/apache/druid/query/PrioritizedExecutorService.java
@@ -213,6 +213,8 @@ public class PrioritizedExecutorService extends
AbstractExecutorService implemen
}
}
+// Tasks with equal scheduling keys remain distinct futures, so identity
equality is intentional.
+// codeql[java/inconsistent-compareto-and-equals]
class PrioritizedListenableFutureTask<V> implements RunnableFuture<V>,
ListenableFuture<V>,
PrioritizedRunnable,
diff --git
a/processing/src/main/java/org/apache/druid/query/filter/InDimFilter.java
b/processing/src/main/java/org/apache/druid/query/filter/InDimFilter.java
index 67eb8f01e9f..7bc9137782f 100644
--- a/processing/src/main/java/org/apache/druid/query/filter/InDimFilter.java
+++ b/processing/src/main/java/org/apache/druid/query/filter/InDimFilter.java
@@ -141,7 +141,7 @@ public class InDimFilter extends
AbstractOptimizableDimFilter implements Filter
{
this(
dimension,
- values instanceof ValuesSet ? (ValuesSet) values : new
ValuesSet(values),
+ values instanceof ValuesSet valuesSet ? valuesSet : new
ValuesSet(values),
null,
null,
null
@@ -161,7 +161,7 @@ public class InDimFilter extends
AbstractOptimizableDimFilter implements Filter
{
this(
dimension,
- values instanceof ValuesSet ? (ValuesSet) values : new
ValuesSet(values),
+ values instanceof ValuesSet valuesSet ? valuesSet : new
ValuesSet(values),
extractionFn,
null,
null
diff --git
a/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java
b/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java
index ff2746bca29..68b2b1a466c 100644
---
a/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java
+++
b/processing/src/main/java/org/apache/druid/query/groupby/epinephelinae/ByteBufferMinMaxOffsetHeap.java
@@ -308,10 +308,8 @@ public class ByteBufferMinMaxOffsetHeap
int minGcOffset = buf.getInt(minGrandchild * Integer.BYTES);
int cmp = comparator.compare(minChildOffset, minGcOffset);
minIndex = (cmp > 0) ? minGrandchild : minChild;
- } else if (minChild > -1) {
- minIndex = minChild;
} else {
- break;
+ minIndex = minChild;
}
if (minIndex == minGrandchild) {
int offset = buf.getInt(pos * Integer.BYTES);
@@ -337,6 +335,8 @@ public class ByteBufferMinMaxOffsetHeap
}
}
minChild = findMinChild(comparator, minIndex);
+ } else {
+ break;
}
pos = minIndex;
} else {
diff --git
a/processing/src/main/java/org/apache/druid/query/ordering/StringComparators.java
b/processing/src/main/java/org/apache/druid/query/ordering/StringComparators.java
index 650b259ed56..a2480335dcc 100644
---
a/processing/src/main/java/org/apache/druid/query/ordering/StringComparators.java
+++
b/processing/src/main/java/org/apache/druid/query/ordering/StringComparators.java
@@ -68,7 +68,8 @@ public class StringComparators
{
// Avoid comparisons for equal references
// Assuming we mostly compare different strings, checking s.equals(s2)
will only make the comparison slower.
- //noinspection StringEquality
+ // Identity is only a fast path; ORDERING performs the content
comparison for distinct strings.
+ // codeql[java/reference-equality-on-strings]
if (s == s2) {
return 0;
}
@@ -311,7 +312,8 @@ public class StringComparators
public int compare(String s, String s2)
{
// Optimization
- //noinspection StringEquality
+ // Identity is only a fast path; ORDERING performs the content
comparison for distinct strings.
+ // codeql[java/reference-equality-on-strings]
if (s == s2) {
return 0;
}
@@ -373,7 +375,8 @@ public class StringComparators
{
// return if o1 and o2 are the same object
// Assuming we mostly compare different strings, checking o1.equals(o2)
will only make the comparison slower.
- //noinspection StringEquality
+ // Identity is only a fast path; numeric and lexical comparison handles
distinct strings.
+ // codeql[java/reference-equality-on-strings]
if (o1 == o2) {
return 0;
}
@@ -450,7 +453,8 @@ public class StringComparators
@Override
public int compare(String o1, String o2)
{
- //noinspection StringEquality
+ // Identity is only a fast path; version comparison handles distinct
strings.
+ // codeql[java/reference-equality-on-strings]
if (o1 == o2) {
return 0;
}
diff --git
a/processing/src/main/java/org/apache/druid/query/topn/types/TopNColumnAggregatesProcessorFactory.java
b/processing/src/main/java/org/apache/druid/query/topn/types/TopNColumnAggregatesProcessorFactory.java
index e921e1231f8..be3ba1c8f97 100644
---
a/processing/src/main/java/org/apache/druid/query/topn/types/TopNColumnAggregatesProcessorFactory.java
+++
b/processing/src/main/java/org/apache/druid/query/topn/types/TopNColumnAggregatesProcessorFactory.java
@@ -74,6 +74,10 @@ public class TopNColumnAggregatesProcessorFactory
return new FloatTopNColumnAggregatesProcessor(converter);
case DOUBLE:
return new DoubleTopNColumnAggregatesProcessor(converter);
+ case STRING:
+ case ARRAY:
+ case COMPLEX:
+ break;
}
}
diff --git
a/processing/src/main/java/org/apache/druid/segment/data/CompressedBlockReader.java
b/processing/src/main/java/org/apache/druid/segment/data/CompressedBlockReader.java
index 951a3cca447..78138a5aa53 100644
---
a/processing/src/main/java/org/apache/druid/segment/data/CompressedBlockReader.java
+++
b/processing/src/main/java/org/apache/druid/segment/data/CompressedBlockReader.java
@@ -68,7 +68,6 @@ public final class CompressedBlockReader implements Closeable
if (versionFromBuffer == VERSION) {
final CompressionStrategy compression =
CompressionStrategy.forId(buffer.get());
final int blockSize = buffer.getInt();
- assert CompressedPools.BUFFER_SIZE == blockSize;
Preconditions.checkState(
blockSize <= CompressedPools.BUFFER_SIZE,
"Maximum block size must be less than " + CompressedPools.BUFFER_SIZE
diff --git
a/processing/src/main/java/org/apache/druid/segment/data/VSizeColumnarInts.java
b/processing/src/main/java/org/apache/druid/segment/data/VSizeColumnarInts.java
index 7ce51492bd8..fc62d469b4f 100644
---
a/processing/src/main/java/org/apache/druid/segment/data/VSizeColumnarInts.java
+++
b/processing/src/main/java/org/apache/druid/segment/data/VSizeColumnarInts.java
@@ -150,6 +150,25 @@ public class VSizeColumnarInts implements ColumnarInts,
Comparable<VSizeColumnar
return retVal;
}
+ @Override
+ public boolean equals(Object o)
+ {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof VSizeColumnarInts)) {
+ return false;
+ }
+ final VSizeColumnarInts that = (VSizeColumnarInts) o;
+ return numBytes == that.numBytes && buffer.equals(that.buffer);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return 31 * numBytes + buffer.hashCode();
+ }
+
public int getNumBytes()
{
return numBytes;
diff --git
a/processing/src/main/java/org/apache/druid/segment/filter/ExpressionFilter.java
b/processing/src/main/java/org/apache/druid/segment/filter/ExpressionFilter.java
index 1864e255170..28b6b501a1d 100644
---
a/processing/src/main/java/org/apache/druid/segment/filter/ExpressionFilter.java
+++
b/processing/src/main/java/org/apache/druid/segment/filter/ExpressionFilter.java
@@ -175,6 +175,9 @@ public class ExpressionFilter implements Filter
}
return Arrays.stream(result).filter(Objects::nonNull).anyMatch(o
-> Evals.asBoolean((double) o));
+ case ARRAY:
+ case COMPLEX:
+ break;
}
}
return eval.asBoolean();
diff --git
a/processing/src/main/java/org/apache/druid/segment/incremental/SpatialDimensionRowTransformer.java
b/processing/src/main/java/org/apache/druid/segment/incremental/SpatialDimensionRowTransformer.java
index 27b90812628..f089fd09f8e 100644
---
a/processing/src/main/java/org/apache/druid/segment/incremental/SpatialDimensionRowTransformer.java
+++
b/processing/src/main/java/org/apache/druid/segment/incremental/SpatialDimensionRowTransformer.java
@@ -98,7 +98,9 @@ public class SpatialDimensionRowTransformer implements
Function<InputRow, InputR
)
);
- InputRow retVal = new InputRow()
+ // Rows are ordered by timestamp, while equality retains the wrapped row's
identity semantics.
+ // codeql[java/inconsistent-compareto-and-equals]
+ final InputRow retVal = new InputRow()
{
@Override
public List<String> getDimensions()
diff --git
a/processing/src/test/java/org/apache/druid/collections/IntSetTestUtility.java
b/processing/src/test/java/org/apache/druid/collections/IntSetTestUtility.java
index 7a18d44c03f..1e3fedf21ad 100644
---
a/processing/src/test/java/org/apache/druid/collections/IntSetTestUtility.java
+++
b/processing/src/test/java/org/apache/druid/collections/IntSetTestUtility.java
@@ -27,7 +27,6 @@ import org.roaringbitmap.IntIterator;
import java.util.BitSet;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.Set;
/**
@@ -61,54 +60,11 @@ public class IntSetTestUtility
public static Boolean equalSets(Set<Integer> s1, ImmutableBitmap s2)
{
- Set<Integer> s3 = new HashSet<>();
- for (Integer i : new IntIt(s2.iterator())) {
- s3.add(i);
+ final Set<Integer> s3 = new HashSet<>();
+ final IntIterator iterator = s2.iterator();
+ while (iterator.hasNext()) {
+ s3.add(iterator.next());
}
return Sets.difference(s1, s3).isEmpty();
}
-
- private static class IntIt implements Iterable<Integer>
- {
- private final Iterator<Integer> intIter;
-
- public IntIt(IntIterator intIt)
- {
- this.intIter = new IntIter(intIt);
- }
-
- @Override
- public Iterator<Integer> iterator()
- {
- return intIter;
- }
-
- private static class IntIter implements Iterator<Integer>
- {
- private final IntIterator intIt;
-
- public IntIter(IntIterator intIt)
- {
- this.intIt = intIt;
- }
-
- @Override
- public boolean hasNext()
- {
- return intIt.hasNext();
- }
-
- @Override
- public Integer next()
- {
- return intIt.next();
- }
-
- @Override
- public void remove()
- {
- throw new UnsupportedOperationException("Cannot remove ints from int
iterator");
- }
- }
- }
}
diff --git
a/processing/src/test/java/org/apache/druid/java/util/common/guava/ConcatSequenceTest.java
b/processing/src/test/java/org/apache/druid/java/util/common/guava/ConcatSequenceTest.java
index 1e2bb56690c..68e4e4aa552 100644
---
a/processing/src/test/java/org/apache/druid/java/util/common/guava/ConcatSequenceTest.java
+++
b/processing/src/test/java/org/apache/druid/java/util/common/guava/ConcatSequenceTest.java
@@ -216,17 +216,16 @@ public class ConcatSequenceTest
return Sequences.simple(
new Iterable<>()
{
- private Iterator<Integer> baseIter = input.iterator();
-
@Override
public Iterator<Integer> iterator()
{
+ final Iterator<Integer> baseIter = input.iterator();
return new Iterator<>()
{
@Override
public boolean hasNext()
{
- boolean result = baseIter.hasNext();
+ final boolean result = baseIter.hasNext();
if (!result) {
lastSeqFullyRead.set(true);
}
diff --git
a/processing/src/test/java/org/apache/druid/math/expr/VectorExprResultConsistencyTest.java
b/processing/src/test/java/org/apache/druid/math/expr/VectorExprResultConsistencyTest.java
index 9ffe5da3ace..8d06ffdc7ea 100644
---
a/processing/src/test/java/org/apache/druid/math/expr/VectorExprResultConsistencyTest.java
+++
b/processing/src/test/java/org/apache/druid/math/expr/VectorExprResultConsistencyTest.java
@@ -965,6 +965,9 @@ public class VectorExprResultConsistencyTest extends
InitializedNullHandlingTest
}
vectorBinding.addString(entry.getKey(), strings);
break;
+ case ARRAY:
+ case COMPLEX:
+ throw new IllegalArgumentException("Unsupported vector binding type:
" + entry.getValue());
}
}
diff --git
a/processing/src/test/java/org/apache/druid/query/scan/ScanQueryRunnerTest.java
b/processing/src/test/java/org/apache/druid/query/scan/ScanQueryRunnerTest.java
index b19312384ad..35e57b66ae8 100644
---
a/processing/src/test/java/org/apache/druid/query/scan/ScanQueryRunnerTest.java
+++
b/processing/src/test/java/org/apache/druid/query/scan/ScanQueryRunnerTest.java
@@ -941,7 +941,7 @@ public class ScanQueryRunnerTest extends
InitializedNullHandlingTest
Map<String, Object> event = new HashMap<>();
String[] values1 = input.split("\\t");
for (int i = 0; i < dimSpecs.length; i++) {
- if (dimSpecs[i] == null || i >= dimSpecs.length) {
+ if (dimSpecs[i] == null) {
continue;
}
diff --git
a/processing/src/test/java/org/apache/druid/query/search/SearchQueryRunnerTest.java
b/processing/src/test/java/org/apache/druid/query/search/SearchQueryRunnerTest.java
index 1b0012560bb..cb2df0c4784 100644
---
a/processing/src/test/java/org/apache/druid/query/search/SearchQueryRunnerTest.java
+++
b/processing/src/test/java/org/apache/druid/query/search/SearchQueryRunnerTest.java
@@ -868,7 +868,6 @@ public class SearchQueryRunnerTest extends
InitializedNullHandlingTest
List<SearchHit> copy = new ArrayList<>(expectedResults);
for (Result<SearchResultValue> result : results) {
Assert.assertEquals(DateTimes.of("2011-01-12T00:00:00.000Z"),
result.getTimestamp());
- Assert.assertTrue(result.getValue() instanceof Iterable);
Iterable<SearchHit> resultValues = result.getValue();
for (SearchHit resultValue : resultValues) {
diff --git
a/processing/src/test/java/org/apache/druid/segment/column/TypeStrategiesTest.java
b/processing/src/test/java/org/apache/druid/segment/column/TypeStrategiesTest.java
index 857a6d6a854..1b73b4f2f57 100644
---
a/processing/src/test/java/org/apache/druid/segment/column/TypeStrategiesTest.java
+++
b/processing/src/test/java/org/apache/druid/segment/column/TypeStrategiesTest.java
@@ -20,7 +20,6 @@
package org.apache.druid.segment.column;
import com.google.common.collect.Ordering;
-import com.google.common.primitives.Longs;
import org.apache.druid.guice.BuiltInTypesModule;
import org.apache.druid.java.util.common.IAE;
import org.apache.druid.java.util.common.Pair;
@@ -675,9 +674,24 @@ public class TypeStrategiesTest
}
@Override
- public int compareTo(NullableLongPair o)
+ public boolean equals(final Object o)
{
- return
Comparators.<Long>naturalNullsFirst().thenComparing(Longs::compare).compare(this.lhs,
o.lhs);
+ return super.equals(o);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return super.hashCode();
+ }
+
+ @Override
+ public int compareTo(final NullableLongPair o)
+ {
+ final int lhsComparison =
Comparators.<Long>naturalNullsFirst().compare(lhs, o.lhs);
+ return lhsComparison != 0
+ ? lhsComparison
+ : Comparators.<Long>naturalNullsFirst().compare(rhs, o.rhs);
}
}
diff --git
a/processing/src/test/java/org/apache/druid/segment/data/VSizeColumnarIntsTest.java
b/processing/src/test/java/org/apache/druid/segment/data/VSizeColumnarIntsTest.java
index fb14ffa2958..7fe775df04c 100644
---
a/processing/src/test/java/org/apache/druid/segment/data/VSizeColumnarIntsTest.java
+++
b/processing/src/test/java/org/apache/druid/segment/data/VSizeColumnarIntsTest.java
@@ -62,4 +62,21 @@ public class VSizeColumnarIntsTest
Assertions.assertEquals(array[i], deserialized.get(i));
}
}
+
+ @Test
+ public void testEqualsAndHashCode()
+ {
+ final VSizeColumnarInts ints = VSizeColumnarInts.fromArray(new int[]{1, 2,
3});
+ final VSizeColumnarInts equalInts = VSizeColumnarInts.fromArray(new
int[]{1, 2, 3});
+ final VSizeColumnarInts differentValues = VSizeColumnarInts.fromArray(new
int[]{1, 2, 4});
+ final VSizeColumnarInts differentWidth = VSizeColumnarInts.fromArray(new
int[]{1, 2, 3}, 256);
+
+ Assertions.assertEquals(ints, ints);
+ Assertions.assertEquals(ints, equalInts);
+ Assertions.assertEquals(ints.hashCode(), equalInts.hashCode());
+ Assertions.assertNotEquals(ints, null);
+ Assertions.assertNotEquals(ints, "not columnar ints");
+ Assertions.assertNotEquals(ints, differentValues);
+ Assertions.assertNotEquals(ints, differentWidth);
+ }
}
diff --git
a/processing/src/test/java/org/apache/druid/segment/transform/RowFunctionTest.java
b/processing/src/test/java/org/apache/druid/segment/transform/RowFunctionTest.java
index fa7527a3ddf..9bf892c72fe 100644
---
a/processing/src/test/java/org/apache/druid/segment/transform/RowFunctionTest.java
+++
b/processing/src/test/java/org/apache/druid/segment/transform/RowFunctionTest.java
@@ -19,15 +19,14 @@
package org.apache.druid.segment.transform;
+import com.google.common.collect.ImmutableMap;
+import org.apache.druid.data.input.MapBasedRow;
import org.apache.druid.data.input.Row;
import org.apache.druid.data.input.Rows;
-import org.joda.time.DateTime;
+import org.apache.druid.java.util.common.DateTimes;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-import javax.annotation.Nullable;
-import java.util.List;
-
public class RowFunctionTest implements RowFunction
{
@Override
@@ -39,46 +38,7 @@ public class RowFunctionTest implements RowFunction
@Test
public void defaultEvalDimensionTest()
{
- Row row = new Row()
- {
- @Override
- public long getTimestampFromEpoch()
- {
- return 0;
- }
-
- @Override
- public DateTime getTimestamp()
- {
- return null;
- }
-
- @Override
- public List<String> getDimension(String dimension)
- {
- return null;
- }
-
- @Nullable
- @Override
- public Object getRaw(String dimension)
- {
- return dimension;
- }
-
- @Nullable
- @Override
- public Number getMetric(String metric)
- {
- return null;
- }
-
- @Override
- public int compareTo(Row o)
- {
- return 0;
- }
- };
+ final Row row = new MapBasedRow(DateTimes.EPOCH, ImmutableMap.of());
Assertions.assertEquals(Rows.objectToStrings(eval(row)),
evalDimension(row));
}
}
diff --git
a/processing/src/test/java/org/apache/druid/segment/transform/TransformerTest.java
b/processing/src/test/java/org/apache/druid/segment/transform/TransformerTest.java
index 1f8ec37ddf6..0d990a85014 100644
---
a/processing/src/test/java/org/apache/druid/segment/transform/TransformerTest.java
+++
b/processing/src/test/java/org/apache/druid/segment/transform/TransformerTest.java
@@ -26,7 +26,6 @@ import org.apache.druid.data.input.InputRow;
import org.apache.druid.data.input.InputRowListPlusRawValues;
import org.apache.druid.data.input.MapBasedInputRow;
import org.apache.druid.data.input.MapBasedRow;
-import org.apache.druid.data.input.Row;
import org.apache.druid.error.DruidExceptionMatcher;
import org.apache.druid.java.util.common.CloseableIterators;
import org.apache.druid.java.util.common.DateTimes;
@@ -42,7 +41,6 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
-import javax.annotation.Nullable;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -518,52 +516,13 @@ public class TransformerTest extends
InitializedNullHandlingTest
Assert.assertEquals(row.getDimension("dim"), dimList);
Assert.assertEquals(row.getRaw("dim"), dimList);
- final InputRow actualTranformedRow = transformer.transform(new InputRow()
- {
- @Override
- public List<String> getDimensions()
- {
- return new ArrayList<>(row.getEvent().keySet());
- }
-
- @Override
- public long getTimestampFromEpoch()
- {
- return 0;
- }
-
- @Override
- public DateTime getTimestamp()
- {
- return row.getTimestamp();
- }
-
- @Override
- public List<String> getDimension(String dimension)
- {
- return row.getDimension(dimension);
- }
-
- @Nullable
- @Override
- public Object getRaw(String dimension)
- {
- return row.getRaw(dimension);
- }
-
- @Nullable
- @Override
- public Number getMetric(String metric)
- {
- return row.getMetric(metric);
- }
-
- @Override
- public int compareTo(Row o)
- {
- return row.compareTo(o);
- }
- });
+ final InputRow actualTranformedRow = transformer.transform(
+ new MapBasedInputRow(
+ row.getTimestamp(),
+ new ArrayList<>(row.getEvent().keySet()),
+ row.getEvent()
+ )
+ );
Assert.assertEquals(actualTranformedRow.getDimension("dim"),
dimList.subList(0, 5));
Assert.assertArrayEquals(dimList.subList(0, 5).toArray(), (Object[])
actualTranformedRow.getRaw("dim"));
Assert.assertEquals(ImmutableList.of("a"),
actualTranformedRow.getDimension("dim1"));
diff --git
a/processing/src/test/java/org/apache/druid/timeline/partition/HashBasedNumberedShardSpecTest.java
b/processing/src/test/java/org/apache/druid/timeline/partition/HashBasedNumberedShardSpecTest.java
index 9996b0aeb82..b2da88ef5dc 100644
---
a/processing/src/test/java/org/apache/druid/timeline/partition/HashBasedNumberedShardSpecTest.java
+++
b/processing/src/test/java/org/apache/druid/timeline/partition/HashBasedNumberedShardSpecTest.java
@@ -397,11 +397,24 @@ public class HashBasedNumberedShardSpecTest
{
private final int hashcode;
- HashInputRow(int hashcode)
+ HashInputRow(final int hashcode)
{
this.hashcode = hashcode;
}
+ @Override
+ public boolean equals(final Object o)
+ {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof HashInputRow)) {
+ return false;
+ }
+ final HashInputRow that = (HashInputRow) o;
+ return hashcode == that.hashcode;
+ }
+
@Override
public int hashCode()
{
@@ -445,9 +458,16 @@ public class HashBasedNumberedShardSpecTest
}
@Override
- public int compareTo(Row o)
+ public int compareTo(final Row o)
{
- return 0;
+ if (o instanceof HashInputRow) {
+ return Integer.compare(hashcode, ((HashInputRow) o).hashcode);
+ }
+
+ final int timestampComparison = Long.compare(getTimestampFromEpoch(),
o.getTimestampFromEpoch());
+ return timestampComparison != 0
+ ? timestampComparison
+ : getClass().getName().compareTo(o.getClass().getName());
}
}
diff --git
a/server/src/main/java/org/apache/druid/metadata/BasicDataSourceExt.java
b/server/src/main/java/org/apache/druid/metadata/BasicDataSourceExt.java
index cff9308a697..1140c7693a1 100644
--- a/server/src/main/java/org/apache/druid/metadata/BasicDataSourceExt.java
+++ b/server/src/main/java/org/apache/druid/metadata/BasicDataSourceExt.java
@@ -101,6 +101,8 @@ public class BasicDataSourceExt extends BasicDataSource
}
@VisibleForTesting
+ // This test accessor returns the properties tracked by this subclass; the
superclass getter is package-private.
+ // codeql[java/non-overriding-package-private]
public Properties getConnectionProperties()
{
return connectionProperties;
diff --git
a/server/src/main/java/org/apache/druid/server/QueryResultPusher.java
b/server/src/main/java/org/apache/druid/server/QueryResultPusher.java
index cb958ea9857..6f0b3ee272a 100644
--- a/server/src/main/java/org/apache/druid/server/QueryResultPusher.java
+++ b/server/src/main/java/org/apache/druid/server/QueryResultPusher.java
@@ -249,6 +249,11 @@ public abstract class QueryResultPusher
case TIMEOUT:
counter.incrementTimedOut();
break;
+ case CONFLICT:
+ case FORBIDDEN:
+ case NOT_FOUND:
+ case SERVICE_UNAVAILABLE:
+ break;
}
}
diff --git
a/server/src/test/java/org/apache/druid/rpc/NoDelayScheduledExecutorService.java
b/server/src/test/java/org/apache/druid/rpc/NoDelayScheduledExecutorService.java
index 7574be33043..60fab93ed3e 100644
---
a/server/src/test/java/org/apache/druid/rpc/NoDelayScheduledExecutorService.java
+++
b/server/src/test/java/org/apache/druid/rpc/NoDelayScheduledExecutorService.java
@@ -30,6 +30,7 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicLong;
/**
* Used by {@link ServiceClientImplTest} so retries happen immediately.
@@ -75,7 +76,10 @@ public class NoDelayScheduledExecutorService extends
ForwardingExecutorService i
private static class NoDelayScheduledFuture<T> implements ScheduledFuture<T>
{
+ private static final AtomicLong NEXT_SEQUENCE_NUMBER = new AtomicLong();
+
private final Future<T> delegate;
+ private final long sequenceNumber = NEXT_SEQUENCE_NUMBER.getAndIncrement();
public NoDelayScheduledFuture(final Future<T> delegate)
{
@@ -89,9 +93,27 @@ public class NoDelayScheduledExecutorService extends
ForwardingExecutorService i
}
@Override
- public int compareTo(Delayed o)
+ public int compareTo(final Delayed o)
{
- return 0;
+ if (this == o) {
+ return 0;
+ }
+ if (o instanceof NoDelayScheduledFuture) {
+ return Long.compare(sequenceNumber, ((NoDelayScheduledFuture<?>)
o).sequenceNumber);
+ }
+ return getClass().getName().compareTo(o.getClass().getName());
+ }
+
+ @Override
+ public boolean equals(final Object o)
+ {
+ return this == o;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return System.identityHashCode(this);
}
@Override
diff --git
a/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java
b/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java
index 99559033ce2..4e12583b374 100644
--- a/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java
+++ b/server/src/test/java/org/apache/druid/segment/realtime/sink/SinkTest.java
@@ -25,7 +25,6 @@ import com.google.common.collect.Iterators;
import com.google.common.collect.Maps;
import org.apache.druid.data.input.InputRow;
import org.apache.druid.data.input.MapBasedInputRow;
-import org.apache.druid.data.input.Row;
import
org.apache.druid.data.input.impl.ClusteredValueGroupsBaseTableProjectionSpec;
import org.apache.druid.data.input.impl.DimensionsSpec;
import org.apache.druid.data.input.impl.LongDimensionSchema;
@@ -55,13 +54,11 @@ import
org.apache.druid.timeline.partition.NumberedShardSpec;
import org.apache.druid.timeline.partition.ShardSpec;
import org.apache.druid.utils.CloseableUtils;
import org.easymock.EasyMock;
-import org.joda.time.DateTime;
import org.joda.time.Interval;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -99,52 +96,7 @@ public class SinkTest extends InitializedNullHandlingTest
TuningConfig.DEFAULT_APPENDABLE_INDEX.getDefaultMaxBytesInMemory()
);
- sink.add(
- new InputRow()
- {
- @Override
- public List<String> getDimensions()
- {
- return new ArrayList<>();
- }
-
- @Override
- public long getTimestampFromEpoch()
- {
- return DateTimes.of("2013-01-01").getMillis();
- }
-
- @Override
- public DateTime getTimestamp()
- {
- return DateTimes.of("2013-01-01");
- }
-
- @Override
- public List<String> getDimension(String dimension)
- {
- return new ArrayList<>();
- }
-
- @Override
- public Number getMetric(String metric)
- {
- return 0;
- }
-
- @Override
- public Object getRaw(String dimension)
- {
- return null;
- }
-
- @Override
- public int compareTo(Row o)
- {
- return 0;
- }
- }
- );
+ sink.add(new MapBasedInputRow(DateTimes.of("2013-01-01"),
ImmutableList.of(), ImmutableMap.of()));
FireHydrant currHydrant = sink.getCurrHydrant();
Assert.assertEquals(Intervals.of("2013-01-01/PT1M"),
currHydrant.getIndex().getInterval());
@@ -152,52 +104,7 @@ public class SinkTest extends InitializedNullHandlingTest
FireHydrant swapHydrant = sink.swap();
- sink.add(
- new InputRow()
- {
- @Override
- public List<String> getDimensions()
- {
- return new ArrayList<>();
- }
-
- @Override
- public long getTimestampFromEpoch()
- {
- return DateTimes.of("2013-01-01").getMillis();
- }
-
- @Override
- public DateTime getTimestamp()
- {
- return DateTimes.of("2013-01-01");
- }
-
- @Override
- public List<String> getDimension(String dimension)
- {
- return new ArrayList<>();
- }
-
- @Override
- public Number getMetric(String metric)
- {
- return 0;
- }
-
- @Override
- public Object getRaw(String dimension)
- {
- return null;
- }
-
- @Override
- public int compareTo(Row o)
- {
- return 0;
- }
- }
- );
+ sink.add(new MapBasedInputRow(DateTimes.of("2013-01-01"),
ImmutableList.of(), ImmutableMap.of()));
Assert.assertEquals(currHydrant, swapHydrant);
Assert.assertNotSame(currHydrant, sink.getCurrHydrant());
diff --git
a/server/src/test/java/org/apache/druid/server/coordinator/duty/CompactSegmentsTest.java
b/server/src/test/java/org/apache/druid/server/coordinator/duty/CompactSegmentsTest.java
index b4b070e77d0..cbdfec22e51 100644
---
a/server/src/test/java/org/apache/druid/server/coordinator/duty/CompactSegmentsTest.java
+++
b/server/src/test/java/org/apache/druid/server/coordinator/duty/CompactSegmentsTest.java
@@ -716,8 +716,7 @@ public class CompactSegmentsTest
@Test
public void
testRunMultipleCompactionTaskSlotsWithUseAutoScaleSlotsOverMaxSlot()
{
- int maxCompactionSlot = 3;
- Assert.assertTrue(maxCompactionSlot < MAXIMUM_CAPACITY_WITH_AUTO_SCALE);
+ final int maxCompactionSlot = 3;
final TestOverlordClient overlordClient = new
TestOverlordClient(JSON_MAPPER);
final CompactSegments compactSegments = new CompactSegments(statusTracker,
overlordClient);
final CoordinatorRunStats stats =
@@ -736,8 +735,7 @@ public class CompactSegmentsTest
@Test
public void
testRunMultipleCompactionTaskSlotsWithUseAutoScaleSlotsUnderMaxSlot()
{
- int maxCompactionSlot = 100;
- Assert.assertFalse(maxCompactionSlot < MAXIMUM_CAPACITY_WITH_AUTO_SCALE);
+ final int maxCompactionSlot = 100;
final TestOverlordClient overlordClient = new
TestOverlordClient(JSON_MAPPER);
final CompactSegments compactSegments = new CompactSegments(statusTracker,
overlordClient);
final CoordinatorRunStats stats =
diff --git
a/server/src/test/java/org/apache/druid/server/coordinator/simulate/WrappingScheduledExecutorService.java
b/server/src/test/java/org/apache/druid/server/coordinator/simulate/WrappingScheduledExecutorService.java
index 334651ee30f..a497a1c1640 100644
---
a/server/src/test/java/org/apache/druid/server/coordinator/simulate/WrappingScheduledExecutorService.java
+++
b/server/src/test/java/org/apache/druid/server/coordinator/simulate/WrappingScheduledExecutorService.java
@@ -33,6 +33,7 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicLong;
/**
* Wraps an {@link ExecutorService} into a {@link ScheduledExecutorService}.
@@ -188,7 +189,10 @@ public class WrappingScheduledExecutorService implements
ScheduledExecutorServic
*/
private static class WrappingScheduledFuture<V> implements ScheduledFuture<V>
{
+ private static final AtomicLong NEXT_SEQUENCE_NUMBER = new AtomicLong();
+
private final Future<V> future;
+ private final long sequenceNumber = NEXT_SEQUENCE_NUMBER.getAndIncrement();
private WrappingScheduledFuture(Future<V> future)
{
@@ -202,9 +206,27 @@ public class WrappingScheduledExecutorService implements
ScheduledExecutorServic
}
@Override
- public int compareTo(Delayed o)
+ public int compareTo(final Delayed o)
{
- return 0;
+ if (this == o) {
+ return 0;
+ }
+ if (o instanceof WrappingScheduledFuture) {
+ return Long.compare(sequenceNumber, ((WrappingScheduledFuture<?>)
o).sequenceNumber);
+ }
+ return getClass().getName().compareTo(o.getClass().getName());
+ }
+
+ @Override
+ public boolean equals(final Object o)
+ {
+ return this == o;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return System.identityHashCode(this);
}
@Override
diff --git a/sql/src/main/codegen/templates/Parser.jj
b/sql/src/main/codegen/templates/Parser.jj
index 3f39b1f050e..5d68325134a 100644
--- a/sql/src/main/codegen/templates/Parser.jj
+++ b/sql/src/main/codegen/templates/Parser.jj
@@ -431,6 +431,8 @@ JAVACODE void checkQueryExpression(ExprContext exprContext)
case ACCEPT_CURSOR:
throw SqlUtil.newContextException(getPos(),
RESOURCE.illegalQueryExpression());
+ default:
+ break;
}
}
@@ -440,6 +442,8 @@ JAVACODE void checkNonQueryExpression(ExprContext
exprContext)
case ACCEPT_QUERY:
throw SqlUtil.newContextException(getPos(),
RESOURCE.illegalNonQueryExpression());
+ default:
+ break;
}
}
@@ -834,6 +838,8 @@ SqlNode ParenthesizedExpression(ExprContext exprContext) :
case ACCEPT_CURSOR:
exprContext = ExprContext.ACCEPT_ALL;
break;
+ default:
+ break;
}
}
e = ExprOrJoinOrOrderedQuery(exprContext)
@@ -889,6 +895,8 @@ SqlNodeList ParenthesizedQueryOrCommaList(
case ACCEPT_CURSOR:
firstExprContext = ExprContext.ACCEPT_ALL;
break;
+ default:
+ break;
}
}
e = OrderedQueryOrExpr(firstExprContext) { list.add(e); }
@@ -930,6 +938,8 @@ SqlNodeList ParenthesizedQueryOrCommaListWithDefault(
case ACCEPT_CURSOR:
firstExprContext = ExprContext.ACCEPT_ALL;
break;
+ default:
+ break;
}
}
(
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]