2019-12-04 13:53:05 +00:00
#!/usr/bin/env bash
CURDIR = $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " && pwd )
. $CURDIR /../shell_config.sh
$CLICKHOUSE_CLIENT --query "DROP DATABASE IF EXISTS dictdb"
$CLICKHOUSE_CLIENT --query "CREATE DATABASE dictdb Engine = Ordinary"
$CLICKHOUSE_CLIENT --query "
CREATE TABLE dictdb.dict_invalidate
ENGINE = Memory AS
SELECT
122 as dummy,
toDateTime( '2019-10-29 18:51:35' ) AS last_time
FROM system.one"
$CLICKHOUSE_CLIENT --query "
CREATE DICTIONARY dictdb.invalidate
(
dummy UInt64,
two UInt8 EXPRESSION dummy
)
PRIMARY KEY dummy
SOURCE( CLICKHOUSE( HOST 'localhost' PORT 9000 USER 'default' TABLE 'dict_invalidate' DB 'dictdb' INVALIDATE_QUERY 'select max(last_time) from dictdb.dict_invalidate' ) )
LIFETIME( MIN 0 MAX 1)
LAYOUT( FLAT( ) ) "
$CLICKHOUSE_CLIENT --query "SELECT dictGetUInt8('dictdb.invalidate', 'two', toUInt64(122))"
$CLICKHOUSE_CLIENT --query "SELECT last_exception FROM system.dictionaries WHERE database = 'dictdb' AND name = 'invalidate'"
2019-12-04 14:45:56 +00:00
# Bad solution, but it's quite complicated to detect, that invalidte_query stopped updates.
# In worst case we don't check anything, but fortunately it doesn't lead to false negatives.
2019-12-04 14:22:49 +00:00
sleep 5
2019-12-04 13:53:05 +00:00
$CLICKHOUSE_CLIENT --query "DROP TABLE dictdb.dict_invalidate"
function check_exception_detected( )
{
query_result = ` $CLICKHOUSE_CLIENT --query "SELECT last_exception FROM system.dictionaries WHERE database = 'dictdb' AND name = 'invalidate'" 2>& 1`
while [ -z " $query_result " ]
do
query_result = ` $CLICKHOUSE_CLIENT --query "SELECT last_exception FROM system.dictionaries WHERE database = 'dictdb' AND name = 'invalidate'" 2>& 1`
sleep 0.1
done
}
export -f check_exception_detected;
timeout 10 bash -c check_exception_detected 2> /dev/null
$CLICKHOUSE_CLIENT --query "SELECT last_exception FROM system.dictionaries WHERE database = 'dictdb' AND name = 'invalidate'" 2>& 1 | grep -Eo "Table dictdb.dict_invalidate .* exist."
$CLICKHOUSE_CLIENT --query "
CREATE TABLE dictdb.dict_invalidate
ENGINE = Memory AS
SELECT
133 as dummy,
toDateTime( '2019-10-29 18:51:35' ) AS last_time
FROM system.one"
function check_exception_fixed( )
{
query_result = ` $CLICKHOUSE_CLIENT --query "SELECT last_exception FROM system.dictionaries WHERE database = 'dictdb' AND name = 'invalidate'" 2>& 1`
while [ " $query_result " ]
do
query_result = ` $CLICKHOUSE_CLIENT --query "SELECT last_exception FROM system.dictionaries WHERE database = 'dictdb' AND name = 'invalidate'" 2>& 1`
sleep 0.1
done
}
export -f check_exception_fixed;
timeout 10 bash -c check_exception_fixed 2> /dev/null
$CLICKHOUSE_CLIENT --query "SELECT last_exception FROM system.dictionaries WHERE database = 'dictdb' AND name = 'invalidate'" 2>& 1
$CLICKHOUSE_CLIENT --query "SELECT dictGetUInt8('dictdb.invalidate', 'two', toUInt64(133))"
$CLICKHOUSE_CLIENT --query "DROP DATABASE IF EXISTS dictdb"