summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/querytransform/RecallSearcher.java28
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/request/MathResolver.java34
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/vespa/RequestBuilder.java11
-rwxr-xr-xcontainer-search/src/test/java/com/yahoo/prelude/querytransform/test/RecallSearcherTestCase.java24
-rw-r--r--document/src/main/java/com/yahoo/document/annotation/RecursiveNodeIterator.java9
-rw-r--r--document/src/main/java/com/yahoo/document/select/rule/ArithmeticNode.java62
-rw-r--r--document/src/main/java/com/yahoo/document/select/rule/LogicNode.java56
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/MathResolver.java9
-rwxr-xr-xmessagebus/src/main/java/com/yahoo/messagebus/routing/RoutingNode.java6
-rw-r--r--vdslib/src/test/java/com/yahoo/vdslib/distribution/DistributionTestCase.java163
10 files changed, 184 insertions, 218 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/querytransform/RecallSearcher.java b/container-search/src/main/java/com/yahoo/prelude/querytransform/RecallSearcher.java
index f0a18954e40..98a8e5af00d 100644
--- a/container-search/src/main/java/com/yahoo/prelude/querytransform/RecallSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/querytransform/RecallSearcher.java
@@ -3,7 +3,11 @@ package com.yahoo.prelude.querytransform;
import com.yahoo.component.chain.dependencies.After;
import com.yahoo.component.chain.dependencies.Before;
-import com.yahoo.prelude.query.*;
+import com.yahoo.prelude.query.CompositeItem;
+import com.yahoo.prelude.query.Item;
+import com.yahoo.prelude.query.NullItem;
+import com.yahoo.prelude.query.RankItem;
+import com.yahoo.prelude.query.WordItem;
import com.yahoo.prelude.query.parser.AnyParser;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
@@ -14,10 +18,10 @@ import com.yahoo.search.query.parser.Parsable;
import com.yahoo.search.query.parser.ParserEnvironment;
import com.yahoo.search.result.ErrorMessage;
import com.yahoo.search.searchchain.Execution;
-import com.yahoo.search.searchchain.PhaseNames;
+import java.util.ArrayDeque;
+import java.util.Deque;
import java.util.Iterator;
-import java.util.Stack;
import static com.yahoo.prelude.querytransform.NormalizingSearcher.ACCENT_REMOVAL;
import static com.yahoo.prelude.querytransform.StemmingSearcher.STEMMING;
@@ -76,15 +80,14 @@ public class RecallSearcher extends Searcher {
* @return True if a rank item was found.
*/
private static boolean hasRankItem(Item root) {
- Stack<Item> stack = new Stack<>();
+ Deque<Item> stack = new ArrayDeque<>();
stack.push(root);
while (!stack.isEmpty()) {
Item item = stack.pop();
if (item instanceof RankItem) {
return true;
}
- if (item instanceof CompositeItem) {
- CompositeItem lst = (CompositeItem)item;
+ if (item instanceof CompositeItem lst) {
for (Iterator<Item> it = lst.getItemIterator(); it.hasNext();) {
stack.push(it.next());
}
@@ -102,20 +105,18 @@ public class RecallSearcher extends Searcher {
* @return The first node found.
*/
private static WordItem findOrigWordItem(Item root, String value) {
- Stack<Item> stack = new Stack<>();
+ Deque<Item> stack = new ArrayDeque<>();
stack.push(root);
while (!stack.isEmpty()) {
Item item = stack.pop();
if (item.getCreator() == Item.ItemCreator.ORIG &&
- item instanceof WordItem)
+ item instanceof WordItem word)
{
- WordItem word = (WordItem)item;
if (word.getWord().equals(value)) {
return word;
}
}
- if (item instanceof CompositeItem) {
- CompositeItem lst = (CompositeItem)item;
+ if (item instanceof CompositeItem lst) {
for (Iterator<Item> it = lst.getItemIterator(); it.hasNext();) {
stack.push(it.next());
}
@@ -130,15 +131,14 @@ public class RecallSearcher extends Searcher {
* @param root The root of the tree to update.
*/
private static void updateFilterTerms(Item root) {
- Stack<Item> stack = new Stack<>();
+ Deque<Item> stack = new ArrayDeque<>();
stack.push(root);
while (!stack.isEmpty()) {
Item item = stack.pop();
if (item.getCreator() == Item.ItemCreator.FILTER) {
item.setRanked(false);
}
- if (item instanceof CompositeItem) {
- CompositeItem lst = (CompositeItem)item;
+ if (item instanceof CompositeItem lst) {
for (Iterator<Item> it = lst.getItemIterator(); it.hasNext();) {
stack.push(it.next());
}
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/request/MathResolver.java b/container-search/src/main/java/com/yahoo/search/grouping/request/MathResolver.java
index 98dd2ee3c88..fd3651e6787 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/request/MathResolver.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/request/MathResolver.java
@@ -1,9 +1,10 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search.grouping.request;
+import java.util.ArrayDeque;
+import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
-import java.util.Stack;
/**
* This is a helper class for resolving arithmetic operations over {@link GroupingExpression} objects. To resolve an
@@ -25,7 +26,7 @@ public class MathResolver {
private final int pre;
private final String image;
- private Type(int pre, String image) {
+ Type(int pre, String image) {
this.pre = pre;
this.image = image;
}
@@ -57,7 +58,7 @@ public class MathResolver {
if (items.size() == 1) {
return items.remove(0).exp; // optimize common case
}
- Stack<Item> stack = new Stack<>();
+ Deque<Item> stack = new ArrayDeque<>();
stack.push(items.remove(0));
while (!items.isEmpty()) {
Item item = items.remove(0);
@@ -69,30 +70,19 @@ public class MathResolver {
while (stack.size() > 1) {
pop(stack);
}
- return stack.remove(0).exp;
+ return stack.pop().exp;
}
- private void pop(Stack<Item> stack) {
+ private void pop(Deque<Item> stack) {
Item rhs = stack.pop();
Item lhs = stack.peek();
switch (rhs.type) {
- case ADD:
- lhs.exp = new AddFunction(lhs.exp, rhs.exp);
- break;
- case DIV:
- lhs.exp = new DivFunction(lhs.exp, rhs.exp);
- break;
- case MOD:
- lhs.exp = new ModFunction(lhs.exp, rhs.exp);
- break;
- case MUL:
- lhs.exp = new MulFunction(lhs.exp, rhs.exp);
- break;
- case SUB:
- lhs.exp = new SubFunction(lhs.exp, rhs.exp);
- break;
- default:
- throw new UnsupportedOperationException("Operator " + rhs.type + " not supported.");
+ case ADD -> lhs.exp = new AddFunction(lhs.exp, rhs.exp);
+ case DIV -> lhs.exp = new DivFunction(lhs.exp, rhs.exp);
+ case MOD -> lhs.exp = new ModFunction(lhs.exp, rhs.exp);
+ case MUL -> lhs.exp = new MulFunction(lhs.exp, rhs.exp);
+ case SUB -> lhs.exp = new SubFunction(lhs.exp, rhs.exp);
+ default -> throw new UnsupportedOperationException("Operator " + rhs.type + " not supported.");
}
}
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/RequestBuilder.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/RequestBuilder.java
index e5b45373370..958f343fac5 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/RequestBuilder.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/RequestBuilder.java
@@ -18,11 +18,13 @@ import com.yahoo.searchlib.aggregation.HitsAggregationResult;
import com.yahoo.searchlib.expression.ExpressionNode;
import com.yahoo.searchlib.expression.RangeBucketPreDefFunctionNode;
+import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
+import java.util.Objects;
import java.util.OptionalLong;
-import java.util.Stack;
+import java.util.Deque;
import java.util.TimeZone;
/**
@@ -61,7 +63,7 @@ class RequestBuilder {
* @return This, to allow chaining.
*/
public RequestBuilder setRootOperation(GroupingOperation root) {
- root.getClass(); // throws NullPointerException
+ Objects.requireNonNull(root, "Root must be non-null");
this.root = root;
return this;
}
@@ -125,7 +127,7 @@ class RequestBuilder {
Grouping grouping = new Grouping();
grouping.getRoot().setTag(++tag);
grouping.setForceSinglePass(root.getForceSinglePass() || root.containsHint("singlepass"));
- Stack<BuildFrame> stack = new Stack<>();
+ Deque<BuildFrame> stack = new ArrayDeque<>();
stack.push(new BuildFrame(grouping, new BuildState(), root));
while (!stack.isEmpty()) {
BuildFrame frame = stack.pop();
@@ -317,11 +319,10 @@ class RequestBuilder {
result.setTag(++tag);
String label = exp.getLabel();
- if (result instanceof HitsAggregationResult) {
+ if (result instanceof HitsAggregationResult hits) {
if (label != null) {
throw new UnsupportedOperationException("Can not label expression '" + exp + "'.");
}
- HitsAggregationResult hits = (HitsAggregationResult)result;
if (frame.state.max != null) {
transform.putMax(tag, frame.state.max, "hit list");
int offset = transform.getOffset(tag);
diff --git a/container-search/src/test/java/com/yahoo/prelude/querytransform/test/RecallSearcherTestCase.java b/container-search/src/test/java/com/yahoo/prelude/querytransform/test/RecallSearcherTestCase.java
index e2d1555701c..a879f142bcc 100755
--- a/container-search/src/test/java/com/yahoo/prelude/querytransform/test/RecallSearcherTestCase.java
+++ b/container-search/src/test/java/com/yahoo/prelude/querytransform/test/RecallSearcherTestCase.java
@@ -1,13 +1,12 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.prelude.querytransform.test;
+import java.util.ArrayDeque;
import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Deque;
import java.util.Iterator;
import java.util.List;
-import java.util.Stack;
-import com.yahoo.prelude.IndexFacts;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
import com.yahoo.prelude.query.CompositeItem;
@@ -45,13 +44,13 @@ public class RecallSearcherTestCase {
@Test
void testParse() {
List<String> empty = new ArrayList<>();
- assertQueryTree("?query=foo", Arrays.asList("foo"), empty);
- assertQueryTree("?recall=%2bfoo", empty, Arrays.asList("foo"));
- assertQueryTree("?query=foo&filter=bar&recall=%2bbaz", Arrays.asList("foo", "bar"), Arrays.asList("baz"));
- assertQueryTree("?query=foo+bar&filter=baz&recall=%2bcox", Arrays.asList("foo", "bar", "baz"), Arrays.asList("cox"));
- assertQueryTree("?query=foo&filter=bar+baz&recall=%2bcox", Arrays.asList("foo", "bar", "baz"), Arrays.asList("cox"));
- assertQueryTree("?query=foo&filter=bar&recall=-baz+%2bcox", Arrays.asList("foo", "bar"), Arrays.asList("baz", "cox"));
- assertQueryTree("?query=foo%20bar&recall=%2bbaz%20-cox", Arrays.asList("foo", "bar"), Arrays.asList("baz", "cox"));
+ assertQueryTree("?query=foo", List.of("foo"), empty);
+ assertQueryTree("?recall=%2bfoo", empty, List.of("foo"));
+ assertQueryTree("?query=foo&filter=bar&recall=%2bbaz", List.of("foo", "bar"), List.of("baz"));
+ assertQueryTree("?query=foo+bar&filter=baz&recall=%2bcox", List.of("foo", "bar", "baz"), List.of("cox"));
+ assertQueryTree("?query=foo&filter=bar+baz&recall=%2bcox", List.of("foo", "bar", "baz"), List.of("cox"));
+ assertQueryTree("?query=foo&filter=bar&recall=-baz+%2bcox", List.of("foo", "bar"), List.of("baz", "cox"));
+ assertQueryTree("?query=foo%20bar&recall=%2bbaz%20-cox", List.of("foo", "bar"), List.of("baz", "cox"));
}
private static void assertQueryTree(String query, List<String> ranked, List<String> unranked) {
@@ -65,7 +64,7 @@ public class RecallSearcherTestCase {
List<String> myRanked = new ArrayList<>(ranked);
List<String> myUnranked = new ArrayList<>(unranked);
- Stack<Item> stack = new Stack<>();
+ Deque<Item> stack = new ArrayDeque<>();
stack.push(obj.getModel().getQueryTree().getRoot());
while (!stack.isEmpty()) {
Item item = stack.pop();
@@ -85,8 +84,7 @@ public class RecallSearcherTestCase {
myUnranked.remove(idx);
}
}
- if (item instanceof CompositeItem) {
- CompositeItem lst = (CompositeItem)item;
+ if (item instanceof CompositeItem lst) {
for (Iterator<?> it = lst.getItemIterator(); it.hasNext();) {
stack.push((Item)it.next());
}
diff --git a/document/src/main/java/com/yahoo/document/annotation/RecursiveNodeIterator.java b/document/src/main/java/com/yahoo/document/annotation/RecursiveNodeIterator.java
index 775ce41d303..faae78ff8ee 100644
--- a/document/src/main/java/com/yahoo/document/annotation/RecursiveNodeIterator.java
+++ b/document/src/main/java/com/yahoo/document/annotation/RecursiveNodeIterator.java
@@ -1,9 +1,10 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.document.annotation;
+import java.util.ArrayDeque;
+import java.util.Deque;
import java.util.ListIterator;
import java.util.NoSuchElementException;
-import java.util.Stack;
/**
* ListIterator implementation which performs a depth-first traversal of SpanNodes.
@@ -11,11 +12,11 @@ import java.util.Stack;
* @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a>
*/
class RecursiveNodeIterator implements ListIterator<SpanNode> {
- protected Stack<PeekableListIterator<SpanNode>> stack = new Stack<PeekableListIterator<SpanNode>>();
+ protected Deque<PeekableListIterator<SpanNode>> stack = new ArrayDeque<>();
protected ListIterator<SpanNode> iteratorFromLastCallToNext = null;
RecursiveNodeIterator(ListIterator<SpanNode> it) {
- stack.push(new PeekableListIterator<SpanNode>(it));
+ stack.push(new PeekableListIterator<>(it));
}
protected RecursiveNodeIterator() {
@@ -38,7 +39,7 @@ class RecursiveNodeIterator implements ListIterator<SpanNode> {
if (!iterator.traversed) {
//we set the traversed flag on our way down
iterator.traversed = true;
- stack.push(new PeekableListIterator<SpanNode>(node.childIterator()));
+ stack.push(new PeekableListIterator<>(node.childIterator()));
return hasNext();
}
diff --git a/document/src/main/java/com/yahoo/document/select/rule/ArithmeticNode.java b/document/src/main/java/com/yahoo/document/select/rule/ArithmeticNode.java
index b160293440e..76de41fc39e 100644
--- a/document/src/main/java/com/yahoo/document/select/rule/ArithmeticNode.java
+++ b/document/src/main/java/com/yahoo/document/select/rule/ArithmeticNode.java
@@ -8,9 +8,10 @@ import com.yahoo.document.select.Context;
import com.yahoo.document.select.Result;
import com.yahoo.document.select.Visitor;
+import java.util.ArrayDeque;
+import java.util.Deque;
import java.util.List;
import java.util.ArrayList;
-import java.util.Stack;
/**
* @author Simon Thoresen Hult
@@ -47,7 +48,7 @@ public class ArithmeticNode implements ExpressionNode {
@Override
public Object evaluate(Context context) {
StringBuilder ret = null;
- Stack<ValueItem> buf = new Stack<>();
+ Deque<ValueItem> buf = new ArrayDeque<>();
for (int i = 0; i < items.size(); ++i) {
NodeItem item = items.get(i);
Object val = item.node.evaluate(context);
@@ -56,8 +57,7 @@ public class ArithmeticNode implements ExpressionNode {
throw new IllegalArgumentException("Can not perform arithmetic on null value (referencing missing field?)");
}
- if (val instanceof AttributeNode.VariableValueList) {
- AttributeNode.VariableValueList value = (AttributeNode.VariableValueList)val;
+ if (val instanceof AttributeNode.VariableValueList value) {
if (value.size() == 0) {
throw new IllegalArgumentException("Can not perform arithmetic on missing field: "
+ item.node.toString());
@@ -102,27 +102,16 @@ public class ArithmeticNode implements ExpressionNode {
return buf.pop().value;
}
- private void popOffTheTop(Stack<ValueItem> buf) {
+ private void popOffTheTop(Deque<ValueItem> buf) {
ValueItem rhs = buf.pop();
ValueItem lhs = buf.pop();
switch (rhs.operator) {
- case ADD:
- lhs.value = lhs.value.doubleValue() + rhs.value.doubleValue();
- break;
- case SUB:
- lhs.value = lhs.value.doubleValue() - rhs.value.doubleValue();
- break;
- case DIV:
- lhs.value = lhs.value.doubleValue() / rhs.value.doubleValue();
- break;
- case MUL:
- lhs.value = lhs.value.doubleValue() * rhs.value.doubleValue();
- break;
- case MOD:
- lhs.value = lhs.value.longValue() % rhs.value.longValue();
- break;
- default:
- throw new IllegalStateException("Arithmetic operator " + rhs.operator + " not supported.");
+ case ADD -> lhs.value = lhs.value.doubleValue() + rhs.value.doubleValue();
+ case SUB -> lhs.value = lhs.value.doubleValue() - rhs.value.doubleValue();
+ case DIV -> lhs.value = lhs.value.doubleValue() / rhs.value.doubleValue();
+ case MUL -> lhs.value = lhs.value.doubleValue() * rhs.value.doubleValue();
+ case MOD -> lhs.value = lhs.value.longValue() % rhs.value.longValue();
+ default -> throw new IllegalStateException("Arithmetic operator " + rhs.operator + " not supported.");
}
buf.push(lhs);
}
@@ -140,22 +129,15 @@ public class ArithmeticNode implements ExpressionNode {
}
public String operatorToString(int operator) {
- switch (operator) {
- case NOP:
- return null;
- case ADD:
- return "+";
- case SUB:
- return "-";
- case MOD:
- return "%";
- case DIV:
- return "/";
- case MUL:
- return "*";
- default:
- throw new IllegalStateException("Arithmetic operator " + operator + " not supported.");
- }
+ return switch (operator) {
+ case NOP -> null;
+ case ADD -> "+";
+ case SUB -> "-";
+ case MOD -> "%";
+ case DIV -> "/";
+ case MUL -> "*";
+ default -> throw new IllegalStateException("Arithmetic operator " + operator + " not supported.");
+ };
}
private int stringToOperator(String operator) {
@@ -192,8 +174,8 @@ public class ArithmeticNode implements ExpressionNode {
}
public static class NodeItem {
- private int operator;
- private ExpressionNode node;
+ private final int operator;
+ private final ExpressionNode node;
NodeItem(int operator, ExpressionNode node) {
this.operator = operator;
diff --git a/document/src/main/java/com/yahoo/document/select/rule/LogicNode.java b/document/src/main/java/com/yahoo/document/select/rule/LogicNode.java
index 5cfcef2a5e5..f97ebb20c28 100644
--- a/document/src/main/java/com/yahoo/document/select/rule/LogicNode.java
+++ b/document/src/main/java/com/yahoo/document/select/rule/LogicNode.java
@@ -7,9 +7,10 @@ import com.yahoo.document.select.Context;
import com.yahoo.document.select.ResultList;
import com.yahoo.document.select.Visitor;
+import java.util.ArrayDeque;
import java.util.ArrayList;
+import java.util.Deque;
import java.util.List;
-import java.util.Stack;
/**
* This class defines a logical expression of nodes. This implementation uses a stack to evaluate its content as to
@@ -56,7 +57,7 @@ public class LogicNode implements ExpressionNode {
@Override
public BucketSet getBucketSet(BucketIdFactory factory) {
- Stack<BucketItem> buf = new Stack<>();
+ Deque<BucketItem> buf = new ArrayDeque<>();
for (NodeItem item : items) {
if (!buf.isEmpty()) {
while (buf.peek().operator > item.operator) {
@@ -76,11 +77,11 @@ public class LogicNode implements ExpressionNode {
*
* @param buf The stack of bucket items.
*/
- private void combineBuckets(Stack<BucketItem> buf) {
+ private void combineBuckets(Deque<BucketItem> buf) {
BucketItem rhs = buf.pop();
BucketItem lhs = buf.pop();
switch (rhs.operator) {
- case AND:
+ case AND -> {
if (lhs.buckets == null) {
lhs.buckets = rhs.buckets;
} else if (rhs.buckets == null) {
@@ -88,8 +89,8 @@ public class LogicNode implements ExpressionNode {
} else {
lhs.buckets = lhs.buckets.intersection(rhs.buckets);
}
- break;
- case OR:
+ }
+ case OR -> {
if (lhs.buckets == null) {
// empty
} else if (rhs.buckets == null) {
@@ -97,16 +98,15 @@ public class LogicNode implements ExpressionNode {
} else {
lhs.buckets = lhs.buckets.union(rhs.buckets);
}
- break;
- default:
- throw new IllegalStateException("Arithmetic operator " + rhs.operator + " not supported.");
+ }
+ default -> throw new IllegalStateException("Arithmetic operator " + rhs.operator + " not supported.");
}
buf.push(lhs);
}
@Override
public Object evaluate(Context context) {
- Stack<ValueItem> buf = new Stack<>();
+ Deque<ValueItem> buf = new ArrayDeque<>();
for (NodeItem item : items) {
if ( buf.size() > 1) {
while ((buf.peek().getOperator() >= item.operator)) {
@@ -126,7 +126,7 @@ public class LogicNode implements ExpressionNode {
*
* @param buf The stack of values.
*/
- private void combineValues(Stack<ValueItem> buf) {
+ private void combineValues(Deque<ValueItem> buf) {
ValueItem rhs = buf.pop();
ValueItem lhs = buf.pop();
buf.push(new LazyCombinedItem(lhs, rhs));
@@ -156,16 +156,12 @@ public class LogicNode implements ExpressionNode {
* @return The string representation.
*/
private String operatorToString(int operator) {
- switch (operator) {
- case NOP:
- return null;
- case OR:
- return "or";
- case AND:
- return "and";
- default:
- throw new IllegalStateException("Logical operator " + operator + " not supported.");
- }
+ return switch (operator) {
+ case NOP -> null;
+ case OR -> "or";
+ case AND -> "and";
+ default -> throw new IllegalStateException("Logical operator " + operator + " not supported.");
+ };
}
/**
@@ -231,14 +227,10 @@ public class LogicNode implements ExpressionNode {
public ResultList getResult() {
if (lazyResult == null) {
switch (rhs.getOperator()) {
- case AND:
- lazyResult = lhs.getResult().combineAND(rhs);
- break;
- case OR:
- lazyResult = lhs.getResult().combineOR(rhs);
- break;
- default:
- throw new IllegalStateException("Logical operator " + rhs.getOperator() + " not supported.");
+ case AND -> lazyResult = lhs.getResult().combineAND(rhs);
+ case OR -> lazyResult = lhs.getResult().combineOR(rhs);
+ default ->
+ throw new IllegalStateException("Logical operator " + rhs.getOperator() + " not supported.");
}
}
return lazyResult;
@@ -249,7 +241,7 @@ public class LogicNode implements ExpressionNode {
* Private class to store bucket sets in a stack.
*/
private static final class BucketItem {
- private int operator;
+ final private int operator;
private BucketSet buckets;
BucketItem(int operator, BucketSet buckets) {
@@ -262,8 +254,8 @@ public class LogicNode implements ExpressionNode {
* Private class to store expression nodes in a stack.
*/
public static final class NodeItem {
- private int operator;
- private ExpressionNode node;
+ final private int operator;
+ final private ExpressionNode node;
NodeItem(int operator, ExpressionNode node) {
this.operator = operator;
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/MathResolver.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/MathResolver.java
index 47d4e789602..ded665b2d77 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/MathResolver.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/MathResolver.java
@@ -1,10 +1,11 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.indexinglanguage.expressions;
+import java.util.ArrayDeque;
+import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
-import java.util.Stack;
/**
* @author Simon Thoresen Hult
@@ -20,7 +21,7 @@ public class MathResolver {
}
public Expression resolve() {
- Stack<Item> stack = new Stack<>();
+ Deque<Item> stack = new ArrayDeque<>();
stack.push(items.remove(0));
while (!items.isEmpty()) {
Item item = items.remove(0);
@@ -32,10 +33,10 @@ public class MathResolver {
while (stack.size() > 1) {
pop(stack);
}
- return stack.remove(0).exp;
+ return stack.pop().exp;
}
- private void pop(Stack<Item> stack) {
+ private void pop(Deque<Item> stack) {
Item rhs = stack.pop();
Item lhs = stack.peek();
lhs.exp = new ArithmeticExpression(lhs.exp, rhs.op, rhs.exp);
diff --git a/messagebus/src/main/java/com/yahoo/messagebus/routing/RoutingNode.java b/messagebus/src/main/java/com/yahoo/messagebus/routing/RoutingNode.java
index 1f63744c205..ac8fd637646 100755
--- a/messagebus/src/main/java/com/yahoo/messagebus/routing/RoutingNode.java
+++ b/messagebus/src/main/java/com/yahoo/messagebus/routing/RoutingNode.java
@@ -21,7 +21,6 @@ import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;
-import java.util.Stack;
import java.util.concurrent.atomic.AtomicInteger;
/**
@@ -130,7 +129,7 @@ public class RoutingNode implements ReplyHandler {
* @param msg The error message to assign.
*/
private void notifyAbort(String msg) {
- Stack<RoutingNode> stack = new Stack<>();
+ Deque<RoutingNode> stack = new ArrayDeque<>();
stack.push(this);
while (!stack.isEmpty()) {
RoutingNode node = stack.pop();
@@ -430,8 +429,7 @@ public class RoutingNode implements ReplyHandler {
private boolean lookupRoute() {
RoutingTable table = mbus.getRoutingTable(msg.getProtocol());
Hop hop = route.getHop(0);
- if (hop.getDirective(0) instanceof RouteDirective) {
- RouteDirective dir = (RouteDirective)hop.getDirective(0);
+ if (hop.getDirective(0) instanceof RouteDirective dir) {
if (table == null || !table.hasRoute(dir.getName())) {
setError(ErrorCode.ILLEGAL_ROUTE, "Route '" + dir.getName() + "' does not exist.");
return false;
diff --git a/vdslib/src/test/java/com/yahoo/vdslib/distribution/DistributionTestCase.java b/vdslib/src/test/java/com/yahoo/vdslib/distribution/DistributionTestCase.java
index bd1511acdbd..415c4ffe8f0 100644
--- a/vdslib/src/test/java/com/yahoo/vdslib/distribution/DistributionTestCase.java
+++ b/vdslib/src/test/java/com/yahoo/vdslib/distribution/DistributionTestCase.java
@@ -67,7 +67,7 @@ public class DistributionTestCase {
public void testSimple() {
test = new DistributionTestFactory("simple");
List<BucketId> buckets = getTestBuckets();
- Integer nodes[] = { 6, 3, 4, 8, 8, 8, 8, 8, 8, 3 };
+ Integer [] nodes = { 6, 3, 4, 8, 8, 8, 8, 8, 8, 3 };
for (int i=0; i<buckets.size(); ++i) {
BucketId bucket = buckets.get(i);
DistributionTestFactory.Test t = test.recordResult(bucket).assertNodeCount(1);
@@ -137,86 +137,89 @@ public class DistributionTestCase {
public void testWriteDistribution() throws IOException, ParseException, Distribution.TooFewBucketBitsInUseException, Distribution.NoDistributorsAvailableException {
String clusterState = "distributor:9";
String distributionConfig =
- "redundancy 3\n" +
- "group[4]\n" +
- "group[0].index \"invalid\"\n" +
- "group[0].name \"invalid\"\n" +
- "group[0].partitions 1|2|*\n" +
- "group[0].nodes[0]\n" +
- "group[1].index 1\n" +
- "group[1].capacity 2.0\n" +
- "group[1].name group1\n" +
- "group[1].partitions *\n" +
- "group[1].nodes[3]\n" +
- "group[1].nodes[0].index 0\n" +
- "group[1].nodes[1].index 1\n" +
- "group[1].nodes[2].index 2\n" +
- "group[2].index 2\n" +
- "group[2].capacity 3.0\n" +
- "group[2].name group2\n" +
- "group[2].partitions *\n" +
- "group[2].nodes[3]\n" +
- "group[2].nodes[0].index 3\n" +
- "group[2].nodes[1].index 4\n" +
- "group[2].nodes[2].index 5\n" +
- "group[3].index 3\n" +
- "group[3].capacity 5.0\n" +
- "group[3].name group3\n" +
- "group[3].partitions *\n" +
- "group[3].nodes[3]\n" +
- "group[3].nodes[0].index 6\n" +
- "group[3].nodes[1].index 7\n" +
- "group[3].nodes[2].index 8\n";
+ """
+ redundancy 3
+ group[4]
+ group[0].index "invalid"
+ group[0].name "invalid"
+ group[0].partitions 1|2|*
+ group[0].nodes[0]
+ group[1].index 1
+ group[1].capacity 2.0
+ group[1].name group1
+ group[1].partitions *
+ group[1].nodes[3]
+ group[1].nodes[0].index 0
+ group[1].nodes[1].index 1
+ group[1].nodes[2].index 2
+ group[2].index 2
+ group[2].capacity 3.0
+ group[2].name group2
+ group[2].partitions *
+ group[2].nodes[3]
+ group[2].nodes[0].index 3
+ group[2].nodes[1].index 4
+ group[2].nodes[2].index 5
+ group[3].index 3
+ group[3].capacity 5.0
+ group[3].name group3
+ group[3].partitions *
+ group[3].nodes[3]
+ group[3].nodes[0].index 6
+ group[3].nodes[1].index 7
+ group[3].nodes[2].index 8
+ """;
writeDistributionTest("depth2", clusterState, distributionConfig);
clusterState = "distributor:20 storage:20";
String complexDistributionConfig =
- "redundancy 5\n" +
- "group[7]\n" +
- "group[0].partitions \"*|*\"\n" +
- "group[0].index \"invalid\"\n" +
- "group[0].name \"invalid\"\n" +
- "group[0].nodes[0]\n" +
- "group[1].partitions \"1|*\"\n" +
- "group[1].index \"0\"\n" +
- "group[1].name \"switch0\"\n" +
- "group[1].nodes[0]\n" +
- "group[2].partitions \"\"\n" +
- "group[2].index \"0.0\"\n" +
- "group[2].name \"rack0\"\n" +
- "group[2].nodes[4]\n" +
- "group[2].nodes[0].index 0\n" +
- "group[2].nodes[1].index 1\n" +
- "group[2].nodes[2].index 2\n" +
- "group[2].nodes[3].index 3\n" +
- "group[3].partitions \"\"\n" +
- "group[3].index \"0.1\"\n" +
- "group[3].name \"rack1\"\n" +
- "group[3].nodes[4]\n" +
- "group[3].nodes[0].index 8\n" +
- "group[3].nodes[1].index 9\n" +
- "group[3].nodes[2].index 14\n" +
- "group[3].nodes[3].index 15\n" +
- "group[4].partitions \"*\"\n" +
- "group[4].index \"1\"\n" +
- "group[4].name \"switch1\"\n" +
- "group[4].nodes[0]\n" +
- "group[5].partitions \"\"\n" +
- "group[5].index \"1.0\"\n" +
- "group[5].name \"rack0\"\n" +
- "group[5].nodes[4]\n" +
- "group[5].nodes[0].index 4\n" +
- "group[5].nodes[1].index 5\n" +
- "group[5].nodes[2].index 6\n" +
- "group[5].nodes[3].index 17\n" +
- "group[6].partitions \"\"\n" +
- "group[6].index \"1.1\"\n" +
- "group[6].name \"rack1\"\n" +
- "group[6].nodes[4]\n" +
- "group[6].nodes[0].index 10\n" +
- "group[6].nodes[1].index 12\n" +
- "group[6].nodes[2].index 13\n" +
- "group[6].nodes[3].index 7";
+ """
+ redundancy 5
+ group[7]
+ group[0].partitions "*|*"
+ group[0].index "invalid"
+ group[0].name "invalid"
+ group[0].nodes[0]
+ group[1].partitions "1|*"
+ group[1].index "0"
+ group[1].name "switch0"
+ group[1].nodes[0]
+ group[2].partitions ""
+ group[2].index "0.0"
+ group[2].name "rack0"
+ group[2].nodes[4]
+ group[2].nodes[0].index 0
+ group[2].nodes[1].index 1
+ group[2].nodes[2].index 2
+ group[2].nodes[3].index 3
+ group[3].partitions ""
+ group[3].index "0.1"
+ group[3].name "rack1"
+ group[3].nodes[4]
+ group[3].nodes[0].index 8
+ group[3].nodes[1].index 9
+ group[3].nodes[2].index 14
+ group[3].nodes[3].index 15
+ group[4].partitions "*"
+ group[4].index "1"
+ group[4].name "switch1"
+ group[4].nodes[0]
+ group[5].partitions ""
+ group[5].index "1.0"
+ group[5].name "rack0"
+ group[5].nodes[4]
+ group[5].nodes[0].index 4
+ group[5].nodes[1].index 5
+ group[5].nodes[2].index 6
+ group[5].nodes[3].index 17
+ group[6].partitions ""
+ group[6].index "1.1"
+ group[6].name "rack1"
+ group[6].nodes[4]
+ group[6].nodes[0].index 10
+ group[6].nodes[1].index 12
+ group[6].nodes[2].index 13
+ group[6].nodes[3].index 7""";
writeDistributionTest("depth3", clusterState, complexDistributionConfig);
clusterState = "distributor:20 storage:20 .3.c:3 .7.c:2.5 .12.c:1.5";
@@ -269,7 +272,7 @@ public class DistributionTestCase {
buckets.add(new BucketId(distbits, i));
}
for (BucketId bucket : buckets) {
- DistributionTestFactory.Test t = test.recordResult(bucket).assertNodeCount(1);
+ test.recordResult(bucket).assertNodeCount(1);
}
test.recordTestResults();
test = null;
@@ -347,7 +350,7 @@ public class DistributionTestCase {
.setDistribution(buildHierarchicalConfig(6, 3, 1, "1|2|*", 3).distributor_auto_ownership_transfer_on_whole_group_down(false))
.setNodeType(NodeType.DISTRIBUTOR)
.setClusterState(new ClusterState("distributor:2 storage:9"));
- int counts[] = new int[10];
+ int [] counts = new int[10];
int noneExisting = 0;
for (BucketId bucket : getTestBuckets()) {
DistributionTestFactory.Test t = test.recordResult(bucket);
@@ -393,7 +396,7 @@ public class DistributionTestCase {
test = new DistributionTestFactory("group-capacity")
.setNodeCount(getNodeCount(1, 3, 3)).setDistribution(config);
- int counts[] = new int[9];
+ int [] counts = new int[9];
for (int i=0; i<900; ++i) {
BucketId bucket = new BucketId(16, i);
++counts[ test.recordResult(bucket).assertNodeCount(1).getNodes().get(0) ];