Skip to content

[Backport] IncrementalIndex#add is no longer thread-safe.#15793

Merged
abhishekagarwal87 merged 1 commit intoapache:29.0.0from
LakshSingla:backport-15697-to-29.0.0
Jan 30, 2024
Merged

[Backport] IncrementalIndex#add is no longer thread-safe.#15793
abhishekagarwal87 merged 1 commit intoapache:29.0.0from
LakshSingla:backport-15697-to-29.0.0

Conversation

@LakshSingla
Copy link
Copy Markdown
Contributor

Backport of #15697 to 29.0.0.

* IncrementalIndex#add is no longer thread-safe.

Following apache#14866, there is no longer a reason for IncrementalIndex#add
to be thread-safe.

It turns out it already was not using its selectors in a thread-safe way,
as exposed by apache#15615 making `testMultithreadAddFactsUsingExpressionAndJavaScript`
in `IncrementalIndexIngestionTest` flaky. Note that this problem isn't
new: Strings have been stored in the dimension selectors for some time,
but we didn't have a test that checked for that case; we only have
this test that checks for concurrent adds involving numeric selectors.

At any rate, this patch changes OnheapIncrementalIndex to no longer try
to offer a thread-safe "add" method. It also improves performance a bit
by adding a row ID supplier to the selectors it uses to read InputRows,
meaning that it can get the benefit of caching values inside the selectors.

This patch also:

1) Adds synchronization to HyperUniquesAggregator and CardinalityAggregator,
   which the similar datasketches versions already have. This is done to
   help them adhere to the contract of Aggregator: concurrent calls to
   "aggregate" and "get" must be thread-safe.

2) Updates OnHeapIncrementalIndexBenchmark to use JMH and moves it to the
   druid-benchmarks module.

* Spelling.

* Changes from static analysis.

* Fix javadoc.
@abhishekagarwal87 abhishekagarwal87 merged commit de0569b into apache:29.0.0 Jan 30, 2024
@LakshSingla LakshSingla deleted the backport-15697-to-29.0.0 branch February 1, 2024 06:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants