dbms: fixed error with insert quorum [#METR-16779].

This commit is contained in:
Alexey Milovidov 2016-01-21 07:06:20 +03:00
parent 0f3e163c4e
commit 14d525d991

View File

@ -1040,7 +1040,8 @@ bool StorageReplicatedMergeTree::executeLogEntry(const LogEntry & entry, Backgro
/// Проверяем, что пока мы собирали версии, не ожила реплика с нужным куском.
replica = findReplicaHavingPart(entry.new_part_name, true);
/// Также за это время могла быть создана совсем новая реплика. Но если на старых не появится куска, то на новой его тоже не может быть.
/// Также за это время могла быть создана совсем новая реплика.
/// Но если на старых не появится куска, то на новой его тоже не может быть.
if (replica.empty())
{
@ -1062,6 +1063,8 @@ bool StorageReplicatedMergeTree::executeLogEntry(const LogEntry & entry, Backgro
throw Exception("Logical error: log entry with quorum for part covering more than one block number",
ErrorCodes::LOGICAL_ERROR);
zookeeper->createIfNotExists(zookeeper_path + "/nonincrement_block_numbers/" + partition_str, "");
auto acl = zookeeper->getDefaultACL();
ops.push_back(new zkutil::Op::Create(
@ -1094,7 +1097,7 @@ bool StorageReplicatedMergeTree::executeLogEntry(const LogEntry & entry, Backgro
else if (code == ZBADVERSION || code == ZNONODE || code == ZNODEEXISTS)
{
LOG_DEBUG(log, "State was changed or isn't expected when trying to mark quorum for part "
<< entry.new_part_name << " as failed.");
<< entry.new_part_name << " as failed. Code: " << zerror(code));
}
else
throw zkutil::KeeperException(code);
@ -1103,7 +1106,8 @@ bool StorageReplicatedMergeTree::executeLogEntry(const LogEntry & entry, Backgro
{
LOG_WARNING(log, "No active replica has part " << entry.new_part_name
<< ", but that part needs quorum and /quorum/status contains entry about another part " << quorum_entry.part_name
<< ". It means that part was successfully written to " << entry.quorum << " replicas, but then all of them goes offline."
<< ". It means that part was successfully written to " << entry.quorum
<< " replicas, but then all of them goes offline."
<< " Or it is a bug.");
}
}
@ -1920,7 +1924,6 @@ void StorageReplicatedMergeTree::searchForMissingPart(const String & part_name)
const auto partition_str = part_name.substr(0, 6);
for (auto i = part_info.left; i <= part_info.right; ++i)
{
zookeeper->createIfNotExists(zookeeper_path + "/nonincrement_block_numbers", "");
zookeeper->createIfNotExists(zookeeper_path + "/nonincrement_block_numbers/" + partition_str, "");
AbandonableLockInZooKeeper::createAbandonedIfNotExists(
zookeeper_path + "/nonincrement_block_numbers/" + partition_str + "/block-" + padIndex(i),