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 
bool result = false;
        auto token_it = insert_tokens.find(key);
        if (token_it != insert_tokens.end() && token_it->second.get() == token)
        {
            setImpl(key, token->value, cache_lock);
            result = true;
        }
        if (!token->cleaned_up)
            token_holder.cleanup(token_lock, cache_lock);
        return std::make_pair(token->value, result);
    }
    void getStats(size_t & out_hits, size_t & out_misses) const
    {
        std::lock_guard lock(mutex);
        out_hits = hits;
        out_misses = misses;
    }
    size_t weight() const
    {
        std::lock_guard lock(mutex);
        return current_size;
    }
    size_t count() const
    {
        std::lock_guard lock(mutex);
        return cells.size();
    }
    void reset()