mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 00:22:29 +00:00
Fix test & review comments
This commit is contained in:
parent
543221b8b9
commit
1d002e45a9
@ -3870,27 +3870,32 @@ void MergeTreeData::delayInsertOrThrowIfNeeded(Poco::Event * until, const Contex
|
||||
{
|
||||
size_t parts_over_threshold = 0;
|
||||
size_t allowed_parts_over_threshold = 1;
|
||||
if (active_parts_over_threshold >= outdated_parts_over_threshold)
|
||||
const bool use_active_parts_threshold = (active_parts_over_threshold >= outdated_parts_over_threshold);
|
||||
if (use_active_parts_threshold)
|
||||
{
|
||||
parts_over_threshold = active_parts_over_threshold;
|
||||
parts_over_threshold = active_parts_over_threshold;
|
||||
allowed_parts_over_threshold = active_parts_to_throw_insert - active_parts_to_delay_insert;
|
||||
}
|
||||
else
|
||||
{
|
||||
parts_over_threshold = outdated_parts_over_threshold;
|
||||
allowed_parts_over_threshold = outdated_parts_over_threshold;
|
||||
allowed_parts_over_threshold = outdated_parts_over_threshold; /// if throw threshold is not set, will use max delay
|
||||
if (settings->inactive_parts_to_throw_insert > 0)
|
||||
allowed_parts_over_threshold = settings->inactive_parts_to_throw_insert - settings->inactive_parts_to_delay_insert;
|
||||
}
|
||||
|
||||
chassert(allowed_parts_over_threshold > 0 && parts_over_threshold <= allowed_parts_over_threshold);
|
||||
if (allowed_parts_over_threshold == 0 || parts_over_threshold > allowed_parts_over_threshold) [[unlikely]]
|
||||
throw Exception(
|
||||
ErrorCodes::LOGICAL_ERROR,
|
||||
"Incorrect calculation of {} parts over threshold: allowed_parts_over_threshold={}, parts_over_threshold={}",
|
||||
(use_active_parts_threshold ? "active" : "inactive"),
|
||||
allowed_parts_over_threshold,
|
||||
parts_over_threshold);
|
||||
|
||||
const UInt64 max_delay_milliseconds = (settings->max_delay_to_insert > 0 ? settings->max_delay_to_insert * 1000 : 1000);
|
||||
double delay_factor = static_cast<double>(parts_over_threshold) / allowed_parts_over_threshold;
|
||||
UInt64 min_delay_milliseconds = settings->min_delay_to_insert_ms;
|
||||
/// min() as a save guard here
|
||||
delay_milliseconds = std::max(
|
||||
min_delay_milliseconds, std::min(max_delay_milliseconds, static_cast<UInt64>(max_delay_milliseconds * delay_factor)));
|
||||
const UInt64 min_delay_milliseconds = settings->min_delay_to_insert_ms;
|
||||
delay_milliseconds = std::max(min_delay_milliseconds, static_cast<UInt64>(max_delay_milliseconds * delay_factor));
|
||||
}
|
||||
|
||||
ProfileEvents::increment(ProfileEvents::DelayedInserts);
|
||||
|
@ -68,7 +68,7 @@ struct Settings;
|
||||
M(Bool, remove_rolled_back_parts_immediately, 1, "Setting for an incomplete experimental feature.", 0) \
|
||||
\
|
||||
/** Inserts settings. */ \
|
||||
M(UInt64, parts_to_delay_insert, 150, "If table contains at least that many active parts in single partition, artificially slow down insert into table.", 0) \
|
||||
M(UInt64, parts_to_delay_insert, 150, "If table contains at least that many active parts in single partition, artificially slow down insert into table. Disabled if set to 0", 0) \
|
||||
M(UInt64, inactive_parts_to_delay_insert, 0, "If table contains at least that many inactive parts in single partition, artificially slow down insert into table.", 0) \
|
||||
M(UInt64, parts_to_throw_insert, 300, "If more than this number active parts in single partition, throw 'Too many parts ...' exception.", 0) \
|
||||
M(UInt64, inactive_parts_to_throw_insert, 0, "If more than this number inactive parts in single partition, throw 'Too many inactive parts ...' exception.", 0) \
|
||||
|
@ -15,10 +15,10 @@ for i in {0..4}
|
||||
do
|
||||
query_id="${CLICKHOUSE_DATABASE}_02521_${i}_$RANDOM$RANDOM"
|
||||
$CLICKHOUSE_CLIENT --query_id="$query_id" -q "INSERT INTO test_02521_insert_delay SELECT number, toString(number) FROM numbers(${i}, 1)"
|
||||
$CLICKHOUSE_CLIENT -q "system flush logs"
|
||||
$CLICKHOUSE_CLIENT -q "SYSTEM FLUSH LOGS"
|
||||
$CLICKHOUSE_CLIENT --param_query_id="$query_id" -q "select ProfileEvents['DelayedInsertsMilliseconds'] as delay from system.query_log where event_date >= yesterday() and query_id = {query_id:String} order by delay desc limit 1"
|
||||
done
|
||||
|
||||
$CLICKHOUSE_CLIENT -q "INSERT INTO test_02521_insert_delay VALUES(0, 'This query throws error')" 2>&1 | grep -o 'TOO_MANY_PARTS'
|
||||
$CLICKHOUSE_CLIENT -q "INSERT INTO test_02521_insert_delay VALUES(0, 'This query throws error')" 2>&1 | grep -o 'TOO_MANY_PARTS' | head -n 1
|
||||
|
||||
$CLICKHOUSE_CLIENT -q "DROP TABLE test_02521_insert_delay"
|
||||
|
Loading…
Reference in New Issue
Block a user