You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by "gortiz (via GitHub)" <gi...@apache.org> on 2025/09/16 10:48:10 UTC
[PR] Add benchmark for equi-join queries with various configurations [pinot]
gortiz opened a new pull request, #16825:
URL: https://github.com/apache/pinot/pull/16825
Simple PR including a new benchmark. This benchmark is similar to BenchmarkQueriesMSQE, which means it starts a single process cluster. This also means it has some issues to stop each benchmark JVM, given that some threads are leaked. This is a well-known issue of the BaseClusterIntegrationTest that should be fixed on another PR.
Results on my local machine are:
```
Benchmark (_segments) (_uRatio) Mode Cnt Score Error Units
BenchmarkEquiJoin.countJoinOneHundredthInt 10 1 avgt 5 56.711 ± 5.626 ms/op
BenchmarkEquiJoin.countJoinOneHundredthStr 10 1 avgt 5 72.056 ± 7.494 ms/op
BenchmarkEquiJoin.projectJoinOneHundredthInt 10 1 avgt 5 159.860 ± 8.283 ms/op
BenchmarkEquiJoin.projectJoinOneHundredthStr 10 1 avgt 5 205.084 ± 15.702 ms/op
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org
Re: [PR] Add benchmark for equi-join queries with various configurations [pinot]
Posted by "codecov-commenter (via GitHub)" <gi...@apache.org>.
codecov-commenter commented on PR #16825:
URL: https://github.com/apache/pinot/pull/16825#issuecomment-3298704750
## [Codecov](https://app.codecov.io/gh/apache/pinot/pull/16825?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
:white_check_mark: All modified and coverable lines are covered by tests.
:white_check_mark: Project coverage is 56.12%. Comparing base ([`d45f508`](https://app.codecov.io/gh/apache/pinot/commit/d45f508a7b34df52376bf8aa6015f132f6fa96d3?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)) to head ([`a0df109`](https://app.codecov.io/gh/apache/pinot/commit/a0df109c5484d4b6b6e27bcaaf17abd3cec6e896?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
:warning: Report is 22 commits behind head on master.
> :exclamation: There is a different number of reports uploaded between BASE (d45f508) and HEAD (a0df109). Click for more details.
>
> <details><summary>HEAD has 36 uploads less than BASE</summary>
>
>| Flag | BASE (d45f508) | HEAD (a0df109) |
>|------|------|------|
>|java-21|5|1|
>|unittests1|2|1|
>|unittests|4|1|
>|temurin|10|1|
>|unittests2|2|0|
>|integration|6|0|
>|integration1|2|0|
>|java-11|5|0|
>|custom-integration1|2|0|
>|integration2|2|0|
></details>
<details><summary>Additional details and impacted files</summary>
```diff
@@ Coverage Diff @@
## master #16825 +/- ##
============================================
- Coverage 63.36% 56.12% -7.25%
+ Complexity 1399 700 -699
============================================
Files 3054 2396 -658
Lines 178909 133224 -45685
Branches 27419 21198 -6221
============================================
- Hits 113374 74773 -38601
+ Misses 56805 52197 -4608
+ Partials 8730 6254 -2476
```
| [Flag](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Δ | |
|---|---|---|
| [custom-integration1](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
| [integration](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
| [integration1](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
| [integration2](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
| [java-11](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
| [java-21](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `56.12% <ø> (-7.19%)` | :arrow_down: |
| [temurin](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `56.12% <ø> (-7.25%)` | :arrow_down: |
| [unittests](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `56.12% <ø> (-7.25%)` | :arrow_down: |
| [unittests1](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `56.12% <ø> (-0.22%)` | :arrow_down: |
| [unittests2](https://app.codecov.io/gh/apache/pinot/pull/16825/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#carryforward-flags-in-the-pull-request-comment) to find out more.
</details>
[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/apache/pinot/pull/16825?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
<details><summary> :rocket: New features to boost your workflow: </summary>
- :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
</details>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org
Re: [PR] Add benchmark for equi-join queries with various configurations [pinot]
Posted by "Copilot (via GitHub)" <gi...@apache.org>.
Copilot commented on code in PR #16825:
URL: https://github.com/apache/pinot/pull/16825#discussion_r2352424081
##########
pinot-perf/src/main/java/org/apache/pinot/perf/BenchmarkEquiJoin.java:
##########
@@ -0,0 +1,316 @@
+/**
+ * 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.pinot.perf;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.base.Preconditions;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+import org.apache.commons.io.FileUtils;
+import org.apache.pinot.common.utils.TarCompressionUtils;
+import org.apache.pinot.integration.tests.BaseClusterIntegrationTest;
+import org.apache.pinot.integration.tests.ClusterIntegrationTestUtils;
+import org.apache.pinot.segment.local.segment.creator.impl.SegmentIndexCreationDriverImpl;
+import org.apache.pinot.segment.spi.creator.SegmentGeneratorConfig;
+import org.apache.pinot.spi.config.table.FieldConfig;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.config.table.TableType;
+import org.apache.pinot.spi.data.FieldSpec;
+import org.apache.pinot.spi.data.Schema;
+import org.apache.pinot.spi.data.readers.GenericRow;
+import org.apache.pinot.spi.data.readers.RecordReader;
+import org.apache.pinot.spi.env.PinotConfiguration;
+import org.apache.pinot.spi.utils.CommonConstants;
+import org.apache.pinot.spi.utils.builder.TableConfigBuilder;
+import org.apache.pinot.util.TestUtils;
+import org.intellij.lang.annotations.Language;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.TearDown;
+import org.openjdk.jmh.annotations.Warmup;
+import org.openjdk.jmh.profile.GCProfiler;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.options.ChainedOptionsBuilder;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@Fork(1)
+@Warmup(iterations = 10, time = 1)
+@Measurement(iterations = 5, time = 1)
+@State(Scope.Benchmark)
+public class BenchmarkEquiJoin extends BaseClusterIntegrationTest {
+
+ public static void main(String[] args)
+ throws Exception {
+ ChainedOptionsBuilder opt = new OptionsBuilder()
+ .include(BenchmarkEquiJoin.class.getSimpleName())
+ .addProfiler(GCProfiler.class);
+ new Runner(opt.build()).run();
+ }
+
+ /// Number of rows on each segment
+ private int _rowsPerSegment = 100_000;
+ @Param({"10"})
+ private int _segments;
+
+ /// The ratio (in the range of `(0, 1]`) of unique rows in the table.
+ ///
+ /// The lower the [#_uRatio], the more rows will match in the join.
+ /// The requested uniqueness will not be guaranteed. Instead it will be statistically approached by using a
+ /// random number generator to create the data.
+ //@Param({"1", "0.1", "0.01"})
+ @Param({"1"})
+ private double _uRatio;
+
+ private JsonNode query(String query)
+ throws Exception {
+ JsonNode result = postQuery(query,
+ ClusterIntegrationTestUtils.getBrokerQueryApiUrl(getBrokerBaseApiUrl(), true),
+ null,
+ getExtraQueryProperties());
+ JsonNode exceptions = result.get("exceptions").get(0);
+ if (exceptions != null) {
+ throw new RuntimeException(exceptions.get("message").asText());
+ }
+ return result.get("resultTable").get("rows");
+ }
+
+ @Override
+ protected Map<String, String> getExtraQueryProperties() {
+ return Map.of("useMultistageEngine", "true", "dropResults", "true");
+ }
+
+ /// Executes a query where [#_rowsPerSegment] left rows are joined by int with [#_rowsPerSegment]/100 right rows
+ /// and then counted
+ @Benchmark
+ public JsonNode countJoinOneHundredthInt()
+ throws Exception {
+ @Language("sql")
+ String query = "SET useMultistageEngine=true;"
+ + "SET maxRowsInJoin=1000000000;"
+ + "SELECT count(*) "
+ + "FROM MyTable t1 "
+ + "JOIN MyTable t2 "
+ + "ON t1.intCol = t2.intCol "
+ + "WHERE t2.intCol % 10 = 0";
+ ;
Review Comment:
Remove the unnecessary semicolon on line 127. It serves no purpose and reduces code readability.
```suggestion
```
##########
pinot-perf/src/main/java/org/apache/pinot/perf/BenchmarkEquiJoin.java:
##########
@@ -0,0 +1,316 @@
+/**
+ * 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.pinot.perf;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.base.Preconditions;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+import org.apache.commons.io.FileUtils;
+import org.apache.pinot.common.utils.TarCompressionUtils;
+import org.apache.pinot.integration.tests.BaseClusterIntegrationTest;
+import org.apache.pinot.integration.tests.ClusterIntegrationTestUtils;
+import org.apache.pinot.segment.local.segment.creator.impl.SegmentIndexCreationDriverImpl;
+import org.apache.pinot.segment.spi.creator.SegmentGeneratorConfig;
+import org.apache.pinot.spi.config.table.FieldConfig;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.config.table.TableType;
+import org.apache.pinot.spi.data.FieldSpec;
+import org.apache.pinot.spi.data.Schema;
+import org.apache.pinot.spi.data.readers.GenericRow;
+import org.apache.pinot.spi.data.readers.RecordReader;
+import org.apache.pinot.spi.env.PinotConfiguration;
+import org.apache.pinot.spi.utils.CommonConstants;
+import org.apache.pinot.spi.utils.builder.TableConfigBuilder;
+import org.apache.pinot.util.TestUtils;
+import org.intellij.lang.annotations.Language;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.TearDown;
+import org.openjdk.jmh.annotations.Warmup;
+import org.openjdk.jmh.profile.GCProfiler;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.options.ChainedOptionsBuilder;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@Fork(1)
+@Warmup(iterations = 10, time = 1)
+@Measurement(iterations = 5, time = 1)
+@State(Scope.Benchmark)
+public class BenchmarkEquiJoin extends BaseClusterIntegrationTest {
+
+ public static void main(String[] args)
+ throws Exception {
+ ChainedOptionsBuilder opt = new OptionsBuilder()
+ .include(BenchmarkEquiJoin.class.getSimpleName())
+ .addProfiler(GCProfiler.class);
+ new Runner(opt.build()).run();
+ }
+
+ /// Number of rows on each segment
+ private int _rowsPerSegment = 100_000;
+ @Param({"10"})
+ private int _segments;
+
+ /// The ratio (in the range of `(0, 1]`) of unique rows in the table.
+ ///
+ /// The lower the [#_uRatio], the more rows will match in the join.
+ /// The requested uniqueness will not be guaranteed. Instead it will be statistically approached by using a
+ /// random number generator to create the data.
+ //@Param({"1", "0.1", "0.01"})
+ @Param({"1"})
+ private double _uRatio;
+
+ private JsonNode query(String query)
+ throws Exception {
+ JsonNode result = postQuery(query,
+ ClusterIntegrationTestUtils.getBrokerQueryApiUrl(getBrokerBaseApiUrl(), true),
+ null,
+ getExtraQueryProperties());
+ JsonNode exceptions = result.get("exceptions").get(0);
+ if (exceptions != null) {
+ throw new RuntimeException(exceptions.get("message").asText());
+ }
+ return result.get("resultTable").get("rows");
+ }
+
+ @Override
+ protected Map<String, String> getExtraQueryProperties() {
+ return Map.of("useMultistageEngine", "true", "dropResults", "true");
+ }
+
+ /// Executes a query where [#_rowsPerSegment] left rows are joined by int with [#_rowsPerSegment]/100 right rows
+ /// and then counted
+ @Benchmark
+ public JsonNode countJoinOneHundredthInt()
+ throws Exception {
+ @Language("sql")
+ String query = "SET useMultistageEngine=true;"
+ + "SET maxRowsInJoin=1000000000;"
Review Comment:
The hardcoded value '1000000000' for maxRowsInJoin should be extracted as a named constant to improve maintainability and make it easier to adjust across different benchmark methods.
##########
pinot-perf/src/main/java/org/apache/pinot/perf/BenchmarkEquiJoin.java:
##########
@@ -0,0 +1,316 @@
+/**
+ * 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.pinot.perf;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.base.Preconditions;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+import org.apache.commons.io.FileUtils;
+import org.apache.pinot.common.utils.TarCompressionUtils;
+import org.apache.pinot.integration.tests.BaseClusterIntegrationTest;
+import org.apache.pinot.integration.tests.ClusterIntegrationTestUtils;
+import org.apache.pinot.segment.local.segment.creator.impl.SegmentIndexCreationDriverImpl;
+import org.apache.pinot.segment.spi.creator.SegmentGeneratorConfig;
+import org.apache.pinot.spi.config.table.FieldConfig;
+import org.apache.pinot.spi.config.table.TableConfig;
+import org.apache.pinot.spi.config.table.TableType;
+import org.apache.pinot.spi.data.FieldSpec;
+import org.apache.pinot.spi.data.Schema;
+import org.apache.pinot.spi.data.readers.GenericRow;
+import org.apache.pinot.spi.data.readers.RecordReader;
+import org.apache.pinot.spi.env.PinotConfiguration;
+import org.apache.pinot.spi.utils.CommonConstants;
+import org.apache.pinot.spi.utils.builder.TableConfigBuilder;
+import org.apache.pinot.util.TestUtils;
+import org.intellij.lang.annotations.Language;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.TearDown;
+import org.openjdk.jmh.annotations.Warmup;
+import org.openjdk.jmh.profile.GCProfiler;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.options.ChainedOptionsBuilder;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@Fork(1)
+@Warmup(iterations = 10, time = 1)
+@Measurement(iterations = 5, time = 1)
+@State(Scope.Benchmark)
+public class BenchmarkEquiJoin extends BaseClusterIntegrationTest {
+
+ public static void main(String[] args)
+ throws Exception {
+ ChainedOptionsBuilder opt = new OptionsBuilder()
+ .include(BenchmarkEquiJoin.class.getSimpleName())
+ .addProfiler(GCProfiler.class);
+ new Runner(opt.build()).run();
+ }
+
+ /// Number of rows on each segment
+ private int _rowsPerSegment = 100_000;
+ @Param({"10"})
+ private int _segments;
+
+ /// The ratio (in the range of `(0, 1]`) of unique rows in the table.
+ ///
+ /// The lower the [#_uRatio], the more rows will match in the join.
+ /// The requested uniqueness will not be guaranteed. Instead it will be statistically approached by using a
+ /// random number generator to create the data.
+ //@Param({"1", "0.1", "0.01"})
+ @Param({"1"})
+ private double _uRatio;
+
+ private JsonNode query(String query)
+ throws Exception {
+ JsonNode result = postQuery(query,
+ ClusterIntegrationTestUtils.getBrokerQueryApiUrl(getBrokerBaseApiUrl(), true),
+ null,
+ getExtraQueryProperties());
+ JsonNode exceptions = result.get("exceptions").get(0);
+ if (exceptions != null) {
+ throw new RuntimeException(exceptions.get("message").asText());
Review Comment:
This code will throw a NullPointerException if the 'exceptions' array is empty. Check if the array has elements before accessing index 0, or use a safer approach to handle the exceptions array.
```suggestion
JsonNode exceptionsNode = result.get("exceptions");
if (exceptionsNode != null && exceptionsNode.isArray() && exceptionsNode.size() > 0) {
JsonNode exception = exceptionsNode.get(0);
if (exception != null && exception.has("message")) {
throw new RuntimeException(exception.get("message").asText());
}
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org
Re: [PR] Add benchmark for equi-join queries with various configurations [pinot]
Posted by "xiangfu0 (via GitHub)" <gi...@apache.org>.
xiangfu0 commented on code in PR #16825:
URL: https://github.com/apache/pinot/pull/16825#discussion_r2352422815
##########
pinot-perf/src/main/resources/log4j2-test.properties:
##########
@@ -0,0 +1,53 @@
+#
+# 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.
+#
+
+status = error
+name = PropertiesConfig
+
+# Appenders
+appender.console.type = Console
+appender.console.name = console
+appender.console.target = SYSTEM_OUT
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d{yyyy/MM/dd HH:mm:ss.SSS} %p [%c{1}] [%t] %m%n
+
+appender.controllerLog.type = RandomAccessFile
+appender.controllerLog.name = controllerLog
+appender.controllerLog.fileName = pinotController.log
+appender.controllerLog.immediateFlush = false
+appender.controllerLog.layout.type = PatternLayout
+appender.controllerLog.layout.pattern = %d{yyyy/MM/dd HH:mm:ss.SSS} %p [%c{1}] [%t] %m%n
+
+appender.brokerLog.type = RandomAccessFile
+appender.brokerLog.name = brokerLog
+appender.brokerLog.fileName = pinotBroker.log
+appender.brokerLog.immediateFlush = false
+appender.brokerLog.layout.type = PatternLayout
+appender.brokerLog.layout.pattern = %d{yyyy/MM/dd HH:mm:ss.SSS} %p [%c{1}] [%t] %m%n
+
+appender.serverLog.type = RandomAccessFile
+appender.serverLog.name = serverLog
+appender.serverLog.fileName = pinotServer.log
+appender.serverLog.immediateFlush = false
+appender.serverLog.layout.type = PatternLayout
+appender.serverLog.layout.pattern = %d{yyyy/MM/dd HH:mm:ss.SSS} %p [%c{1}] [%t] %m%n
+
+# Loggers
+rootLogger.level = error
+rootLogger.appenderRef.console.ref = console
Review Comment:
nit: newline
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org
Re: [PR] Add benchmark for equi-join queries with various configurations [pinot]
Posted by "xiangfu0 (via GitHub)" <gi...@apache.org>.
xiangfu0 commented on PR #16825:
URL: https://github.com/apache/pinot/pull/16825#issuecomment-3298654525
For single process cluster, would all mailbox become in-memory even between broker and server
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org
Re: [PR] Add benchmark for equi-join queries with various configurations [pinot]
Posted by "gortiz (via GitHub)" <gi...@apache.org>.
gortiz merged PR #16825:
URL: https://github.com/apache/pinot/pull/16825
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org