private boolean checkExpectedOldValuePrecondition() {
    // replace is propagated to server, so no need to check
    // satisfiesOldValue on client
    final EntryEventImpl event = getEvent();
    if (getExpectedOldValue() != null && !isReplaceOnClient()) {
      assert event.getOperation().guaranteesOldValue();
      // We already called setOldValueInEvent so the event will have the old value.
      @Unretained
      Object v = event.getRawOldValue();
      // Note that v will be null instead of INVALID because setOldValue`
      // converts INVALID to null.
      // But checkExpectedOldValue handle this and says INVALID equals null.
      return AbstractRegionEntry.checkExpectedOldValue(getExpectedOldValue(), v, event.getRegion());
    }
    return true;
  }
@return false if preconditions indicate that
        the put should not be done.
geode-core/src/main/java/org/apache/geode/internal/cache/map/RegionMapPut.java