Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ public enum OlapTableState {
private KeysType keysType;
@Setter
@SerializedName(value = "pi", alternate = {"partitionInfo"})
private PartitionInfo partitionInfo;
private PartitionInfo partitionInfo; // should modify only under table's lock
@SerializedName(value = "itp", alternate = {"idToPartition"})
@Getter
protected ConcurrentHashMap<Long, Partition> idToPartition = new ConcurrentHashMap<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
import java.util.stream.Collectors;

/*
* Repository of a partition's related infos
* Repository of a partition's related infos. should modify only under table's lock.
*/
public class PartitionInfo {
private static final Logger LOG = LogManager.getLogger(PartitionInfo.class);
Expand Down Expand Up @@ -137,6 +137,7 @@ public String getDisplayPartitionColumns() {
return sb.toString();
}

// need read lock of table
public Map<Long, PartitionItem> getIdToItem(boolean isTemp) {
if (isTemp) {
return idToTempItem;
Expand Down Expand Up @@ -196,6 +197,7 @@ private void setItemInternal(long partitionId, boolean isTemp, PartitionItem ite
}
}

// need write lock of table
public PartitionItem handleNewSinglePartitionDesc(SinglePartitionDesc desc,
long partitionId, boolean isTemp) throws DdlException {
Preconditions.checkArgument(desc.isAnalyzed());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,13 +205,18 @@ private static Pair<Integer, Integer> getBucketsNum(DynamicPartitionProperty pro
}

public static List<Partition> getHistoricalPartitions(OlapTable table, String nowPartitionName) {
RangePartitionInfo info = (RangePartitionInfo) (table.getPartitionInfo());
List<Map.Entry<Long, PartitionItem>> idToItems = new ArrayList<>(info.getIdToItem(false).entrySet());
idToItems.sort(Comparator.comparing(o -> ((RangePartitionItem) o.getValue()).getItems().upperEndpoint()));
return idToItems.stream()
.map(entry -> table.getPartition(entry.getKey()))
.filter(partition -> partition != null && !partition.getName().equals(nowPartitionName))
.collect(Collectors.toList());
table.readLock();
try {
RangePartitionInfo info = (RangePartitionInfo) (table.getPartitionInfo());
List<Map.Entry<Long, PartitionItem>> idToItems = new ArrayList<>(info.getIdToItem(false).entrySet());
idToItems.sort(Comparator.comparing(o -> ((RangePartitionItem) o.getValue()).getItems().upperEndpoint()));
return idToItems.stream()
.map(entry -> table.getPartition(entry.getKey()))
.filter(partition -> partition != null && !partition.getName().equals(nowPartitionName))
.collect(Collectors.toList());
} finally {
table.readUnlock();
}
}

public static List<Partition> filterDataPartitions(List<Partition> partitions, List<Long> visibleVersions) {
Expand Down
Loading