docs: private void doPushState() throws PushStateException {
        if (pushStateFuture == null || pushStateFuture.isDone()) {
           Callable<?> task = createPushStateTask();
           pushStateFuture = executor.submit(task);
           try {
              waitForTaskToFinish(pushStateFuture, singletonConfiguration.pushStateTimeout(), TimeUnit.MILLISECONDS);
           } catch (Exception e) {
              throw new PushStateException("unable to complete in memory state push to cache loader", e);
           }
        } else {
           /* at the most, we wait for push state timeout value. if it push task finishes earlier, this call
  * will stop when the push task finishes, otherwise a timeout exception will be reported */
           awaitForPushToFinish(pushStateFuture, singletonConfiguration.pushStateTimeout(), TimeUnit.MILLISECONDS);
        }
     }