Skip to content

Commit a5bb6f1

Browse files
committed
perf: skip rebuilding graphs, explicit gc coll in a few spots, watcher writes manifest changes
1 parent da14e9a commit a5bb6f1

File tree

4 files changed

+13
-9
lines changed

4 files changed

+13
-9
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "dbt-core-interface"
3-
version = "1.1.3"
3+
version = "1.1.4"
44
dynamic = []
55
description = "Dbt Core Interface"
66
authors = [

src/dbt_core_interface/project.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import atexit
88
import contextlib
99
import functools
10+
import gc
1011
import json
1112
import logging
1213
import os
@@ -343,7 +344,7 @@ def args(self, value: DbtConfiguration | dict[str, t.Any]) -> None: # pyright:
343344
if isinstance(value, dict):
344345
value = dc_replace(self._args, **value)
345346
set_from_args(value, None) # pyright: ignore[reportArgumentType]
346-
self.parse_project(reparse_configuration=True)
347+
self.parse_project(write_manifest=True, reparse_configuration=True)
347348
self._args = value
348349

349350
def set_args(self, **kwargs: t.Any) -> None:
@@ -500,17 +501,18 @@ def parse_project(
500501
self.__manifest_loader.build_manifest_state_check()
501502
)
502503
self._manifest = self.__manifest_loader.saved_manifest = self.__manifest_loader.load()
503-
self._manifest.build_flat_graph()
504-
self._manifest.build_parent_and_child_maps()
505-
self._manifest.build_group_map()
504+
if not self.__manifest_loader.skip_parsing:
505+
self._manifest.build_flat_graph()
506+
self._manifest.build_group_map()
506507

507508
self._sql_parser = None
508509
self._macro_parser = None
509510

510511
self.__manifest_loader.save_macros_to_adapter(self.adapter)
511512
self.__compilation_cache.clear()
512513

513-
if write_manifest:
514+
_ = gc.collect()
515+
if write_manifest and not self.__manifest_loader.skip_parsing:
514516
self.write_manifest()
515517

516518
logger.info(f"Parsed project: {self.project_name}")
@@ -684,7 +686,7 @@ def relation_exists(self, database: str, schema: str, name: str) -> bool:
684686
def write_manifest(self, path: Path | str | None = None) -> None:
685687
"""Write manifest to disk."""
686688
if path is None:
687-
path = self.project_root / "target" / "manifest.json"
689+
path = self.target_path / "manifest.json"
688690
else:
689691
path = Path(path)
690692
if not path.is_absolute():
@@ -1006,6 +1008,8 @@ def inject_deferred_state(self, state_path: Path | str) -> None:
10061008
logger.warning(f"No manifest found in previous state at {state_path}")
10071009
return
10081010
self.manifest.merge_from_artifact(previous_state.manifest)
1011+
del previous_state
1012+
_ = gc.collect()
10091013

10101014
def clear_deferred_state(self) -> None:
10111015
"""Clear the deferred state from the manifest."""

src/dbt_core_interface/watcher.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def _monitor_loop(self) -> None:
116116
change_level = self._check_for_changes()
117117
if change_level:
118118
self._project.parse_project(
119-
write_manifest=False, reparse_configuration=change_level > 1
119+
write_manifest=True, reparse_configuration=change_level > 1
120120
)
121121
except Exception as e:
122122
logger.error(f"Error in project watcher loop: {e}")

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)