@Test
  public void concurrentUndeleteTest() throws Exception {
    assumeTrue(isLogSegmented);
    int extraBlobCount = 2000 / UNDELETE_RECORD_SIZE + 1;
    List<MockId> ids = put(extraBlobCount, PUT_RECORD_SIZE, Utils.Infinite_Time);
    List<Undeleter> undeleters = new ArrayList<>();
    for (MockId id : ids) {
      delete(id);
      undeleters.add(new Undeleter(id));
    }
    ExecutorService executorService = Executors.newFixedThreadPool(undeleters.size());
    try {
      List<Future<CallableResult>> futures = executorService.invokeAll(undeleters);
      verifyUndeleteFutures(undeleters, futures);
    } finally {
      executorService.shutdownNow();
    }
  }
Tests the case where there are many concurrent undelete.
ambry-store/src/test/java/com/github/ambry/store/BlobStoreTest.java