@Override
  public void fromData(DataInput in,
      DeserializationContext context) throws IOException, ClassNotFoundException {
    eventID = DataSerializer.readObject(in);
    regionName = DataSerializer.readString(in);
    op = Operation.fromOrdinal(in.readByte());
    Object key = DataSerializer.readObject(in);
    Integer bucketId = DataSerializer.readInteger(in);
    keyInfo = new DistTxKeyInfo(key, null/*
                                          * value [DISTTX} TODO see if required
                                          */, null/*
                                                  * callbackarg [DISTTX] TODO
                                                  */, bucketId);
    basicSetNewValue(DataSerializer.readObject(in), true);

    byte flags = DataSerializer.readByte(in);

    if ((flags & HAS_PUTALL_OP) != 0) {
      putAllFromData(in, context);
    }

    if ((flags & HAS_REMOVEALL_OP) != 0) {
      removeAllFromData(in, context);
    }
  }
TODO DISTTX: callers of this constructor need to make sure that release is called. In general
the distributed tx code needs to be reviewed to see if it correctly handles off-heap.
geode-core/src/main/java/org/apache/geode/internal/cache/tx/DistTxEntryEvent.java