/* * Copyright (c) 2016 Uber Technologies, Inc. (hoodie-dev-group@uber.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.uber.hoodie.common; import java.io.Serializable; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.apache.hadoop.fs.FileStatus; /** * Collects stats about a single partition clean operation */ public class HoodieRollbackStat implements Serializable { // Partition path private final String partitionPath; private final List successDeleteFiles; // Files that could not be deleted private final List failedDeleteFiles; // Count of HoodieLogFile to commandBlocks written for a particular rollback private final Map commandBlocksCount; public HoodieRollbackStat(String partitionPath, List successDeleteFiles, List failedDeleteFiles, Map commandBlocksCount) { this.partitionPath = partitionPath; this.successDeleteFiles = successDeleteFiles; this.failedDeleteFiles = failedDeleteFiles; this.commandBlocksCount = commandBlocksCount; } public Map getCommandBlocksCount() { return commandBlocksCount; } public String getPartitionPath() { return partitionPath; } public List getSuccessDeleteFiles() { return successDeleteFiles; } public List getFailedDeleteFiles() { return failedDeleteFiles; } public static HoodieRollbackStat.Builder newBuilder() { return new Builder(); } public static class Builder { private List successDeleteFiles; private List failedDeleteFiles; private Map commandBlocksCount; private String partitionPath; public Builder withDeletedFileResults(Map deletedFiles) { //noinspection Convert2MethodRef successDeleteFiles = deletedFiles.entrySet().stream().filter(s -> s.getValue()) .map(s -> s.getKey().getPath().toString()).collect(Collectors.toList()); failedDeleteFiles = deletedFiles.entrySet().stream().filter(s -> !s.getValue()) .map(s -> s.getKey().getPath().toString()).collect(Collectors.toList()); return this; } public Builder withRollbackBlockAppendResults(Map commandBlocksCount) { this.commandBlocksCount = commandBlocksCount; return this; } public Builder withPartitionPath(String partitionPath) { this.partitionPath = partitionPath; return this; } public HoodieRollbackStat build() { return new HoodieRollbackStat(partitionPath, successDeleteFiles, failedDeleteFiles, commandBlocksCount); } } }