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 
{
            token->cache.insert_tokens.erase(*key);
            token->cleaned_up = true;
            cleaned_up = true;
        }
        ~InsertTokenHolder()
        {
            if (!token)
                return;
            if (cleaned_up)
                return;
            std::lock_guard token_lock(token->mutex);
            if (token->cleaned_up)
                return;
            std::lock_guard cache_lock(token->cache.mutex);
            --token->refcount;
            if (token->refcount == 0)
                cleanup(token_lock, cache_lock);
        }
    };
    friend struct InsertTokenHolder;
    InsertTokenById insert_tokens;
    LRUQueue queue;
    
    size_t current_size = 0;
    const size_t max_size;
    std::atomic<size_t> hits {0};
    std::atomic<size_t> misses {0};
    WeightFunction weight_function;
    MappedPtr getImpl(const Key & key, [[maybe_unused]] std::lock_guard<std::mutex> & cache_lock)