code: private Future<?> sendKeys(final MapStoreContext mapStoreContext, final boolean replaceExistingValues) {
          if (keyLoadFinished.isDone()) {
              keyLoadFinished = new LoadFinishedFuture();
  
              Future<Boolean> sent = execService.submit(MAP_LOAD_ALL_KEYS_EXECUTOR, () -> {
                  sendKeysInBatches(mapStoreContext, replaceExistingValues);
                  return false;
              });
  
              execService.asCompletableFuture(sent).andThen(keyLoadFinished);
          }
  
          return keyLoadFinished;
      }
docs: Triggers key loading if there is no ongoing key loading task, otherwise
  does nothing. The actual loading is done on the
  {@link ExecutionService#MAP_LOAD_ALL_KEYS_EXECUTOR} executor.
  The loaded keys will be dispatched to partition owners for value loading.
  
  @param mapStoreContext       the map store context for this map
  @param replaceExistingValues if the existing entries for the loaded keys should be replaced
  @return a future representing pending completion of the key loading task
  @see MapLoader#loadAllKeys()
  @see #sendKeysInBatches(MapStoreContext, boolean)