Skip to content

Commit 2f3b247

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

3 files changed

Lines changed: 14 additions & 16 deletions

File tree

airbyte/caches/_catalog_backend.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,8 @@
2525

2626
from airbyte.shared.catalog_providers import CatalogProvider
2727

28-
2928
if TYPE_CHECKING:
30-
from sqlalchemy.engine import Engine
29+
from airbyte.shared.sql_processor import SqlConfig
3130

3231

3332
STREAMS_TABLE_NAME = "_airbyte_streams"
@@ -110,10 +109,10 @@ class SqlCatalogBackend(CatalogBackendBase):
110109

111110
def __init__(
112111
self,
113-
engine: Engine,
112+
sql_config: SqlConfig,
114113
table_prefix: str,
115114
) -> None:
116-
self._engine: Engine = engine
115+
self._sql_config = sql_config
117116
self._table_prefix = table_prefix
118117
self._ensure_internal_tables()
119118
self._full_catalog: ConfiguredAirbyteCatalog = ConfiguredAirbyteCatalog(
@@ -125,7 +124,7 @@ def __init__(
125124
self._source_catalogs: dict[str, ConfiguredAirbyteCatalog] = {}
126125

127126
def _ensure_internal_tables(self) -> None:
128-
engine = self._engine
127+
engine = self._sql_config.get_sql_engine()
129128
SqlAlchemyModel.metadata.create_all(engine) # type: ignore[attr-defined]
130129

131130
def register_source(
@@ -181,7 +180,7 @@ def _save_catalog_info(
181180
incoming_stream_names: set[str],
182181
) -> None:
183182
self._ensure_internal_tables()
184-
engine = self._engine
183+
engine = self._sql_config.get_sql_engine()
185184
with Session(engine) as session:
186185
# Delete and replace existing stream entries from the catalog cache
187186
table_name_entries_to_delete = [
@@ -217,7 +216,7 @@ def _fetch_streams_info(
217216
218217
The `source_name` and `table_prefix` args are optional filters.
219218
"""
220-
engine = self._engine
219+
engine = self._sql_config.get_sql_engine()
221220
with Session(engine) as session:
222221
# load all the streams
223222
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
@@ -25,8 +25,7 @@
2525

2626

2727
if TYPE_CHECKING:
28-
from sqlalchemy.engine import Engine
29-
28+
from airbyte.shared.sql_processor import SqlConfig
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)