You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by xb...@apache.org on 2024/08/08 22:20:34 UTC
(pinot) branch master updated: add routing policy in query errmsg upon unavailable segments for a bit more context (#13706)
This is an automated email from the ASF dual-hosted git repository.
xbli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new a9aad2de86 add routing policy in query errmsg upon unavailable segments for a bit more context (#13706)
a9aad2de86 is described below
commit a9aad2de865cf0332ae4fe0333e463f4345736a4
Author: Xiaobing <61...@users.noreply.github.com>
AuthorDate: Thu Aug 8 15:20:28 2024 -0700
add routing policy in query errmsg upon unavailable segments for a bit more context (#13706)
* add routing policy in query errmsg upon unavailable segments for a bit more context
---
.../BaseSingleStageBrokerRequestHandler.java | 29 ++++++++++++++++++++++
.../BaseSingleStageBrokerRequestHandlerTest.java | 11 ++++++++
.../pinot/spi/config/table/RoutingConfig.java | 1 +
3 files changed, 41 insertions(+)
diff --git a/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseSingleStageBrokerRequestHandler.java b/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseSingleStageBrokerRequestHandler.java
index dfac99bb82..28eebf205b 100644
--- a/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseSingleStageBrokerRequestHandler.java
+++ b/pinot-broker/src/main/java/org/apache/pinot/broker/requesthandler/BaseSingleStageBrokerRequestHandler.java
@@ -91,6 +91,7 @@ import org.apache.pinot.query.parser.utils.ParserUtils;
import org.apache.pinot.spi.auth.AuthorizationResult;
import org.apache.pinot.spi.config.table.FieldConfig;
import org.apache.pinot.spi.config.table.QueryConfig;
+import org.apache.pinot.spi.config.table.RoutingConfig;
import org.apache.pinot.spi.config.table.TableConfig;
import org.apache.pinot.spi.config.table.TableType;
import org.apache.pinot.spi.data.DimensionFieldSpec;
@@ -679,6 +680,9 @@ public abstract class BaseSingleStageBrokerRequestHandler extends BaseBrokerRequ
} else {
errorMessage = String.format("%d segments unavailable: %s", numUnavailableSegments, unavailableSegments);
}
+ String realtimeRoutingPolicy = realtimeBrokerRequest != null ? getRoutingPolicy(realtimeTableConfig) : null;
+ String offlineRoutingPolicy = offlineBrokerRequest != null ? getRoutingPolicy(offlineTableConfig) : null;
+ errorMessage = addRoutingPolicyInErrMsg(errorMessage, realtimeRoutingPolicy, offlineRoutingPolicy);
exceptions.add(QueryException.getException(QueryException.BROKER_SEGMENT_UNAVAILABLE_ERROR, errorMessage));
_brokerMetrics.addMeteredTableValue(rawTableName, BrokerMeter.BROKER_RESPONSES_WITH_UNAVAILABLE_SEGMENTS, 1);
}
@@ -836,6 +840,31 @@ public abstract class BaseSingleStageBrokerRequestHandler extends BaseBrokerRequ
}
}
+ @VisibleForTesting
+ static String addRoutingPolicyInErrMsg(String errorMessage, String realtimeRoutingPolicy,
+ String offlineRoutingPolicy) {
+ if (realtimeRoutingPolicy != null && offlineRoutingPolicy != null) {
+ return errorMessage + ", with routing policy: " + realtimeRoutingPolicy + " [realtime], " + offlineRoutingPolicy
+ + " [offline]";
+ }
+ if (realtimeRoutingPolicy != null) {
+ return errorMessage + ", with routing policy: " + realtimeRoutingPolicy + " [realtime]";
+ }
+ if (offlineRoutingPolicy != null) {
+ return errorMessage + ", with routing policy: " + offlineRoutingPolicy + " [offline]";
+ }
+ return errorMessage;
+ }
+
+ private static String getRoutingPolicy(TableConfig tableConfig) {
+ RoutingConfig routingConfig = tableConfig.getRoutingConfig();
+ if (routingConfig == null) {
+ return RoutingConfig.DEFAULT_INSTANCE_SELECTOR_TYPE;
+ }
+ String selectorType = routingConfig.getInstanceSelectorType();
+ return selectorType != null ? selectorType : RoutingConfig.DEFAULT_INSTANCE_SELECTOR_TYPE;
+ }
+
private BrokerResponseNative getEmptyBrokerOnlyResponse(PinotQuery pinotQuery, RequestContext requestContext,
String tableName, @Nullable RequesterIdentity requesterIdentity) {
if (pinotQuery.isExplain()) {
diff --git a/pinot-broker/src/test/java/org/apache/pinot/broker/requesthandler/BaseSingleStageBrokerRequestHandlerTest.java b/pinot-broker/src/test/java/org/apache/pinot/broker/requesthandler/BaseSingleStageBrokerRequestHandlerTest.java
index 7dfbdd75b9..0677d9dc5d 100644
--- a/pinot-broker/src/test/java/org/apache/pinot/broker/requesthandler/BaseSingleStageBrokerRequestHandlerTest.java
+++ b/pinot-broker/src/test/java/org/apache/pinot/broker/requesthandler/BaseSingleStageBrokerRequestHandlerTest.java
@@ -223,4 +223,15 @@ public class BaseSingleStageBrokerRequestHandlerTest {
Assert.assertEquals(servers.iterator().next().getAdminEndpoint(), "http://server01:8097");
latch.countDown();
}
+
+ @Test
+ public void testAddRoutingPolicyInErrMsg() {
+ Assert.assertEquals(BaseSingleStageBrokerRequestHandler.addRoutingPolicyInErrMsg("error1", null, null), "error1");
+ Assert.assertEquals(BaseSingleStageBrokerRequestHandler.addRoutingPolicyInErrMsg("error1", "rt_rp", null),
+ "error1, with routing policy: rt_rp [realtime]");
+ Assert.assertEquals(BaseSingleStageBrokerRequestHandler.addRoutingPolicyInErrMsg("error1", null, "off_rp"),
+ "error1, with routing policy: off_rp [offline]");
+ Assert.assertEquals(BaseSingleStageBrokerRequestHandler.addRoutingPolicyInErrMsg("error1", "rt_rp", "off_rp"),
+ "error1, with routing policy: rt_rp [realtime], off_rp [offline]");
+ }
}
diff --git a/pinot-spi/src/main/java/org/apache/pinot/spi/config/table/RoutingConfig.java b/pinot-spi/src/main/java/org/apache/pinot/spi/config/table/RoutingConfig.java
index 7bf5970f11..65b1b00a48 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/config/table/RoutingConfig.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/config/table/RoutingConfig.java
@@ -29,6 +29,7 @@ public class RoutingConfig extends BaseJsonConfig {
public static final String PARTITION_SEGMENT_PRUNER_TYPE = "partition";
public static final String TIME_SEGMENT_PRUNER_TYPE = "time";
public static final String EMPTY_SEGMENT_PRUNER_TYPE = "empty";
+ public static final String DEFAULT_INSTANCE_SELECTOR_TYPE = "balanced";
public static final String REPLICA_GROUP_INSTANCE_SELECTOR_TYPE = "replicaGroup";
public static final String STRICT_REPLICA_GROUP_INSTANCE_SELECTOR_TYPE = "strictReplicaGroup";
public static final String MULTI_STAGE_REPLICA_GROUP_SELECTOR_TYPE = "multiStageReplicaGroup";
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org