[HUDI-2675] Fix the exception 'Not an Avro data file' when archive and clean (#4016)
This commit is contained in:
@@ -190,12 +190,36 @@ public class HoodieActiveTimeline extends HoodieDefaultTimeline {
|
||||
}
|
||||
}
|
||||
|
||||
public void deleteEmptyInstantIfExists(HoodieInstant instant) {
|
||||
ValidationUtils.checkArgument(isEmpty(instant));
|
||||
deleteInstantFileIfExists(instant);
|
||||
}
|
||||
|
||||
public void deleteCompactionRequested(HoodieInstant instant) {
|
||||
ValidationUtils.checkArgument(instant.isRequested());
|
||||
ValidationUtils.checkArgument(Objects.equals(instant.getAction(), HoodieTimeline.COMPACTION_ACTION));
|
||||
deleteInstantFile(instant);
|
||||
}
|
||||
|
||||
private void deleteInstantFileIfExists(HoodieInstant instant) {
|
||||
LOG.info("Deleting instant " + instant);
|
||||
Path inFlightCommitFilePath = new Path(metaClient.getMetaPath(), instant.getFileName());
|
||||
try {
|
||||
if (metaClient.getFs().exists(inFlightCommitFilePath)) {
|
||||
boolean result = metaClient.getFs().delete(inFlightCommitFilePath, false);
|
||||
if (result) {
|
||||
LOG.info("Removed instant " + instant);
|
||||
} else {
|
||||
throw new HoodieIOException("Could not delete instant " + instant);
|
||||
}
|
||||
} else {
|
||||
LOG.warn("The commit " + inFlightCommitFilePath + " to remove does not exist");
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new HoodieIOException("Could not remove inflight commit " + inFlightCommitFilePath, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteInstantFile(HoodieInstant instant) {
|
||||
LOG.info("Deleting instant " + instant);
|
||||
Path inFlightCommitFilePath = new Path(metaClient.getMetaPath(), instant.getFileName());
|
||||
|
||||
@@ -123,7 +123,7 @@ public class HoodieDefaultTimeline implements HoodieTimeline {
|
||||
@Override
|
||||
public HoodieTimeline getCompletedReplaceTimeline() {
|
||||
return new HoodieDefaultTimeline(
|
||||
instants.stream().filter(s -> s.getAction().equals(REPLACE_COMMIT_ACTION)).filter(s -> s.isCompleted()), details);
|
||||
instants.stream().filter(s -> s.getAction().equals(REPLACE_COMMIT_ACTION)).filter(HoodieInstant::isCompleted), details);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -374,6 +374,11 @@ public class HoodieDefaultTimeline implements HoodieTimeline {
|
||||
return operationType.isPresent() && WriteOperationType.DELETE_PARTITION.equals(operationType.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty(HoodieInstant instant) {
|
||||
return getInstantDetails(instant).get().length == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return this.getClass().getName() + ": " + instants.stream().map(Object::toString).collect(Collectors.joining(","));
|
||||
|
||||
@@ -289,6 +289,8 @@ public interface HoodieTimeline extends Serializable {
|
||||
*/
|
||||
Option<byte[]> getInstantDetails(HoodieInstant instant);
|
||||
|
||||
boolean isEmpty(HoodieInstant instant);
|
||||
|
||||
/**
|
||||
* Check WriteOperationType is DeletePartition.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user