https://github.com/ClickHouse/ClickHouse/blob/055a6563d756e3535774fdd1cee5b83d7b798801/src/Common/LRUCache.h#L283

If `insert` throws exception (bad_alloc or similar), the Cell will be in incorrect state.

Found by @nvartolomei 
{
        InsertTokenHolder token_holder;
        {
            std::lock_guard cache_lock(mutex);
            auto val = getImpl(key, cache_lock);
            if (val)
            {
                ++hits;
                return std::make_pair(val, false);
            }
            auto & token = insert_tokens[key];
            if (!token)
                token = std::make_shared<InsertToken>(*this);
            token_holder.acquire(&key, token, cache_lock);
        }
        InsertToken * token = token_holder.token.get();
        std::lock_guard token_lock(token->mutex);
        token_holder.cleaned_up = token->cleaned_up;
        if (token->value)
        {
            
            ++hits;
            return std::make_pair(token->value, false);
        }
        ++misses;
        token->value = load_func();
        std::lock_guard cache_lock(mutex);