This is an automated email from the ASF dual-hosted git repository.
jackie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 330f37f Fix the NPE when no segment exists in RealtimeSegmentSelector
(#5138)
330f37f is described below
commit 330f37f4024c5c7ab20f7fdd729bb029f511ad4f
Author: Xiaotian (Jackie) Jiang <[email protected]>
AuthorDate: Tue Mar 10 21:18:23 2020 -0700
Fix the NPE when no segment exists in RealtimeSegmentSelector (#5138)
1. When no HLC or LLC segment exists, return empty list
2. Fix the external view version in RoutingManager for non-existing
external view
---
.../org/apache/pinot/broker/routing/RoutingManager.java | 15 +++++++++++++--
.../routing/segmentselector/RealtimeSegmentSelector.java | 3 +++
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git
a/pinot-broker/src/main/java/org/apache/pinot/broker/routing/RoutingManager.java
b/pinot-broker/src/main/java/org/apache/pinot/broker/routing/RoutingManager.java
index 8b87872..6d2eebc 100644
---
a/pinot-broker/src/main/java/org/apache/pinot/broker/routing/RoutingManager.java
+++
b/pinot-broker/src/main/java/org/apache/pinot/broker/routing/RoutingManager.java
@@ -20,6 +20,7 @@ package org.apache.pinot.broker.routing;
import com.google.common.base.Preconditions;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -289,13 +290,21 @@ public class RoutingManager implements
ClusterChangeHandler {
TableConfig tableConfig =
ZKMetadataProvider.getTableConfig(_propertyStore, tableNameWithType);
Preconditions.checkState(tableConfig != null, "Failed to find table config
for table: {}", tableNameWithType);
- // NOTE: External view might be null for new created tables. In such case,
create an empty one.
+
ExternalView externalView = getExternalView(tableNameWithType);
+ int externalViewVersion;
+ // NOTE: External view might be null for new created tables. In such case,
create an empty one and set the version
+ // to -1 to ensure the version does not match the next external view
if (externalView == null) {
externalView = new ExternalView(tableNameWithType);
+ externalViewVersion = -1;
+ } else {
+ externalViewVersion = externalView.getRecord().getVersion();
}
+
Set<String> onlineSegments = getOnlineSegments(tableNameWithType);
Preconditions.checkState(onlineSegments != null, "Failed to find ideal
state for table: {}", tableNameWithType);
+
Set<String> enabledInstances = _enabledServerInstanceMap.keySet();
SegmentSelector segmentSelector =
SegmentSelectorFactory.getSegmentSelector(tableConfig);
@@ -306,7 +315,6 @@ public class RoutingManager implements ClusterChangeHandler
{
}
InstanceSelector instanceSelector =
InstanceSelectorFactory.getInstanceSelector(tableConfig, _brokerMetrics);
instanceSelector.init(enabledInstances, externalView, onlineSegments);
- int externalViewVersion = externalView.getRecord().getVersion();
// Add time boundary manager if both offline and real-time part exist for
a hybrid table
TimeBoundaryManager timeBoundaryManager = null;
@@ -511,6 +519,9 @@ public class RoutingManager implements ClusterChangeHandler
{
Map<String, String> calculateSegmentToInstanceMap(BrokerRequest
brokerRequest) {
List<String> selectedSegments = _segmentSelector.select(brokerRequest);
+ if (selectedSegments.isEmpty()) {
+ return Collections.emptyMap();
+ }
for (SegmentPruner segmentPruner : _segmentPruners) {
selectedSegments = segmentPruner.prune(brokerRequest,
selectedSegments);
}
diff --git
a/pinot-broker/src/main/java/org/apache/pinot/broker/routing/segmentselector/RealtimeSegmentSelector.java
b/pinot-broker/src/main/java/org/apache/pinot/broker/routing/segmentselector/RealtimeSegmentSelector.java
index cd95279..b89961a 100644
---
a/pinot-broker/src/main/java/org/apache/pinot/broker/routing/segmentselector/RealtimeSegmentSelector.java
+++
b/pinot-broker/src/main/java/org/apache/pinot/broker/routing/segmentselector/RealtimeSegmentSelector.java
@@ -136,6 +136,9 @@ public class RealtimeSegmentSelector implements
SegmentSelector {
@Override
public List<String> select(BrokerRequest brokerRequest) {
+ if (_hlcSegments == null && _llcSegments == null) {
+ return Collections.emptyList();
+ }
if (_hlcSegments == null) {
return selectLLCSegments();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]