voonhous commented on code in PR #19205:
URL: https://github.com/apache/hudi/pull/19205#discussion_r3671829444
##########
hudi-client/hudi-client-common/src/main/java/org/apache/hudi/table/upgrade/NineToTenUpgradeHandler.java:
##########
@@ -34,6 +46,12 @@ public UpgradeDowngrade.TableConfigChangeSet upgrade(
HoodieEngineContext context,
String instantTime,
SupportsUpgradeDowngrade upgradeDowngradeHelper) {
- return new UpgradeDowngrade.TableConfigChangeSet();
+ HoodieTableConfig tableConfig =
+ upgradeDowngradeHelper.getTable(config,
context).getMetaClient().getTableConfig();
+ // Resolves from the legacy boolean for a version 9 table, since the mode
property is absent.
+ MetaFieldsMode metaFieldsMode = tableConfig.getMetaFieldsMode();
+ Map<ConfigProperty, String> propertiesToUpdate = Collections.singletonMap(
+ HoodieTableConfig.META_FIELDS_MODE, metaFieldsMode.name());
+ return new UpgradeDowngrade.TableConfigChangeSet(propertiesToUpdate,
Collections.emptySet());
Review Comment:
This is a scenario for upgrade + downgrade round trip.
**State A -- v9 table today (created pre-1.3 with virtual keys):**
hoodie.properties:
```
hoodie.table.version=9
hoodie.populate.meta.fields=false
```
Data files on disk have no meta columns. Readers resolve
`populateMetaFields() == false` and use the user's key field.
**State B -- after 9 -> 10**
if the upgrade removed the legacy property (the symmetry that
EightToNineUpgradeHandler follows for `PAYLOAD_CLASS_NAME` at :171-172 and
`PRECOMBINE_FIELD` at :240-241):
hoodie.properties:
```
hoodie.table.version=10
hoodie.meta.fields.mode=NONE
```
It is still correct -- at v10 the mode is the source of truth.
**State C -- after 10 -> 9 downgrade.**
`TenToNineDowngradeHandler:75` deletes `META_FIELDS_MODE`, and it has to: v9
cannot interpret it.
hoodie.properties:
```
hoodie.table.version=9
```
Neither property is present now.
**State D -- a v9 reader opens it**
`HoodieTableConfig.getMetaFieldsMode() (:1281)` falls back to
`legacyPopulateMetaFields()` -> `getStringOrDefault(POPULATE_META_FIELDS)` ->
`#defaultValue(true) (:338-341)` -> **ALL**.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]