public static Object readSerializedValue(byte[] valueBytes, KnownVersion version,
        ByteArrayDataInput in, boolean forceDeserialize, InternalCache cache) {
      if (forceDeserialize) {
        // deserialize checking for product version change
        return EntryEventImpl.deserialize(valueBytes, version, in);
      } else {
        // TODO: upgrades: is there a case where Geode values are internal
        // ones that need to be upgraded transparently; probably messages
        // being persisted (gateway events?)
        return CachedDeserializableFactory.create(valueBytes, cache);
      }
    }
Caller must have "entry" and "did" synced and "dr" readLocked.

@return the unretained result must be used by the caller before it releases the sync on
        "entry".
geode-core/src/main/java/org/apache/geode/internal/cache/entries/DiskEntry.java