提交 866e64a6 编写于 作者: A Alexey Milovidov

Fixed deadlock in test when many replicas on single server try to execute...

Fixed deadlock in test when many replicas on single server try to execute multiple attaches and wait for each other [#METR-23507].
上级 00fc6f56
......@@ -1208,29 +1208,25 @@ bool StorageReplicatedMergeTree::executeLogEntry(const LogEntry & entry)
if (do_fetch)
{
String replica;
String covering_part;
String replica = findReplicaHavingCoveringPart(entry.new_part_name, true, covering_part);
try
if (replica.empty() && entry.type == LogEntry::ATTACH_PART)
{
String covering_part;
replica = findReplicaHavingCoveringPart(entry.new_part_name, true, covering_part);
if (replica.empty() && entry.type == LogEntry::ATTACH_PART)
{
/** Если ATTACH - куска может не быть, потому что реплика, на которой кусок есть, ещё сама не успела его прицепить.
* В таком случае, надо подождать этого.
*/
/** Если ATTACH - куска может не быть, потому что реплика, на которой кусок есть, ещё сама не успела его прицепить.
* В таком случае, надо подождать этого.
*/
/// Кусок должен быть на реплике-инициаторе.
if (entry.source_replica.empty() || entry.source_replica == replica_name)
throw Exception("Logical error: no source replica specified for ATTACH_PART log entry;"
" or trying to fetch part on source replica", ErrorCodes::LOGICAL_ERROR);
/// Кусок должен быть на реплике-инициаторе.
if (entry.source_replica.empty() || entry.source_replica == replica_name)
throw Exception("Logical error: no source replica specified for ATTACH_PART log entry;"
" or trying to fetch part on source replica", ErrorCodes::LOGICAL_ERROR);
/// Подождём, пока реплика-инициатор подцепит кусок.
waitForReplicaToProcessLogEntry(entry.source_replica, entry);
replica = findReplicaHavingCoveringPart(entry.new_part_name, true, covering_part);
}
throw Exception("No active replica has attached part " + entry.new_part_name + " or covering part yet", ErrorCodes::NO_REPLICA_HAS_PART);
}
try
{
if (replica.empty())
{
/** Если кусок должен быть записан с кворумом, и кворум ещё недостигнут,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册