Skip to content

ExecutionContext w/ information schema leaks catalogs #680

@crepererum

Description

@crepererum

Describe the bug
Catalog registered to ExecutionContext with an information schema are never freed due to a cyclic Arc chain.

To Reproduce
Steps to reproduce the behavior:

#[tokio::test]
async fn catalogs_not_leaked() {
    // the information schema used to introduce cyclic Arcs
    let ctx = ExecutionContext::with_config(
        ExecutionConfig::new().with_information_schema(true),
    );

    // register a single catalog
    let catalog = Arc::new(MemoryCatalogProvider::new());
    let catalog_weak = Arc::downgrade(&catalog);
    ctx.register_catalog("my_catalog", catalog);

    let catalog_list_weak = {
        let state = ctx.state.lock().unwrap();
        Arc::downgrade(&state.catalog_list)
    };

    drop(ctx);

    assert_eq!(Weak::strong_count(&catalog_list_weak), 0);
    assert_eq!(Weak::strong_count(&catalog_weak), 0);
}

Expected behavior
Memory is freed.

Additional context
Affects master branch at 58da15970dc0ec9e3c1c369fe89f6ba38e09d9c9.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions