@Override
  public void fromData(DataInput in,
      DeserializationContext context) throws IOException, ClassNotFoundException {
    final boolean isDebugEnabled_VOL =
        logger.isTraceEnabled(LogMarker.VERSIONED_OBJECT_LIST_VERBOSE);
    int flags = in.readByte();
    hasKeys = (flags & 0x01) == 0x01;
    boolean hasObjects = (flags & 0x02) == 0x02;
    boolean hasTags = (flags & 0x04) == 0x04;
    regionIsVersioned = (flags & 0x08) == 0x08;
    serializeValues = (flags & 0x10) == 0x10;
    boolean persistent = (flags & 0x20) == 0x20;
    if (isDebugEnabled_VOL) {
      logger.trace(LogMarker.VERSIONED_OBJECT_LIST_VERBOSE,
          "deserializing a VersionedObjectList with flags 0x{}", Integer.toHexString(flags));
    }
    if (hasKeys) {
      int size = (int) InternalDataSerializer.readUnsignedVL(in);
      keys = new ArrayList<>(size);
      if (isDebugEnabled_VOL) {
        logger.trace(LogMarker.VERSIONED_OBJECT_LIST_VERBOSE, "reading {} keys", size);
      }
      for (int i = 0; i < size; i++) {
        keys.add(context.getDeserializer().readObject(in));
      }
    }
    if (hasObjects) {
      int size = (int) InternalDataSerializer.readUnsignedVL(in);
      if (isDebugEnabled_VOL) {
        logger.trace(LogMarker.VERSIONED_OBJECT_LIST_VERBOSE, "reading {} objects", size);
      }
      objects = new ArrayList<>(size);
      objectTypeArray = new byte[size];
      for (int i = 0; i < size; i++) {
        readObject(i, in, context);
      }
    } else {
      objects = new ArrayList<>();
    }
    if (hasTags) {
      int size = (int) InternalDataSerializer.readUnsignedVL(in);
      if (isDebugEnabled_VOL) {
        logger.trace(LogMarker.VERSIONED_OBJECT_LIST_VERBOSE, "reading {} version tags", size);
      }
      versionTags = new ArrayList<>(size);
      List<VersionSource> ids = new ArrayList<>(size);
      for (int i = 0; i < size; i++) {
        byte entryType = in.readByte();
        switch (entryType) {
          case FLAG_NULL_TAG:
            versionTags.add(null);
            break;
          case FLAG_FULL_TAG:
            versionTags.add(VersionTag.create(persistent, in));
            break;
          case FLAG_TAG_WITH_NEW_ID:
            VersionTag tag = VersionTag.create(persistent, in);
            ids.add(tag.getMemberID());
            versionTags.add(tag);
            break;
          case FLAG_TAG_WITH_NUMBER_ID:
            tag = VersionTag.create(persistent, in);
            int idNumber = (int) InternalDataSerializer.readUnsignedVL(in);
            tag.setMemberID(ids.get(idNumber));
            versionTags.add(tag);
            break;
        }
      }
    } else {
      versionTags = new ArrayList<>();
    }
  }
sets the keys for this partlist
geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/VersionedObjectList.java