summaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2020-05-15 17:03:37 +0200
committerMartin Polden <mpolden@mpolden.no>2020-05-18 09:38:46 +0200
commit129aba3a591be60a5194aae79e3f6c1765efc222 (patch)
tree2d9a7ac1794aee2e977a7d337214ce74ce046ee1 /vespajlib
parentca294b0a05520dff341016d2fc75056ac75b0d8e (diff)
Shuffle upgrades
* Avoids instances always upgrading in the same order * Prevents clumping together upgrades of instances under the same tenant
Diffstat (limited to 'vespajlib')
-rw-r--r--vespajlib/src/main/java/com/yahoo/collections/AbstractFilteringList.java10
1 files changed, 10 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/collections/AbstractFilteringList.java b/vespajlib/src/main/java/com/yahoo/collections/AbstractFilteringList.java
index 176e5044bc2..de1040852f5 100644
--- a/vespajlib/src/main/java/com/yahoo/collections/AbstractFilteringList.java
+++ b/vespajlib/src/main/java/com/yahoo/collections/AbstractFilteringList.java
@@ -1,12 +1,15 @@
// Copyright 2020 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.collections;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;
+import java.util.Random;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Predicate;
@@ -88,4 +91,11 @@ public abstract class AbstractFilteringList<Type, ListType extends AbstractFilte
return items.iterator();
}
+ /** Returns the items in this shuffled using random as source of randomness */
+ public final ListType shuffle(Random random) {
+ ArrayList<Type> shuffled = new ArrayList<>(items);
+ Collections.shuffle(shuffled, random);
+ return constructor.apply(shuffled, false);
+ }
+
}