CLICKHOUSE-3847 fix problems with empty entries

This commit is contained in:
VadimPE 2018-07-31 16:45:43 +03:00
parent 9b5620fac1
commit ed8d749b9e
2 changed files with 6 additions and 5 deletions

View File

@ -107,12 +107,13 @@ void ReplicatedMergeTreeCleanupThread::clearOldLogs()
entries.erase(entries.end() - std::min(entries.size(), storage.data.settings.replicated_logs_to_keep.value), entries.end()); entries.erase(entries.end() - std::min(entries.size(), storage.data.settings.replicated_logs_to_keep.value), entries.end());
/// We will not touch records that are no less than `min_pointer`. /// We will not touch records that are no less than `min_pointer`.
entries.erase(std::lower_bound(entries.begin(), entries.end(), "log-" + padIndex(min_pointer)), entries.end()); entries.erase(std::lower_bound(entries.begin(), entries.end(), "log-" + padIndex(min_pointer)), entries.end());
/// We will mark lost replicas.
markLostReplicas(log_pointers_lost_replicas, *(--entries.end()));
if (entries.empty()) if (entries.empty())
return; return;
/// We will mark lost replicas.
markLostReplicas(log_pointers_losted_replicas, entries.back());
zkutil::Requests ops; zkutil::Requests ops;
for (size_t i = 0; i < entries.size(); ++i) for (size_t i = 0; i < entries.size(); ++i)
{ {
@ -131,7 +132,7 @@ void ReplicatedMergeTreeCleanupThread::clearOldLogs()
} }
void ReplicatedMergeTreeCleanupThread::markLostReplicas(std::unordered_map<String, UInt64> log_pointers_lost_replicas, String min_record) void ReplicatedMergeTreeCleanupThread::markLostReplicas(std::unordered_map<String, UInt64> log_pointers_lost_replicas, String remove_border)
{ {
auto zookeeper = storage.getZooKeeper(); auto zookeeper = storage.getZooKeeper();
@ -139,7 +140,7 @@ void ReplicatedMergeTreeCleanupThread::markLostReplicas(std::unordered_map<Strin
for (auto pair : log_pointers_lost_replicas) for (auto pair : log_pointers_lost_replicas)
{ {
if ("log-" + padIndex(pair.second) <= min_record) if ("log-" + padIndex(pair.second) <= remove_border)
ops.emplace_back(zkutil::makeCreateRequest(storage.zookeeper_path + "/replicas/" + pair.first + "/is_lost", "", ops.emplace_back(zkutil::makeCreateRequest(storage.zookeeper_path + "/replicas/" + pair.first + "/is_lost", "",
zkutil::CreateMode::Persistent)); zkutil::CreateMode::Persistent));
} }

View File

@ -41,7 +41,7 @@ private:
/// We don't want to keep logs for inactive replicas. /// We don't want to keep logs for inactive replicas.
/// We mark these replicas as lost. /// We mark these replicas as lost.
void markLostReplicas(std::unordered_map<String, UInt64> log_pointers_lost_replicas, String min_record); void markLostReplicas(std::unordered_map<String, UInt64> log_pointers_lost_replicas, String remove_border);
/// Remove old block hashes from ZooKeeper. This is done by the leader replica. /// Remove old block hashes from ZooKeeper. This is done by the leader replica.
void clearOldBlocks(); void clearOldBlocks();