@Test
  public void concurrentAllTest() throws Exception {
    int putBlobCount = 1500 / PUT_RECORD_SIZE + 1;
    List<Putter> putters = new ArrayList<>(putBlobCount);
    for (int i = 0; i < putBlobCount; i++) {
      putters.add(new Putter());
    }
    List<Callable<CallableResult>> callables = new ArrayList<Callable<CallableResult>>(putters);

    List<Getter> getters = new ArrayList<>(liveKeys.size());
    for (MockId id : liveKeys) {
      getters.add(new Getter(id, EnumSet.allOf(StoreGetOptions.class)));
    }
    callables.addAll(getters);

    int deleteBlobCount = 1000 / PUT_RECORD_SIZE;
    List<MockId> idsToDelete = put(deleteBlobCount, PUT_RECORD_SIZE, Utils.Infinite_Time);
    List<Deleter> deleters = new ArrayList<>(deleteBlobCount);
    for (MockId id : idsToDelete) {
      deleters.add(new Deleter(id, false));
    }
    callables.addAll(deleters);

    int updateTtlBlobCount = 1000 / PUT_RECORD_SIZE;
    List<MockId> idsToUpdateTtl = put(updateTtlBlobCount, PUT_RECORD_SIZE, expiresAtMs);
    List<TtlUpdater> ttlUpdaters = new ArrayList<>(updateTtlBlobCount);
    for (MockId id : idsToUpdateTtl) {
      ttlUpdaters.add(new TtlUpdater(id));
    }
    callables.addAll(ttlUpdaters);

    List<Undeleter> undeleters = new ArrayList<>();
    if (isLogSegmented) {
      int undeleteBlobCount = 1000 / UNDELETE_RECORD_SIZE;
      List<MockId> ids = put(undeleteBlobCount, PUT_RECORD_SIZE, Utils.Infinite_Time);
      for (MockId id : ids) {
        delete(id);
        undeleters.add(new Undeleter(id));
      }
      callables.addAll(undeleters);
    }

    ExecutorService executorService = Executors.newFixedThreadPool(callables.size());
    List<Future<CallableResult>> futures = executorService.invokeAll(callables);
    verifyPutFutures(putters, futures.subList(0, putters.size()));
    verifyGetFutures(getters, futures.subList(putters.size(), putters.size() + getters.size()));
    verifyDeleteFutures(deleters,
        futures.subList(putters.size() + getters.size(), putters.size() + getters.size() + deleters.size()));
    verifyTtlUpdateFutures(ttlUpdaters,
        futures.subList(putters.size() + getters.size() + deleters.size(), callables.size()));
    if (isLogSegmented) {
      verifyUndeleteFutures(undeleters,
          futures.subList(putters.size() + getters.size() + deleters.size() + ttlUpdaters.size(), callables.size()));
    }
  }
Tests the case where there are concurrent PUTs, GETs and DELETEs.
@throws Exception
ambry-store/src/test/java/com/github/ambry/store/BlobStoreTest.java