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 
{
        auto res = cells.emplace(std::piecewise_construct,
            std::forward_as_tuple(key),
            std::forward_as_tuple());
        Cell & cell = res.first->second;
        bool inserted = res.second;
        if (inserted)
        {
            cell.queue_iterator = queue.insert(queue.end(), key);
        }
        else
        {
            current_size -= cell.size;
            queue.splice(queue.end(), queue, cell.queue_iterator);
        }
        cell.value = mapped;
        cell.size = cell.value ? weight_function(*cell.value) : 0;
        current_size += cell.size;
        removeOverflow();
    }
    void removeOverflow()