private Queue createGroupWork()

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;
  }