private void basicToData(DataOutput out,
        SerializationContext context,
        boolean useShadowKey) throws IOException {
      if (internalRegion != null) {
        DataSerializer.writeString(internalRegion.getFullPath(), out);
        if (internalRegion instanceof BucketRegion) {
          DataSerializer.writeString(
              ((Bucket) internalRegion).getPartitionedRegion().getFullPath(), out);
        } else {
          DataSerializer.writeString(null, out);
        }
      } else {
        DataSerializer.writeString(regionPath, out);
        DataSerializer.writeString(parentRegionPath, out);
      }

      if (isEmpty() || opKeys.size() == 0) {
        out.writeInt(0);
      } else {
        int size = opKeys.size();
        out.writeInt(size);

        final boolean largeModCount;
        if (msg.txState != null) {
          largeModCount = msg.txState.needsLargeModCount();
        } else {
          largeModCount = msg.needsLargeModCount;
        }
        out.writeBoolean(largeModCount);

        VersionSource member = memberId;
        if (member == null) {
          if (internalRegion == null) {
            Assert.assertTrue(msg.txState == null);
          } else {
            member = internalRegion.getVersionMember();
          }
        }
        DataSerializer.writeObject(member, out);
        for (int i = 0; i < size; i++) {
          DataSerializer.writeObject(opKeys.get(i), out);
          if (msg.txState != null) {
            /* we are still on tx node and have the entry state */
            ((TXEntryState) opEntries.get(i)).toFarSideData(out, context, largeModCount,
                true, useShadowKey);
          } else {
            ((FarSideEntryOp) opEntries.get(i)).toData(out, largeModCount, true,
                useShadowKey);
          }
        }
      }
    }
Apply a single tx entry op on the far side
geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java