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 
{
        std::lock_guard lock(mutex);
        queue.clear();
        cells.clear();
        insert_tokens.clear();
        current_size = 0;
        hits = 0;
        misses = 0;
    }
    virtual ~LRUCache() {}
protected:
    using LRUQueue = std::list<Key>;
    using LRUQueueIterator = typename LRUQueue::iterator;
    struct Cell
    {
        MappedPtr value;
        size_t size;
        LRUQueueIterator queue_iterator;
    };
    using Cells = std::unordered_map<Key, Cell, HashFunction>;
    Cells cells;
    mutable std::mutex mutex;
private:
    
    struct InsertToken
    {
        explicit InsertToken(LRUCache & cache_) : cache(cache_) {}