dbms: quorum inserts: development [#METR-16779].

This commit is contained in:
Alexey Milovidov 2015-09-11 05:51:35 +03:00
parent d53f173478
commit 15a6ac31f4
2 changed files with 11 additions and 17 deletions

View File

@ -44,23 +44,9 @@ public:
auto live_replicas = zookeeper->getChildren(storage.zookeeper_path + "/leader_election"); auto live_replicas = zookeeper->getChildren(storage.zookeeper_path + "/leader_election");
if (live_replicas.size() < quorum) if (live_replicas.size() < quorum)
{
String list_of_replicas;
if (live_replicas.empty())
list_of_replicas = "none";
else
{
WriteBufferFromString out(list_of_replicas);
for (auto it = live_replicas.begin(); it != live_replicas.end(); ++it)
out << (it == live_replicas.begin() ? "" : ", ") << *it;
}
throw Exception("Number of alive replicas (" throw Exception("Number of alive replicas ("
+ toString(live_replicas.size()) + ") is less than requested quorum (" + toString(live_replicas.size()) + ") is less than requested quorum (" + toString(quorum) + ").",
+ toString(quorum) + "). Alive replicas: " + list_of_replicas,
ErrorCodes::TOO_LESS_LIVE_REPLICAS); ErrorCodes::TOO_LESS_LIVE_REPLICAS);
}
/** Достигнут ли кворум для последнего куска, для которого нужен кворум? /** Достигнут ли кворум для последнего куска, для которого нужен кворум?
* Запись всех кусков с включенным кворумом линейно упорядочена. * Запись всех кусков с включенным кворумом линейно упорядочена.

View File

@ -1969,7 +1969,11 @@ static void updateQuorum(
/// Кворум достигнут. Удаляем узел. /// Кворум достигнут. Удаляем узел.
auto code = zookeeper->tryRemove(quorum_status_path, stat.version); auto code = zookeeper->tryRemove(quorum_status_path, stat.version);
if (code == ZNONODE) if (code == ZOK)
{
break;
}
else if (code == ZNONODE)
{ {
/// Кворум уже был достигнут. /// Кворум уже был достигнут.
break; break;
@ -1987,7 +1991,11 @@ static void updateQuorum(
/// Обновляем узел, прописывая туда на одну реплику больше. /// Обновляем узел, прописывая туда на одну реплику больше.
auto code = zookeeper->trySet(quorum_status_path, quorum_entry.toString(), stat.version); auto code = zookeeper->trySet(quorum_status_path, quorum_entry.toString(), stat.version);
if (code == ZNONODE) if (code == ZOK)
{
break;
}
else if (code == ZNONODE)
{ {
/// Кворум уже был достигнут. /// Кворум уже был достигнут.
break; break;