yihua commented on a change in pull request #5173:
URL: https://github.com/apache/hudi/pull/5173#discussion_r839065758
##########
File path:
hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java
##########
@@ -639,9 +641,32 @@ public void deleteSavepoint(String savepointTime) {
* @return true if the savepoint was restored to successfully
*/
public void restoreToSavepoint(String savepointTime) {
- HoodieTable<T, I, K, O> table = initTable(WriteOperationType.UNKNOWN,
Option.empty());
+ boolean initialMetadataTableIfNecessary = config.isMetadataTableEnabled();
+ if (initialMetadataTableIfNecessary) {
+ try {
+ // Delete metadata table directly when users trigger savepoint
rollback if mdt existed and beforeTimelineStarts
+ String basePath = config.getBasePath();
+ String metadataTableBase =
HoodieTableMetadata.getMetadataTableBasePath(basePath);
Review comment:
nit: rename to `metadataTableBasePathStr`?
##########
File path:
hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java
##########
@@ -639,9 +641,32 @@ public void deleteSavepoint(String savepointTime) {
* @return true if the savepoint was restored to successfully
*/
public void restoreToSavepoint(String savepointTime) {
- HoodieTable<T, I, K, O> table = initTable(WriteOperationType.UNKNOWN,
Option.empty());
+ boolean initialMetadataTableIfNecessary = config.isMetadataTableEnabled();
+ if (initialMetadataTableIfNecessary) {
+ try {
+ // Delete metadata table directly when users trigger savepoint
rollback if mdt existed and beforeTimelineStarts
+ String basePath = config.getBasePath();
+ String metadataTableBase =
HoodieTableMetadata.getMetadataTableBasePath(basePath);
+ Path metadataTableBasePath = new Path(metadataTableBase);
+ HoodieTableMetaClient mdtClient =
HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(metadataTableBase).build();
+ // Same as HoodieTableMetadataUtil#processRollbackMetadata
+ HoodieInstant syncedInstant = new HoodieInstant(false,
HoodieTimeline.DELTA_COMMIT_ACTION, savepointTime);
+ // The instant required to sync rollback to MDT has been archived and
the mdt syncing will be failed
+ // So that we need to delete the whole MDT here.
+ if
(mdtClient.getCommitsTimeline().isBeforeTimelineStarts(syncedInstant.getTimestamp()))
{
+ mdtClient.getFs().delete(metadataTableBasePath, true);
+ // rollbackToSavepoint action will try to bootstrap MDT at first but
sync to MDT will fail at the current scenario.
+ // so that we need to disable metadata initialized here.
+ initialMetadataTableIfNecessary = false;
+ }
+ } catch (Exception e) {
+ // Metadata directory does not exist
+ }
+ }
+
+ HoodieTable<T, I, K, O> table = initTable(WriteOperationType.UNKNOWN,
Option.empty(), initialMetadataTableIfNecessary);
SavepointHelpers.validateSavepointPresence(table, savepointTime);
- restoreToInstant(savepointTime);
+ restoreToInstant(savepointTime, initialMetadataTableIfNecessary);
Review comment:
It would be good to get rid of the additional flag
(`initialMetadataTableIfNecessary`) which is passed around for init table
logic. Yet I do see this is unavoidable at this point due to the write client
abstraction. We can keep this for now.
##########
File path:
hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java
##########
@@ -639,9 +641,32 @@ public void deleteSavepoint(String savepointTime) {
* @return true if the savepoint was restored to successfully
*/
public void restoreToSavepoint(String savepointTime) {
- HoodieTable<T, I, K, O> table = initTable(WriteOperationType.UNKNOWN,
Option.empty());
+ boolean initialMetadataTableIfNecessary = config.isMetadataTableEnabled();
+ if (initialMetadataTableIfNecessary) {
+ try {
+ // Delete metadata table directly when users trigger savepoint
rollback if mdt existed and beforeTimelineStarts
+ String basePath = config.getBasePath();
+ String metadataTableBase =
HoodieTableMetadata.getMetadataTableBasePath(basePath);
+ Path metadataTableBasePath = new Path(metadataTableBase);
Review comment:
nit: this can be instantiated inline.
--
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]