Skip to content

Commit 9d4eca0

Browse files
authored
[Test] More robust unique allocationId randomization (#123941)
Persistent tasks expect unique allocationId for each individual task. This PR ensures that is the case when randomize allocationId in tests.
1 parent 1d04b4f commit 9d4eca0

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

server/src/test/java/org/elasticsearch/cluster/metadata/MetadataPersistentTasksTests.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@
3636

3737
import java.io.IOException;
3838
import java.util.HashMap;
39+
import java.util.HashSet;
3940
import java.util.List;
4041
import java.util.Map;
42+
import java.util.Set;
4143
import java.util.concurrent.Executor;
4244
import java.util.function.BiFunction;
4345
import java.util.stream.IntStream;
@@ -47,11 +49,13 @@
4749

4850
public class MetadataPersistentTasksTests extends ESTestCase {
4951

52+
private Set<Long> assignedAllocationIds;
5053
private NamedWriteableRegistry namedWriteableRegistry;
5154
private NamedWriteableRegistry namedWriteableRegistryBwc;
5255

5356
@Before
5457
public void initializeRegistries() {
58+
assignedAllocationIds = new HashSet<>();
5559
new PersistentTasksExecutorRegistry(
5660
List.of(
5761
new TestClusterPersistentTasksExecutor(TestClusterPersistentTasksParams.NAME, null),
@@ -191,12 +195,18 @@ public void testPersistentTasksDiffSerializationBwc() throws IOException {
191195
);
192196
}
193197

194-
private static <T extends PersistentTasks> T mutatePersistentTasks(
198+
private long randomUniqueAllocationIdBetween(long min, long max) {
199+
final long allocationId = randomValueOtherThanMany(id -> assignedAllocationIds.contains(id), () -> randomLongBetween(min, max));
200+
assignedAllocationIds.add(allocationId);
201+
return allocationId;
202+
}
203+
204+
private <T extends PersistentTasks> T mutatePersistentTasks(
195205
PersistentTasks persistentTasks,
196206
BiFunction<String, Long, PersistentTask<?>> oneTaskFunc,
197207
BiFunction<Long, Map<String, PersistentTask<?>>, T> tasksFunc
198208
) {
199-
final long updatedAllocationId = persistentTasks.getLastAllocationId() + randomLongBetween(100, 1000);
209+
final long updatedLastAllocationId = persistentTasks.getLastAllocationId() + randomLongBetween(100, 1000);
200210
final Map<String, PersistentTask<?>> tasks = persistentTasks.taskMap();
201211

202212
final var updatedTasks = new HashMap<>(tasks);
@@ -206,7 +216,10 @@ private static <T extends PersistentTasks> T mutatePersistentTasks(
206216
final String taskId = randomTaskId();
207217
updatedTasks.put(
208218
taskId,
209-
oneTaskFunc.apply(taskId, randomLongBetween(persistentTasks.getLastAllocationId() + i + 1, updatedAllocationId))
219+
oneTaskFunc.apply(
220+
taskId,
221+
randomUniqueAllocationIdBetween(persistentTasks.getLastAllocationId() + i + 1, updatedLastAllocationId)
222+
)
210223
);
211224
});
212225
} else {
@@ -215,14 +228,14 @@ private static <T extends PersistentTasks> T mutatePersistentTasks(
215228
updatedTasks.remove(randomFrom(updatedTasks.keySet()));
216229
}
217230
}
218-
return tasksFunc.apply(updatedAllocationId, updatedTasks);
231+
return tasksFunc.apply(updatedLastAllocationId, updatedTasks);
219232
}
220233

221234
private static String randomTaskId() {
222235
return randomAlphaOfLength(15);
223236
}
224237

225-
private static Metadata randomMetadataWithPersistentTasks() {
238+
private Metadata randomMetadataWithPersistentTasks() {
226239
final long lastAllocationIdCluster = randomLongBetween(0, Long.MAX_VALUE / 2);
227240
final var clusterPersistentTasksCustomMetadata = new ClusterPersistentTasksCustomMetadata(
228241
lastAllocationIdCluster,
@@ -268,26 +281,26 @@ private static PersistentTask<?> oneProjectPersistentTask(String taskId, long al
268281
);
269282
}
270283

271-
public static Map<String, PersistentTask<?>> randomClusterPersistentTasks(long allocationId) {
284+
private Map<String, PersistentTask<?>> randomClusterPersistentTasks(long allocationId) {
272285
return randomMap(0, 5, () -> {
273286
final String taskId = randomTaskId();
274-
return new Tuple<>(taskId, oneClusterPersistentTask(taskId, randomLongBetween(0, allocationId)));
287+
return new Tuple<>(taskId, oneClusterPersistentTask(taskId, randomUniqueAllocationIdBetween(0, allocationId)));
275288
});
276289
}
277290

278-
public static Map<String, PersistentTask<?>> randomProjectPersistentTasks(long allocationId) {
291+
private Map<String, PersistentTask<?>> randomProjectPersistentTasks(long allocationId) {
279292
return randomMap(0, 5, () -> {
280293
final String taskId = randomTaskId();
281-
return new Tuple<>(taskId, oneProjectPersistentTask(taskId, randomLongBetween(0, allocationId)));
294+
return new Tuple<>(taskId, oneProjectPersistentTask(taskId, randomUniqueAllocationIdBetween(0, allocationId)));
282295
});
283296
}
284297

285-
public static Tuple<Metadata, Metadata> randomMetadataAndUpdate() {
298+
private Tuple<Metadata, Metadata> randomMetadataAndUpdate() {
286299
final Metadata before = randomMetadataWithPersistentTasks();
287300
final Metadata after = Metadata.builder(before)
288301
.putCustom(
289302
ClusterPersistentTasksCustomMetadata.TYPE,
290-
MetadataPersistentTasksTests.<ClusterPersistentTasksCustomMetadata>mutatePersistentTasks(
303+
this.<ClusterPersistentTasksCustomMetadata>mutatePersistentTasks(
291304
ClusterPersistentTasksCustomMetadata.get(before),
292305
MetadataPersistentTasksTests::oneClusterPersistentTask,
293306
ClusterPersistentTasksCustomMetadata::new

0 commit comments

Comments
 (0)