private void removeAllToData(DataOutput out,
      SerializationContext context) throws IOException {
    DataSerializer.writeInteger(removeAllOp.removeAllDataSize, out);

    EntryVersionsList versionTags = new EntryVersionsList(removeAllOp.removeAllDataSize);

    boolean hasTags = false;
    final RemoveAllEntryData[] removeAllData = removeAllOp.getRemoveAllEntryData();
    for (int i = 0; i < removeAllOp.removeAllDataSize; i++) {
      if (!hasTags && removeAllData[i].versionTag != null) {
        hasTags = true;
      }
      VersionTag<?> tag = removeAllData[i].versionTag;
      versionTags.add(tag);
      removeAllData[i].versionTag = null;
      removeAllData[i].serializeTo(out, context);
      removeAllData[i].versionTag = tag;
    }
    out.writeBoolean(hasTags);
    if (hasTags) {
      InternalDataSerializer.invokeToData(versionTags, out);
    }
  }
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