Skip to content

Commit c6844d6

Browse files
committed
extend unrestorable criteria
1 parent 02a22f3 commit c6844d6

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

sqlmesh/core/state_sync/db/snapshot.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,9 @@ def unpause_snapshots(
173173
snapshot.set_unpaused_ts(None)
174174
paused_snapshots.append(snapshot.snapshot_id)
175175

176-
if (
177-
not snapshot.is_forward_only
178-
and target_snapshot.is_forward_only
179-
and not snapshot.unrestorable
176+
if not snapshot.unrestorable and (
177+
(target_snapshot.is_forward_only and not snapshot.is_forward_only)
178+
or (snapshot.is_forward_only and not target_snapshot.is_forward_only)
180179
):
181180
logger.info("Marking snapshot %s as unrestorable", snapshot.snapshot_id)
182181
snapshot.unrestorable = True

tests/core/state_sync/test_state_sync.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1996,6 +1996,47 @@ def test_unrestorable_snapshot(state_sync: EngineAdapterStateSync, make_snapshot
19961996
assert not actual_snapshots[new_forward_only_snapshot.snapshot_id].unrestorable
19971997

19981998

1999+
def test_unrestorable_snapshot_target_not_forward_only(
2000+
state_sync: EngineAdapterStateSync, make_snapshot: t.Callable
2001+
):
2002+
snapshot = make_snapshot(
2003+
SqlModel(
2004+
name="test_snapshot",
2005+
query=parse_one("select 1, ds"),
2006+
cron="@daily",
2007+
),
2008+
)
2009+
snapshot.categorize_as(SnapshotChangeCategory.BREAKING, forward_only=True)
2010+
snapshot.version = "a"
2011+
2012+
assert not snapshot.unpaused_ts
2013+
state_sync.push_snapshots([snapshot])
2014+
2015+
unpaused_dt = "2022-01-01"
2016+
state_sync.unpause_snapshots([snapshot], unpaused_dt)
2017+
2018+
actual_snapshot = state_sync.get_snapshots([snapshot])[snapshot.snapshot_id]
2019+
assert actual_snapshot.unpaused_ts
2020+
assert actual_snapshot.unpaused_ts == to_timestamp(unpaused_dt)
2021+
2022+
updated_snapshot = make_snapshot(
2023+
SqlModel(name="test_snapshot", query=parse_one("select 2, ds"), cron="@daily")
2024+
)
2025+
updated_snapshot.categorize_as(SnapshotChangeCategory.BREAKING, forward_only=False)
2026+
updated_snapshot.version = "a"
2027+
2028+
assert not updated_snapshot.unpaused_ts
2029+
state_sync.push_snapshots([updated_snapshot])
2030+
state_sync.unpause_snapshots([updated_snapshot], unpaused_dt)
2031+
2032+
actual_snapshots = state_sync.get_snapshots([snapshot, updated_snapshot])
2033+
assert not actual_snapshots[snapshot.snapshot_id].unpaused_ts
2034+
assert actual_snapshots[updated_snapshot.snapshot_id].unpaused_ts == to_timestamp(unpaused_dt)
2035+
2036+
assert actual_snapshots[snapshot.snapshot_id].unrestorable
2037+
assert not actual_snapshots[updated_snapshot.snapshot_id].unrestorable
2038+
2039+
19992040
def test_unpause_snapshots_remove_intervals(
20002041
state_sync: EngineAdapterStateSync, make_snapshot: t.Callable
20012042
):

0 commit comments

Comments
 (0)