Drill provides the VectorAccessibleSerializable class to write a record batch to a stream, and to read that batch from a stream. Record batches can carry an indirection vector (a so-called selection vector 2 or SV2).
The code to write batches writes the SV2 to the stream. But, the code to deserialize batches initializes, but does not read, the SV2 from the stream.
The result is that vector deserialization reads the wrong bytes and the saved values are corrupted on read.
Note that this issue was found via unit testing. At present, the only production use of this code is in the external sort, which serializes batches without an indirection vector.