Davis-Zhang-Onehouse commented on code in PR #13489:
URL: https://github.com/apache/hudi/pull/13489#discussion_r2178370265
##########
hudi-common/src/main/java/org/apache/hudi/common/table/HoodieTableMetaClient.java:
##########
@@ -287,21 +290,44 @@ public Option<HoodieIndexMetadata> getIndexMetadata() {
if (indexMetadataOpt.isPresent() &&
!indexMetadataOpt.get().getIndexDefinitions().isEmpty()) {
return indexMetadataOpt;
}
+ Option<HoodieIndexMetadata> indexDefOption = Option.empty();
if (tableConfig.getRelativeIndexDefinitionPath().isPresent() &&
StringUtils.nonEmpty(tableConfig.getRelativeIndexDefinitionPath().get())) {
- StoragePath indexDefinitionPath =
- new StoragePath(basePath,
tableConfig.getRelativeIndexDefinitionPath().get());
- try {
- Option<byte[]> bytesOpt = FileIOUtils.readDataFromPath(storage,
indexDefinitionPath, true);
- if (bytesOpt.isPresent()) {
- return Option.of(HoodieIndexMetadata.fromJson(new
String(bytesOpt.get())));
- } else {
- return Option.of(new HoodieIndexMetadata());
- }
- } catch (IOException e) {
- throw new HoodieIOException("Could not load index definition at path:
" + tableConfig.getRelativeIndexDefinitionPath().get(), e);
+ indexDefOption = loadIndexDefFromStorage(basePath,
tableConfig.getRelativeIndexDefinitionPath().get(), storage);
+ }
+ populateIndexVersionIfMissing(tableConfig.getTableVersion(),
indexDefOption);
+ return indexDefOption;
+ }
+
+ public static void populateIndexVersionIfMissing(HoodieTableVersion
tableVersion, Option<HoodieIndexMetadata> indexDefOption) {
+ indexDefOption.ifPresent(idxDefs ->
+ idxDefs.getIndexDefinitions().replaceAll((indexName, idxDef) -> {
+
ValidationUtils.checkArgument(HoodieIndexVersion.isValidIndexDefinition(tableVersion,
idxDef),
+ String.format("Table version %s, index definition %s",
tableVersion, idxDef));
+ if (idxDef.getVersion() == null) {
+ // If version field is missing, it implies either of the cases
(validated by isValidIndexDefinition):
+ // - It is table version 8, because we don't write version
attributes in some hudi releases
+ // - It is table version 9, and it is not secondary index. Since
we drop SI on upgrade and we always write version attributes.
+ return
idxDef.toBuilder().withVersion(getCurrentVersion(tableVersion,
idxDef.getIndexName())).build();
Review Comment:
this is a great point, it is done in commit "table version upgrade downgrade
implementation (July 1st)"
--
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]