29
29
import org .apache .hudi .common .testutils .HoodieTestUtils ;
30
30
import org .apache .hudi .common .util .FileIOUtils ;
31
31
import org .apache .hudi .common .util .Option ;
32
+ import org .apache .hudi .exception .HoodieNotSupportedException ;
32
33
import org .apache .hudi .metadata .HoodieIndexVersion ;
33
34
import org .apache .hudi .metadata .MetadataPartitionType ;
34
35
import org .apache .hudi .storage .StoragePath ;
@@ -149,6 +150,7 @@ void testTableVersion() throws IOException {
149
150
.setTableType (HoodieTableType .MERGE_ON_READ .name ())
150
151
.setTableName ("table-version-test" )
151
152
.setTableVersion (HoodieTableVersion .SIX .versionCode ())
153
+ .setAutoUpgrade (false )
152
154
.initTable (this .metaClient .getStorageConf (), basePath );
153
155
assertEquals (HoodieTableVersion .SIX , metaClient1 .getTableConfig ().getTableVersion ());
154
156
@@ -168,10 +170,12 @@ void testGenerateFromAnotherMetaClient() throws IOException {
168
170
.setTableType (HoodieTableType .MERGE_ON_READ .name ())
169
171
.setTableName ("table-version-test" )
170
172
.setTableVersion (HoodieTableVersion .SIX .versionCode ())
173
+ .setAutoUpgrade (false )
171
174
.initTable (this .metaClient .getStorageConf (), basePath1 );
172
175
173
176
HoodieTableMetaClient metaClient2 = HoodieTableMetaClient .newTableBuilder ()
174
177
.fromMetaClient (metaClient1 )
178
+ .setAutoUpgrade (false )
175
179
.initTable (this .metaClient .getStorageConf (), basePath2 );
176
180
177
181
assertEquals (metaClient1 .getTableConfig ().getTableType (), metaClient2 .getTableConfig ().getTableType ());
@@ -283,4 +287,100 @@ void testDeleteDefinition() throws IOException {
283
287
new String (FileIOUtils .readDataFromPath (metaClient .getStorage (), new StoragePath (metaClient .getIndexDefinitionPath ())).get ()));
284
288
assertTrue (indexMetadata .getIndexDefinitions ().isEmpty ());
285
289
}
290
+
291
+ @ Test
292
+ void testGetTableVersionProperlyWithNullTableVersion () {
293
+ HoodieTableMetaClient .TableBuilder tableBuilder = HoodieTableMetaClient .newTableBuilder ()
294
+ .setTableName ("test_table" )
295
+ .setTableType (HoodieTableType .COPY_ON_WRITE )
296
+ .setAutoUpgrade (false );
297
+
298
+ // tableVersion is null by default
299
+ HoodieTableVersion result = tableBuilder .getTableVersionProperly ();
300
+ assertEquals (HoodieTableVersion .current (), result );
301
+ }
302
+
303
+ @ Test
304
+ void testGetTableVersionProperlyWithCurrentVersion () {
305
+ HoodieTableMetaClient .TableBuilder tableBuilder = HoodieTableMetaClient .newTableBuilder ()
306
+ .setTableName ("test_table" )
307
+ .setTableType (HoodieTableType .COPY_ON_WRITE )
308
+ .setTableVersion (HoodieTableVersion .current ())
309
+ .setAutoUpgrade (false );
310
+ HoodieTableVersion result = tableBuilder .getTableVersionProperly ();
311
+ assertEquals (HoodieTableVersion .current (), result );
312
+ }
313
+
314
+ @ Test
315
+ void testGetTableVersionProperlyWithHigherVersion () {
316
+ HoodieTableMetaClient .TableBuilder tableBuilder = HoodieTableMetaClient .newTableBuilder ()
317
+ .setTableName ("test_table" )
318
+ .setTableType (HoodieTableType .COPY_ON_WRITE )
319
+ .setTableVersion (HoodieTableVersion .NINE )
320
+ .setAutoUpgrade (false );
321
+ HoodieTableVersion result = tableBuilder .getTableVersionProperly ();
322
+ assertEquals (HoodieTableVersion .current (), result );
323
+ }
324
+
325
+ @ Test
326
+ void testGetTableVersionProperlyWithVariousLowerVersions () {
327
+ // Test with different lower versions
328
+ HoodieTableVersion [] lowerVersions = {
329
+ HoodieTableVersion .ZERO ,
330
+ HoodieTableVersion .ONE ,
331
+ HoodieTableVersion .TWO ,
332
+ HoodieTableVersion .THREE ,
333
+ HoodieTableVersion .FOUR ,
334
+ HoodieTableVersion .FIVE ,
335
+ HoodieTableVersion .SIX ,
336
+ HoodieTableVersion .SEVEN ,
337
+ HoodieTableVersion .EIGHT
338
+ };
339
+
340
+ for (HoodieTableVersion version : lowerVersions ) {
341
+ HoodieTableMetaClient .TableBuilder tableBuilder = HoodieTableMetaClient .newTableBuilder ()
342
+ .setTableName ("test_table" )
343
+ .setTableType (HoodieTableType .COPY_ON_WRITE )
344
+ .setTableVersion (version )
345
+ .setAutoUpgrade (false );
346
+
347
+ HoodieTableVersion result = tableBuilder .getTableVersionProperly ();
348
+ assertEquals (version , result );
349
+ }
350
+ }
351
+
352
+ @ Test
353
+ void testGetTableVersionProperlyWithLowerVersionsAndAutoUpgradeTrue () {
354
+ // Test with different lower versions and autoUpgrade=true
355
+ HoodieTableVersion [] lowerVersions = {
356
+ HoodieTableVersion .ZERO ,
357
+ HoodieTableVersion .ONE ,
358
+ HoodieTableVersion .TWO ,
359
+ HoodieTableVersion .THREE ,
360
+ HoodieTableVersion .FOUR ,
361
+ HoodieTableVersion .FIVE ,
362
+ HoodieTableVersion .SIX ,
363
+ HoodieTableVersion .SEVEN ,
364
+ HoodieTableVersion .EIGHT
365
+ };
366
+
367
+ for (HoodieTableVersion version : lowerVersions ) {
368
+ HoodieTableMetaClient .TableBuilder tableBuilder = HoodieTableMetaClient .newTableBuilder ()
369
+ .setTableName ("test_table" )
370
+ .setTableType (HoodieTableType .COPY_ON_WRITE )
371
+ .setTableVersion (version )
372
+ .setAutoUpgrade (true );
373
+
374
+ if (version .versionCode () == 6 || version .versionCode () == 8 ) {
375
+ HoodieNotSupportedException exception = assertThrows (HoodieNotSupportedException .class ,
376
+ () -> tableBuilder .getTableVersionProperly ());
377
+ // Verify the error message contains the expected version information
378
+ assertTrue (exception .getMessage ().contains (
379
+ String .format ("Table version \" %d\" " , version .versionCode ())));
380
+ } else {
381
+ HoodieTableVersion result = tableBuilder .getTableVersionProperly ();
382
+ assertEquals (version , result );
383
+ }
384
+ }
385
+ }
286
386
}
0 commit comments