prefect icon indicating copy to clipboard operation
prefect copied to clipboard

Flow run containers never exit when using `jaydebeapi`

Open kevingrismore opened this issue 5 months ago • 1 comments

Bug summary

Flow run containers never exit when using jaydebeapi, even when manually closing and deleting connections. Network information on containers indicate the connection is still open.

import gc

import jaydebeapi
from prefect import flow
from prefect.logging import get_run_logger


@flow
def sync_object(table):
    logger = get_run_logger()

    user = None
    password = None
    driver = None
    jar = None
    query = """select * from some_table;"""

    connection = None
    cursor = None
    results = []

    try:
        connection = jaydebeapi.connect(driver, url, [user, password], jar)
        cursor = connection.cursor()

        cursor.execute(query)
        columns = [column[0] for column in cursor.description]
        results = [dict(zip(columns, row)) for row in cursor.fetchall()]

    except Exception as e:
        logger.error(f"Error running query: {e}")

    finally:
        if cursor:
            try:
                cursor.close()
                del cursor
            except Exception as e:
                logger.error(f"Failed to close cursor: {e}")

        if connection:
            try:
                connection.close()
                del connection
            except Exception as e:
                logger.error(f"Failed to close connection: {e}")

        # Force garbage collection to clean up connection
        gc.collect()

    return results

Version info (prefect version output)

Version:             2.19.2
API version:         0.8.4
Python version:      3.11.5
Git commit:          e42a3971
Built:               Thu, May 23, 2024 2:45 PM
OS/Arch:             darwin/arm64
Profile:             default
Server type:         cloud

Additional context

No response

kevingrismore avatar Aug 27 '24 15:08 kevingrismore