Looks like the advance behavior is synchronous,   it will always be     ```  mAdvanceFuture = new CompletableFuture<>();  while loop to applyToMaster() -> mAdvanceFuture.complete(null);  return advanceFuture  ```  Why do we need to use a completableFuture?