4242class LakeSplitSerializerTest {
4343 private static final byte LAKE_SNAPSHOT_SPLIT_KIND = -1 ;
4444
45- private static final int SERIALIZER_VERSION = 3 ;
46-
4745 private static final byte [] TEST_DATA = "test-lake-split" .getBytes ();
4846
4947 private static final int STOPPING_OFFSET = 1024 ;
@@ -61,8 +59,9 @@ class LakeSplitSerializerTest {
6159 @ Test
6260 void testSerializeAndDeserializeLakeSnapshotSplit () throws IOException {
6361 // Prepare test data
62+ int splitIndex = 1 ;
6463 LakeSnapshotSplit originalSplit =
65- new LakeSnapshotSplit (tableBucket , "2025-08-18" , LAKE_SPLIT , 1 );
64+ new LakeSnapshotSplit (tableBucket , "2025-08-18" , LAKE_SPLIT , splitIndex );
6665
6766 DataOutputSerializer output = new DataOutputSerializer (STOPPING_OFFSET );
6867 serializer .serialize (output , originalSplit );
@@ -80,6 +79,40 @@ void testSerializeAndDeserializeLakeSnapshotSplit() throws IOException {
8079 assertThat (tableBucket ).isEqualTo (result .getTableBucket ());
8180 assertThat ("2025-08-18" ).isEqualTo (result .getPartitionName ());
8281 assertThat (LAKE_SPLIT ).isEqualTo (result .getLakeSplit ());
82+ assertThat (splitIndex ).isEqualTo (result .getSplitIndex ());
83+ }
84+
85+ @ Test
86+ void testSerializeAndDeserializeLakeSnapshotSplitBackwardCompatibility () throws IOException {
87+ SimpleVersionedSerializer <LakeSplit > sourceSplitSerializerV1 =
88+ new TestSimpleVersionedSerializer ();
89+ SimpleVersionedSerializer <LakeSplit > sourceSplitSerializerV2 =
90+ new TestSimpleVersionedSerializerV2 ();
91+ LakeSplitSerializer serializerV1 = new LakeSplitSerializer (sourceSplitSerializerV1 );
92+ LakeSplitSerializer serializerV2 = new LakeSplitSerializer (sourceSplitSerializerV2 );
93+
94+ // Prepare test data
95+ int splitIndex = 1 ;
96+ LakeSnapshotSplit originalSplit =
97+ new LakeSnapshotSplit (tableBucket , "2025-08-18" , LAKE_SPLIT , splitIndex );
98+
99+ DataOutputSerializer output = new DataOutputSerializer (STOPPING_OFFSET );
100+ serializerV1 .serialize (output , originalSplit );
101+
102+ SourceSplitBase deserializedSplit =
103+ serializerV2 .deserialize (
104+ LAKE_SNAPSHOT_SPLIT_KIND ,
105+ tableBucket ,
106+ "2025-08-18" ,
107+ new DataInputDeserializer (output .getCopyOfBuffer ()));
108+
109+ assertThat (deserializedSplit instanceof LakeSnapshotSplit ).isTrue ();
110+ LakeSnapshotSplit result = (LakeSnapshotSplit ) deserializedSplit ;
111+
112+ assertThat (tableBucket ).isEqualTo (result .getTableBucket ());
113+ assertThat ("2025-08-18" ).isEqualTo (result .getPartitionName ());
114+ assertThat (LAKE_SPLIT ).isEqualTo (result .getLakeSplit ());
115+ assertThat (splitIndex ).isEqualTo (result .getSplitIndex ());
83116 }
84117
85118 @ Test
@@ -137,6 +170,8 @@ void testDeserializeWithWrongSplitKind() throws IOException {
137170 private static class TestSimpleVersionedSerializer
138171 implements SimpleVersionedSerializer <LakeSplit > {
139172
173+ private static final int V1 = 1 ;
174+
140175 @ Override
141176 public byte [] serialize (LakeSplit split ) throws IOException {
142177 return TEST_DATA ;
@@ -149,7 +184,31 @@ public LakeSplit deserialize(int version, byte[] serialized) throws IOException
149184
150185 @ Override
151186 public int getVersion () {
152- return SERIALIZER_VERSION ;
187+ return V1 ;
188+ }
189+ }
190+
191+ private static class TestSimpleVersionedSerializerV2
192+ implements SimpleVersionedSerializer <LakeSplit > {
193+
194+ private static final int V2 = 2 ;
195+
196+ @ Override
197+ public byte [] serialize (LakeSplit split ) throws IOException {
198+ return TEST_DATA ;
199+ }
200+
201+ @ Override
202+ public LakeSplit deserialize (int version , byte [] serialized ) throws IOException {
203+ if (version < V2 ) {
204+ return LAKE_SPLIT ;
205+ }
206+ return new TestLakeSplit (0 , Collections .singletonList ("2025-08-19" ));
207+ }
208+
209+ @ Override
210+ public int getVersion () {
211+ return V2 ;
153212 }
154213 }
155214
0 commit comments