Skip to content

Commit b90e7b8

Browse files
committed
add Doc and change to concurrency map
Signed-off-by: xinyual <xinyual@amazon.com>
1 parent 30228c9 commit b90e7b8

2 files changed

Lines changed: 15 additions & 8 deletions

File tree

core/src/main/java/org/opensearch/sql/expression/function/PPLFuncImpTable.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@
191191
import java.util.Objects;
192192
import java.util.Optional;
193193
import java.util.StringJoiner;
194+
import java.util.concurrent.ConcurrentHashMap;
194195
import java.util.function.BiFunction;
195196
import java.util.stream.Collectors;
196197
import org.apache.calcite.rel.type.RelDataType;
@@ -328,13 +329,13 @@ private PPLFuncImpTable(Builder builder, AggBuilder aggBuilder) {
328329
mapBuilder = ImmutableMap.builder();
329330
builder.map.forEach((k, v) -> mapBuilder.put(k, List.copyOf(v)));
330331
this.functionRegistry = ImmutableMap.copyOf(mapBuilder.build());
331-
this.externalFunctionRegistry = new HashMap<>();
332+
this.externalFunctionRegistry = new ConcurrentHashMap<>();
332333

333334
final ImmutableMap.Builder<BuiltinFunctionName, AggHandler> aggMapBuilder =
334335
ImmutableMap.builder();
335336
aggBuilder.map.forEach(aggMapBuilder::put);
336337
this.aggFunctionRegistry = ImmutableMap.copyOf(aggMapBuilder.build());
337-
this.aggExternalFunctionRegistry = new HashMap<>();
338+
this.aggExternalFunctionRegistry = new ConcurrentHashMap<>();
338339
}
339340

340341
/**
@@ -346,12 +347,14 @@ private PPLFuncImpTable(Builder builder, AggBuilder aggBuilder) {
346347
public void registerExternalFunction(BuiltinFunctionName functionName, FunctionImp functionImp) {
347348
CalciteFuncSignature signature =
348349
new CalciteFuncSignature(functionName.getName(), functionImp.getTypeChecker());
349-
if (externalFunctionRegistry.containsKey(functionName)) {
350-
externalFunctionRegistry.get(functionName).add(Pair.of(signature, functionImp));
351-
} else {
352-
externalFunctionRegistry.put(
353-
functionName, new ArrayList<>(List.of(Pair.of(signature, functionImp))));
354-
}
350+
externalFunctionRegistry.compute(
351+
functionName,
352+
(name, existingList) -> {
353+
List<Pair<CalciteFuncSignature, FunctionImp>> list =
354+
existingList == null ? new ArrayList<>() : new ArrayList<>(existingList);
355+
list.add(Pair.of(signature, functionImp));
356+
return list;
357+
});
355358
}
356359

357360
/**

opensearch/src/main/java/org/opensearch/sql/opensearch/functions/DistinctCountApproxAggFunction.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
import org.opensearch.search.aggregations.metrics.HyperLogLogPlusPlus;
1414
import org.opensearch.sql.calcite.udf.UserDefinedAggFunction;
1515

16+
/**
17+
* The Function depends on Opensearch Core's HLL++ algorithm to implement an approximate distinct
18+
* count
19+
*/
1620
public class DistinctCountApproxAggFunction
1721
implements UserDefinedAggFunction<DistinctCountApproxAggFunction.HLLAccumulator> {
1822

0 commit comments

Comments
 (0)