Skip to content

Commit ed9f636

Browse files
committed
hold parts references to prevent deletion
1 parent fa02f30 commit ed9f636

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
11
#pragma once
22

33
#include <Storages/ExportReplicatedMergeTreePartitionManifest.h>
4+
#include <Storages/MergeTree/IMergeTreeDataPart.h>
45

56
namespace DB
67
{
78
struct ExportReplicatedMergeTreePartitionTaskEntry
89
{
10+
using DataPartPtr = std::shared_ptr<const IMergeTreeDataPart>;
911
ExportReplicatedMergeTreePartitionManifest manifest;
1012

1113
std::size_t parts_to_do;
14+
/// References to the parts that should be exported
15+
/// This is used to prevent the parts from being deleted before finishing the export operation
16+
/// It does not mean this replica will export all the parts
17+
/// There is also a chance this replica does not contain a given part and it is totally ok.
18+
std::vector<DataPartPtr> part_references;
1219
};
20+
1321
}

src/Storages/StorageReplicatedMergeTree.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4443,9 +4443,19 @@ void StorageReplicatedMergeTree::exportMergeTreePartitionUpdatingTask()
44434443
continue;
44444444
}
44454445

4446+
std::vector<DataPartPtr> part_references;
4447+
4448+
for (const auto & part_name : metadata.parts)
4449+
{
4450+
if (const auto part = getPartIfExists(part_name, {MergeTreeDataPartState::Active, MergeTreeDataPartState::Outdated}))
4451+
{
4452+
part_references.push_back(part);
4453+
}
4454+
}
4455+
44464456
export_merge_tree_partition_task_entries.emplace(
44474457
key,
4448-
ExportReplicatedMergeTreePartitionTaskEntry{std::move(metadata), parts_to_do});
4458+
ExportReplicatedMergeTreePartitionTaskEntry {metadata, parts_to_do, std::move(part_references)});
44494459
}
44504460

44514461
/// Remove entries that were deleted by someone else

0 commit comments

Comments
 (0)