Ethan Guo created HUDI-3721:
-------------------------------

             Summary: Metadata table blocks rollback and restore to savepoint 
before bootstrapped/init commit
                 Key: HUDI-3721
                 URL: https://issues.apache.org/jira/browse/HUDI-3721
             Project: Apache Hudi
          Issue Type: Bug
            Reporter: Ethan Guo
            Assignee: Ethan Guo
             Fix For: 0.11.0


Say the table has instants C1 to C4, and the data table does not have MDT 
enabled.  After C4, the writer enables MDT so MDT has DC4 as the first instant 
with the same timestamp as C4.  The rollback of any commit before C4 on data 
table is going to fail now due to the following check.  This is going to fail 
restore to a savepoint before C4 as well if there is any.  Yet the check itself 
can be relaxed in such a case to allow the rollback to get through.
{code:java}
C1 C2 C3 C4
          | metadata table init

      // Case 2: The instant-to-rollback was never committed to Metadata Table. 
This can happen if the instant-to-rollback
      // was a failed commit (never completed) as only completed instants are 
synced to Metadata Table.
      // But the required Metadata Table instants should not have been archived
      HoodieInstant syncedInstant = new HoodieInstant(false, 
HoodieTimeline.DELTA_COMMIT_ACTION, instantToRollback);
      if 
(metadataTableTimeline.getCommitsTimeline().isBeforeTimelineStarts(syncedInstant.getTimestamp()))
 {
        throw new HoodieMetadataException(String.format("The instant %s 
required to sync rollback of %s has been archived",
            syncedInstant, instantToRollback));
      }{code}
Prashant proposes to make the bootstrap commit of metadata table have a 
specific suffix (just like we have 001 and 002 for compaction and clean). This 
will make it trivial to detect such cases.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to