mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-23 10:10:50 +00:00
ensure that empty entries are not returned from PoolWithFailoverBase [#CLICKHOUSE-2141]
This commit is contained in:
parent
d29f3c79c3
commit
aa62dc354f
@ -139,6 +139,7 @@ ConnectionPoolWithFailover::tryGetEntry(
|
||||
if (!table_to_check || !max_allowed_delay || server_revision < DBMS_MIN_REVISION_WITH_TABLES_STATUS)
|
||||
{
|
||||
result.entry->forceConnected();
|
||||
result.is_up_to_date = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -162,7 +163,9 @@ ConnectionPoolWithFailover::tryGetEntry(
|
||||
max_delay = std::max(max_delay, status.absolute_delay);
|
||||
}
|
||||
|
||||
if (max_delay >= max_allowed_delay)
|
||||
if (max_delay < max_allowed_delay)
|
||||
result.is_up_to_date = true;
|
||||
else
|
||||
{
|
||||
result.is_up_to_date = false;
|
||||
result.staleness = max_delay;
|
||||
|
@ -68,10 +68,10 @@ public:
|
||||
struct TryResult
|
||||
{
|
||||
TryResult() = default;
|
||||
explicit TryResult(Entry entry_) : entry(std::move(entry)) {}
|
||||
explicit TryResult(Entry entry_) : entry(std::move(entry)), is_up_to_date(true) {}
|
||||
|
||||
Entry entry;
|
||||
bool is_up_to_date = true; /// If true, the entry is a connection to up-to-date replica.
|
||||
bool is_up_to_date = false; /// If true, the entry is a connection to up-to-date replica.
|
||||
double staleness = 0.0; /// Helps choosing the "least stale" option when all replicas are stale.
|
||||
};
|
||||
|
||||
@ -224,6 +224,12 @@ PoolWithFailoverBase<TNestedPool>::getMany(
|
||||
"All connection tries failed. Log: \n\n" + fail_messages + "\n",
|
||||
DB::ErrorCodes::ALL_CONNECTION_TRIES_FAILED);
|
||||
|
||||
try_results.erase(
|
||||
std::remove_if(
|
||||
try_results.begin(), try_results.end(),
|
||||
[](const TryResult & r) { return r.entry.isNull(); }),
|
||||
try_results.end());
|
||||
|
||||
std::vector<Entry> entries;
|
||||
|
||||
if (up_to_date_count >= min_entries)
|
||||
@ -237,11 +243,6 @@ PoolWithFailoverBase<TNestedPool>::getMany(
|
||||
}
|
||||
else if (fallback_to_stale_replicas)
|
||||
{
|
||||
try_results.erase(
|
||||
std::remove_if(
|
||||
try_results.begin(), try_results.end(),
|
||||
[](const TryResult & r) { return r.entry.isNull(); }),
|
||||
try_results.end());
|
||||
std::stable_sort(
|
||||
try_results.begin(), try_results.end(),
|
||||
[](const TryResult & left, const TryResult & right)
|
||||
|
Loading…
Reference in New Issue
Block a user