docs: @Override
    public void put(K key, V value) {
      putObserver.begin();
      try {
        statusTransitioner.checkAvailable();
        checkNonNull(key, value);
  
        try {
          Store.PutStatus status = doPut(key, value);
          switch (status) {
            case PUT:
              putObserver.end(PutOutcome.PUT);
              break;
            case NOOP:
              putObserver.end(PutOutcome.NOOP);
              break;
            default:
              throw new AssertionError("Invalid Status.");
          }
        } catch (StoreAccessException e) {
          resilienceStrategy.putFailure(key, value, e);
          putObserver.end(PutOutcome.FAILURE);
        }
      } catch (Throwable e) {
        putObserver.end(PutOutcome.FAILURE);
        throw e;
      }
    }