private void removeAllFromData(DataInput in,
      DeserializationContext context) throws IOException, ClassNotFoundException {
    int removeAllSize = DataSerializer.readInteger(in);
    final RemoveAllEntryData[] removeAllData = new RemoveAllEntryData[removeAllSize];
    final KnownVersion version = StaticSerialization.getVersionForDataStreamOrNull(in);
    final ByteArrayDataInput bytesIn = new ByteArrayDataInput();
    for (int i = 0; i < removeAllSize; i++) {
      removeAllData[i] = new RemoveAllEntryData(in, eventID, i, context);
    }

    boolean hasTags = in.readBoolean();
    if (hasTags) {
      EntryVersionsList versionTags = EntryVersionsList.create(in);
      for (int i = 0; i < removeAllSize; i++) {
        removeAllData[i].versionTag = versionTags.get(i);
      }
    }
    op = Operation.REMOVEALL_DESTROY;
    setOriginRemote(true);
    setGenerateCallbacks(true);

    removeAllOp =
        new DistributedRemoveAllOperation(this, removeAllSize, false /* [DISTTX] TODO */);
    removeAllOp.setRemoveAllEntryData(removeAllData);
  }
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