`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`.
{
        return trace_collector.has_value();
    }
    void initializeTraceCollector(std::shared_ptr<TraceLog> trace_log)
    {
        if (!trace_log)
            return;
        if (hasTraceCollector())
            return;
        trace_collector.emplace(std::move(trace_log));
    }
    void addWarningMessage(const String & message)
    {
        
        log->warning(message);
        warnings.push_back(message);
    }
};
Context::Context() = default;