`DataTypeFactory::get` locks a mutex inside shared a context, there was a case when many threads were locked inside it

https://pastila.nl/?0043b3e6/c557368f4cf0eb87a3c6f2cc162bc693

It is not clear which thread locked the mutex for a long time. However, it may be possible to lock less inside `DataTypeFactory::get`.
{
    
    if (!shared->config_reload_callback)
        throw Exception("Can't reload config because config_reload_callback is not set.", ErrorCodes::LOGICAL_ERROR);
    shared->config_reload_callback();
}
void Context::shutdown()
{
    
    
    if (shared->merge_tree_disk_selector)
    {
        for (auto & [disk_name, disk] : getDisksMap())
        {
            LOG_INFO(shared->log, "Shutdown disk {}", disk_name);
            disk->shutdown();
        }
    }
    
    if (shared->tmp_volume)
    {
        auto & disks = shared->tmp_volume->getDisks();
        for (auto & disk : disks)
        {
            disk->shutdown();
        }
    }
    shared->shutdown();
}
Context::ApplicationType Context::getApplicationType() const