in xtable-core/src/main/java/org/apache/xtable/hudi/catalog/HudiCatalogPartitionSyncTool.java [419:449]
public List<CatalogPartitionEvent> getPartitionEvents(
HoodieTableMetaClient metaClient,
List<CatalogPartition> partitionsInCatalog,
List<String> writtenPartitionsOnStorage,
Set<String> droppedPartitionsOnStorage) {
Map<String, String> paths = getPartitionValuesToPathMapping(partitionsInCatalog);
List<CatalogPartitionEvent> events = new ArrayList<>();
for (String storagePartition : writtenPartitionsOnStorage) {
Path storagePartitionPath =
FSUtils.getPartitionPath(metaClient.getBasePathV2(), storagePartition);
String fullStoragePartitionPath =
Path.getPathWithoutSchemeAndAuthority(storagePartitionPath).toUri().getPath();
List<String> storagePartitionValues =
partitionValuesExtractor.extractPartitionValuesInPath(storagePartition);
if (droppedPartitionsOnStorage.contains(storagePartition)) {
events.add(CatalogPartitionEvent.newPartitionDropEvent(storagePartition));
} else {
if (!storagePartitionValues.isEmpty()) {
String storageValue = String.join(", ", storagePartitionValues);
if (!paths.containsKey(storageValue)) {
events.add(CatalogPartitionEvent.newPartitionAddEvent(storagePartition));
} else if (!paths.get(storageValue).equals(fullStoragePartitionPath)) {
events.add(CatalogPartitionEvent.newPartitionUpdateEvent(storagePartition));
}
}
}
}
return events;
}