Skip to content

Commit 874cf87

Browse files
authored
Fix: Update updated_ts for all demoted snapshtos and not just the ones representing removed models (#1595)
1 parent bd0ee9f commit 874cf87

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

sqlmesh/core/state_sync/common.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,11 @@ def promote(self, environment: Environment, no_gaps: bool = False) -> PromotionR
133133
table_info.name: table_info
134134
for table_info in existing_environment.promoted_snapshots
135135
}
136+
137+
demoted_snapshots = set(existing_environment.snapshots) - set(environment.snapshots)
138+
for demoted_snapshot in self._get_snapshots(demoted_snapshots).values():
139+
# Update the updated_at attribute.
140+
self._update_snapshot(demoted_snapshot)
136141
else:
137142
existing_table_infos = {}
138143

@@ -156,10 +161,6 @@ def promote(self, environment: Environment, no_gaps: bool = False) -> PromotionR
156161
if environment_suffix_target_changed
157162
else [existing_table_infos[name] for name in missing_models]
158163
)
159-
if removed and not environment_suffix_target_changed:
160-
for removed_snapshot in self._get_snapshots(removed).values():
161-
# Update the updated_at attribute.
162-
self._update_snapshot(removed_snapshot)
163164

164165
return PromotionResult(
165166
added=sorted(table_infos),

tests/core/test_state_sync.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,16 @@ def test_promote_snapshots(state_sync: EngineAdapterStateSync, make_snapshot: t.
411411
)
412412
snapshot_a.categorize_as(SnapshotChangeCategory.BREAKING)
413413

414+
snapshot_b_old = make_snapshot(
415+
SqlModel(
416+
name="b",
417+
kind=FullKind(),
418+
query=parse_one("select 2 from a"),
419+
),
420+
nodes={"a": snapshot_a.model},
421+
)
422+
snapshot_b_old.categorize_as(SnapshotChangeCategory.BREAKING)
423+
414424
snapshot_b = make_snapshot(
415425
SqlModel(
416426
name="b",
@@ -435,28 +445,29 @@ def test_promote_snapshots(state_sync: EngineAdapterStateSync, make_snapshot: t.
435445
):
436446
promote_snapshots(state_sync, [snapshot_a], "prod")
437447

438-
state_sync.push_snapshots([snapshot_a, snapshot_b, snapshot_c])
448+
state_sync.push_snapshots([snapshot_a, snapshot_b_old, snapshot_b, snapshot_c])
439449

440-
promotion_result = promote_snapshots(state_sync, [snapshot_a, snapshot_b], "prod")
450+
promotion_result = promote_snapshots(state_sync, [snapshot_a, snapshot_b_old], "prod")
441451

442-
assert set(promotion_result.added) == set([snapshot_a.table_info, snapshot_b.table_info])
452+
assert set(promotion_result.added) == set([snapshot_a.table_info, snapshot_b_old.table_info])
443453
assert not promotion_result.removed
444454
assert not promotion_result.removed_environment_naming_info
445455
promotion_result = promote_snapshots(
446456
state_sync,
447-
[snapshot_a, snapshot_b, snapshot_c],
457+
[snapshot_a, snapshot_b_old, snapshot_c],
448458
"prod",
449459
)
450460
assert set(promotion_result.added) == set(
451461
[
452462
snapshot_a.table_info,
453-
snapshot_b.table_info,
463+
snapshot_b_old.table_info,
454464
snapshot_c.table_info,
455465
]
456466
)
457467
assert not promotion_result.removed
458468
assert not promotion_result.removed_environment_naming_info
459469

470+
prev_snapshot_b_old_updated_ts = snapshot_b_old.updated_ts
460471
prev_snapshot_c_updated_ts = snapshot_c.updated_ts
461472

462473
promotion_result = promote_snapshots(
@@ -472,6 +483,10 @@ def test_promote_snapshots(state_sync: EngineAdapterStateSync, make_snapshot: t.
472483
state_sync.get_snapshots([snapshot_c])[snapshot_c.snapshot_id].updated_ts
473484
> prev_snapshot_c_updated_ts
474485
)
486+
assert (
487+
state_sync.get_snapshots([snapshot_b_old])[snapshot_b_old.snapshot_id].updated_ts
488+
> prev_snapshot_b_old_updated_ts
489+
)
475490

476491
snapshot_d = make_snapshot(
477492
SqlModel(

0 commit comments

Comments
 (0)