In external dictionary providers, the allowed keys for configuration seemed to have a typo
of "update_lag" as "update_tag", preventing the use of "update_lag". This change fixes that.
Here is an example for deadlock during shutting down DDLWorker:
Server main thread:
6 ThreadFromGlobalPool::join () at ../src/Common/ThreadPool.h:217
7 DB::DDLWorker::shutdown () at ../src/Interpreters/DDLWorker.cpp:123
8 DB::DDLWorker::~DDLWorker () at ../src/Interpreters/DDLWorker.cpp:131
9 DB::DDLWorker::~DDLWorker () at ../src/Interpreters/DDLWorker.cpp:130
10 std::__1::default_delete<DB::DDLWorker>::operator() () at ../contrib/libcxx/include/memory:1397
11 std::__1::unique_ptr<>::reset (this=0x7f7521d44fd0, __p=0x0) at ../contrib/libcxx/include/memory:1658
12 DB::ContextSharedPart::shutdown () at ../src/Interpreters/Context.cpp:380 <!-- holds mutex
13 DB::Context::shutdown () at ../src/Interpreters/Context.cpp:2677
DDLWorker thread:
7 DB::Context::getLock () at ../src/Interpreters/Context.cpp:472 <-- trying to acquire shared.mutex
8 DB::Context::getTCPPortSecure () at ../src/Interpreters/Context.cpp:2120
9 DB::DDLTask::findCurrentHostID () at ../src/Interpreters/DDLTask.cpp:169
10 DB::DDLWorker::initAndCheckTask () at ../src/Interpreters/DDLWorker.cpp:191
11 DB::DDLWorker::scheduleTasks () at ../src/Interpreters/DDLWorker.cpp:367
12 DB::DDLWorker::runMainThread () at ../src/Interpreters/DDLWorker.cpp:1063
v2: replace getTryLockTimed() with getTryLock() since std::recursive_mutex does not have try_lock_for()
v3: stole objects from context
Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
Fixes: #21318
system.mutations includes only the message, but not stacktrace, and it
is not always obvious to understand the culprit w/o stacktrace.
Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
* 'theme' GET parameter
* 'theme' in localStorage
* According to OS preference (didn't work before)
Also, theme is only saved in localStorage if a user specifically clicked on one theme icon or the other.