public void toData(DataOutput out, boolean largeModCount, boolean sendVersionTag,
          boolean sendShadowKey) throws IOException {
        // DataSerializer.writeObject(this.key,out);
        /* Don't serialize key because caller did that already */

        out.writeByte(op.ordinal);
        if (largeModCount) {
          out.writeInt(modSerialNum);
        } else {
          out.writeByte(modSerialNum);
        }
        DataSerializer.writeObject(callbackArg, out);
        DataSerializer.writeObject(filterRoutingInfo, out);
        if (sendVersionTag) {
          DataSerializer.writeObject(versionTag, out);
        }
        if (sendShadowKey) {
          out.writeLong(tailKey);
        }
        out.writeInt(eventOffset);
        if (!op.isDestroy()) {
          out.writeBoolean(didDestroy);
          if (!op.isInvalidate()) {
            boolean sendObject = Token.isInvalidOrRemoved(value);
            sendObject = sendObject || value instanceof byte[];
            out.writeBoolean(sendObject);
            if (sendObject) {
              DataSerializer.writeObject(value, out);
            } else {
              DataSerializer.writeObjectAsByteArray(value, out);
            }
          }
        }
      }
Creates and returns a new instance of a tx entry op on the far side. The "toData" that this
should match is {@link TXEntryState#toFarSideData}.

@param in the data input that is used to read the data for this entry op
@param largeModCount true if the mod count is a int instead of a byte.
@param readShadowKey true if a long shadowKey should be read
geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java