https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101420

--- Comment #13 from Avi Kivity <a...@cloudius-systems.com> ---
The coroutine that breaks is

future<> table::generate_and_propagate_view_updates(const schema_ptr& base,
        reader_permit permit,
        std::vector<db::view::view_and_base>&& views,
        mutation&& m,
        flat_mutation_reader_opt existings,
        tracing::trace_state_ptr tr_state,
        gc_clock::time_point now) const {
    auto base_token = m.token();
    db::view::view_update_builder builder = co_await
db::view::make_view_update_builder(
            base,
            std::move(views),
            flat_mutation_reader_from_mutations(std::move(permit),
{std::move(m)}),
            std::move(existings),
            now);
    while (true) {
        try {
            auto updates = co_await builder.build_some();
            if (updates.empty()) {
                break;
            }
            tracing::trace(tr_state, "Generated {} view update mutations",
updates.size());
            auto units =
seastar::consume_units(*_config.view_update_concurrency_semaphore,
memory_usage_of(updates));
            co_await db::view::mutate_MV(base_token, std::move(updates),
_view_stats, *_config.cf_stats, tr_state,
                std::move(units), service::allow_hints::yes,
db::view::wait_for_all_updates::no).handle_exception([] (auto ignored) { });
        } catch (...) {
        }
    }
    co_await builder.close();
}


Nothing special in there, in particular nothing that looks like an array.

Reply via email to