Skip to content

Commit 66ed0d1

Browse files
committed
feat: Remove long standing connections on sql state and catalog backends
1 parent d064d42 commit 66ed0d1

3 files changed

Lines changed: 14 additions & 19 deletions

File tree

airbyte/caches/_catalog_backend.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
import abc
1212
import json
13-
from typing import TYPE_CHECKING
1413

1514
from sqlalchemy import Column, String
1615
from sqlalchemy.orm import Session, declarative_base
@@ -24,10 +23,7 @@
2423
)
2524

2625
from airbyte.shared.catalog_providers import CatalogProvider
27-
28-
29-
if TYPE_CHECKING:
30-
from sqlalchemy.engine import Engine
26+
from airbyte.shared.sql_processor import SqlConfig
3127

3228

3329
STREAMS_TABLE_NAME = "_airbyte_streams"
@@ -110,10 +106,10 @@ class SqlCatalogBackend(CatalogBackendBase):
110106

111107
def __init__(
112108
self,
113-
engine: Engine,
109+
sql_config: SqlConfig,
114110
table_prefix: str,
115111
) -> None:
116-
self._engine: Engine = engine
112+
self._sql_config = sql_config
117113
self._table_prefix = table_prefix
118114
self._ensure_internal_tables()
119115
self._full_catalog: ConfiguredAirbyteCatalog = ConfiguredAirbyteCatalog(
@@ -125,7 +121,7 @@ def __init__(
125121
self._source_catalogs: dict[str, ConfiguredAirbyteCatalog] = {}
126122

127123
def _ensure_internal_tables(self) -> None:
128-
engine = self._engine
124+
engine = self._sql_config.get_sql_engine()
129125
SqlAlchemyModel.metadata.create_all(engine) # type: ignore[attr-defined]
130126

131127
def register_source(
@@ -181,7 +177,7 @@ def _save_catalog_info(
181177
incoming_stream_names: set[str],
182178
) -> None:
183179
self._ensure_internal_tables()
184-
engine = self._engine
180+
engine = self._sql_config.get_sql_engine()
185181
with Session(engine) as session:
186182
# Delete and replace existing stream entries from the catalog cache
187183
table_name_entries_to_delete = [
@@ -217,7 +213,7 @@ def _fetch_streams_info(
217213
218214
The `source_name` and `table_prefix` args are optional filters.
219215
"""
220-
engine = self._engine
216+
engine = self._sql_config.get_sql_engine()
221217
with Session(engine) as session:
222218
# load all the streams
223219
streams: list[CachedStream] = session.query(CachedStream).all()

airbyte/caches/_state_backend.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,12 @@
2020
StateBackendBase,
2121
)
2222
from airbyte.exceptions import PyAirbyteInputError, PyAirbyteInternalError
23+
from airbyte.shared.sql_processor import SqlConfig
2324
from airbyte.shared.state_providers import StaticInputState
2425
from airbyte.shared.state_writers import StateWriterBase
2526

2627

2728
if TYPE_CHECKING:
28-
from sqlalchemy.engine import Engine
29-
3029
from airbyte.shared.state_providers import StateProviderBase
3130

3231

@@ -136,7 +135,7 @@ def _write_state(
136135

137136
self._state_backend._ensure_internal_tables() # noqa: SLF001 # Non-public member access
138137
table_prefix = self._state_backend._table_prefix # noqa: SLF001
139-
engine = self._state_backend._engine # noqa: SLF001
138+
engine = self._state_backend._sql_config.get_sql_engine() # noqa: SLF001
140139

141140
# Calculate the new state model to write.
142141
new_state = (
@@ -187,17 +186,17 @@ class SqlStateBackend(StateBackendBase):
187186

188187
def __init__(
189188
self,
190-
engine: Engine,
189+
sql_config: SqlConfig,
191190
table_prefix: str = "",
192191
) -> None:
193192
"""Initialize the state manager with a static catalog state."""
194-
self._engine: Engine = engine
193+
self._sql_config = sql_config
195194
self._table_prefix = table_prefix
196195
super().__init__()
197196

198197
def _ensure_internal_tables(self) -> None:
199198
"""Ensure the internal tables exist in the SQL database."""
200-
engine = self._engine
199+
engine = self._sql_config.get_sql_engine()
201200
SqlAlchemyModel.metadata.create_all(engine) # type: ignore[attr-defined]
202201

203202
def get_state_provider(
@@ -223,7 +222,7 @@ def get_state_provider(
223222
else:
224223
stream_state_model = CacheStreamStateModel
225224

226-
engine = self._engine
225+
engine = self._sql_config.get_sql_engine()
227226
with Session(engine) as session:
228227
query = session.query(stream_state_model).filter(
229228
stream_state_model.source_name == source_name

airbyte/caches/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,11 @@ def __init__(self, **data: Any) -> None: # noqa: ANN401
8989

9090
# Initialize the catalog and state backends
9191
self._catalog_backend = SqlCatalogBackend(
92-
engine=self.get_sql_engine(),
92+
sql_config=self,
9393
table_prefix=self.table_prefix or "",
9494
)
9595
self._state_backend = SqlStateBackend(
96-
engine=self.get_sql_engine(),
96+
sql_config=self,
9797
table_prefix=self.table_prefix or "",
9898
)
9999

0 commit comments

Comments
 (0)