docs: private long calculateExpiryTime(K key, PutOperation<K, V> existing, Operation<K, V> operation, Result<K, V> newValue) {
      if (operation.isExpiryAvailable()) {
        return operation.expirationTime();
      } else {
        try {
          Duration duration;
          if (existing == null) {
            duration = requireNonNull(expiry.getExpiryForCreation(key, newValue.getValue()));
          } else {
            duration = expiry.getExpiryForUpdate(key, existing::getValue, newValue.getValue());
            if (duration == null) {
              return existing.expirationTime();
            }
          }
          if (duration.isNegative()) {
            duration = Duration.ZERO;
          } else if (isExpiryDurationInfinite(duration)) {
            return Long.MAX_VALUE;
          }
          return ExpiryUtils.getExpirationMillis(operation.timeStamp(), duration);
        } catch (Exception ex) {
          LOG.error("Expiry computation caused an exception - Expiry duration will be 0 ", ex);
          return Long.MIN_VALUE;
        }
      }
    }