docs: @Override
    public V replace(K key, V value) {
      replaceObserver.begin();
      try {
        statusTransitioner.checkAvailable();
        checkNonNull(key, value);
  
        try {
          V result = doReplace(key, value);
          if(result == null) {
            replaceObserver.end(ReplaceOutcome.MISS_NOT_PRESENT);
          } else {
            replaceObserver.end(ReplaceOutcome.HIT);
          }
          return result;
        } catch (StoreAccessException e) {
          V result = resilienceStrategy.replaceFailure(key, value, e);
          replaceObserver.end(ReplaceOutcome.FAILURE);
          return result;
        }
      } catch (Throwable e) {
        replaceObserver.end(ReplaceOutcome.FAILURE);
        throw e;
      }
    }