@Override
    public void toData(DataOutput out,
        SerializationContext context) throws IOException {
      super.toData(out, context);
      byte flags = 0;
      if (result) {
        flags |= FLAG_RESULT;
      }
      if (versionTag != null) {
        flags |= FLAG_HASVERSION;
      }
      if (versionTag instanceof DiskVersionTag) {
        flags |= FLAG_PERSISTENT;
      }
      out.writeByte(flags);
      out.writeByte(op.ordinal);
      oldValueToData(out, getOldValue(), oldValueIsSerialized);
      if (versionTag != null) {
        InternalDataSerializer.invokeToData(versionTag, out);
      }
    }
Return oldValue as a byte[] or as a CachedDeserializable. This method used to deserialize a
CachedDeserializable but that is too soon. This method is called during message processing.
The deserialization needs to be deferred until we get back to the application thread which
happens for this oldValue when they call EntryEventImpl.getOldValue.
geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemotePutMessage.java