in src/main/java/org/apache/accumulo/testing/gcs/Generator.java [196:261]
private Queue<Mutator> createGroupWork() {
long groupId = nextGroupId++;
long items[] = new long[rand.nextInt(10) + 1];
for (int i = 0; i < items.length; i++) {
items[i] = nextItemId++;
}
ArrayDeque<Mutator> work = new ArrayDeque<>();
work.add(p -> {
p.save(new GroupRef(clientId, groupId));
p.flush();
});
work.add(p -> {
for (long itemId : items) {
p.save(new Item(clientId, groupId, itemId), ItemState.REFERENCED);
}
p.flush();
});
List<ItemRef> refsToAdd = new ArrayList<>();
List<ItemRef> refsToDel = new ArrayList<>();
for (long itemId : items) {
for (int i = 0; i < rand.nextInt(3) + 1; i++) {
int bucket = rand.nextInt(maxBuckets);
refsToAdd.add(new ItemRef(bucket, clientId, groupId, itemId));
}
}
Collections.shuffle(refsToAdd, rand);
boolean deletedGroupRef = false;
while (!refsToAdd.isEmpty() || !refsToDel.isEmpty() || !deletedGroupRef) {
if (!refsToAdd.isEmpty() && rand.nextBoolean()) {
ItemRef ref = refsToAdd.remove(refsToAdd.size() - 1);
refsToDel.add(ref);
work.add(p -> {
p.save(ref);
p.flush();
});
}
if (refsToAdd.isEmpty() && !deletedGroupRef && rand.nextBoolean()) {
work.add(p -> {
p.delete(new GroupRef(clientId, groupId));
p.flush();
});
deletedGroupRef = true;
}
if (!refsToDel.isEmpty() && rand.nextBoolean()) {
ItemRef ref = refsToDel.remove(refsToDel.size() - 1);
work.add(p -> {
p.save(new Candidate(clientId, groupId, ref.itemId));
p.delete(ref);
p.flush();
});
}
}
return work;
}