private boolean eventuallyGetMaxKeyInDB(final FDate key, final boolean force) {
   // not updating highest allowed key, since this already happened during key adjustment
   final FDate newMaxKeyInDB = getAdjustKeyProvider().getHighestAllowedKey();
   if (newMaxKeyInDB != null) {
     if (newMaxKeyInDB.isAfter(maxKeyInDB)) {
       maxKeyInDB = newMaxKeyInDB;
       return true;
     } else {
       return false;
     }
   }
   // fallback to normal procedure if curHighWaterMark is not provided by provider
   if (maxKeyInDB == null || force) {
     final V maxValue = readNewestValueFromDB(maxKey());
     if (maxValue != null) {
       final FDate maxValueKey = extractKey(key, maxValue);
       if (maxKeyInDB == null || maxValueKey.compareTo(maxKeyInDB) <= -1) {
         maxKeyInDB = maxValueKey;
         getValuesMap().put(maxValueKey, maxValue);
         return true;
       }
     }
   }
   return false;
 }
  private boolean isPotentiallyAlreadyEvicted(final FDate key, final V value) {
    final boolean isEvictedBeforeCurrentFurtherValues =
        (value == null || extractKey(key, value).isAfter(key))
            && (key.isAfter(minKeyInDB) || key.isAfter(minKeyInDBFromLoadFurtherValues));
    if (isEvictedBeforeCurrentFurtherValues) {
      return true;
    }
    final boolean mightBeEvictedAfterFurtherValues = value != null && furtherValues.isEmpty();
    if (mightBeEvictedAfterFurtherValues) {
      final FDate valueKey = extractKey(key, value);
      final boolean isEvictedAfterCurrentFurtherValues =
          valueKey.isBefore(key) && valueKey.isBeforeOrEqualTo(maxKeyInDB);
      if (isEvictedAfterCurrentFurtherValues) {
        return true;
      }
    }

    return false;
  }