Repository navigation
Commit 1af2a12
LAV-4506: Flaky tests: 4 in tests/queries/access_control/test_caller_grants_direct.py +2 more files (Compat tests (shard 3/8)) (#4684)
* LAV-4506: keep container OFFSET anchors stable across DDL retries
Co-authored-by: Sabir Akhadov <sabir.akhadov@localstack.cloud>
## Root causes
The shard-3 artifacts from run 38521189703 show three distinct manifestations
of dependency-DAG / RBAC lock congestion, not a poisoned pool or leaked setting.
- The caller-grants CREATE VIEW timed out at 06:32:36.019 while waiting on
advisory key (6850687, 0), held by backend 9686 in
__snowflake$enter_executable_context_with_namespace_usage. The run was built
at 86e4d2d0, before fdb1398e9 (LAV-4456) registered the pooled context-entry
operations as healthy blockers. That merged fix already handles this exact
cause; retain it rather than duplicate it. Replay the caller file and the
staged procedure-context blocker regression, including the original drop
nodeid, to verify the existing fix.
- The ordinary and mixed DATABASE clones began at 06:34:07.926 and
06:34:13.886, hit the internal DDL lock bound, retried, and completed after
06:35:02. Each retry evaluated statement_timestamp() again, moving OFFSET
=> -30 past the source UPDATE and cloning 11/12 instead of 1/2. Freeze raw
DDL OFFSET's wall-clock base in the transformed AST, so all backend attempts
use the same anchor. Do not use the simulated scheduling clock. Ordinary
gated query anchors still use the executing statement's timestamp.
- The SCHEMA test updated EARLY at 06:34:27.406, then its CREATE TABLE LATE
waited until 06:35:03. Its clone only began at 06:35:03.359, so the fixed
-30 offset already pointed past the UPDATE before its first attempt. Both
affected fixtures now derive a constant integer offset from the recorded
pre-mutation timestamp immediately before cloning, rather than assuming all
post-mutation DDL fits in 30 seconds. Round toward the past, preserving the
fixture's one-second gaps on either side of that timestamp and its constant
arithmetic OFFSET coverage. The original expected results are unchanged.
Add four real-Snowflake snapshot regressions (DATABASE/SCHEMA x AT/BEFORE).
Stage a restricted procedure's context-entry transaction holding the DAG key
while waiting on RBAC, then submit a constant OFFSET clone and hold it through
multiple four-second attempts. Snapshot the exact CALL, clone status, historical
rows, and clone independence. The unfixed production code reproduced the
reported 1/2 -> 11/12 mismatch locally. Wait for the isolated account's live
retention holder before creating the source, so the test never asks for history
older than that account's actual horizon.
Swept both raw-anchor call sites: container cloning and CREATE STREAM seeds
share the frozen base. Replayed the stream OFFSET, TIMESTAMP and STATEMENT seed
contracts; gated query anchors remain execution-relative. No snapshots were
captured from the emulator and no existing assertion was weakened.
## Observed CI failures
### tests/queries/access_control/test_caller_grants_direct.py::test_caller_temporary_shadow_view_lifecycle[drop]@caller_account_grants_empty_database
```
db_execute = <function db_execute.<locals>._execute at 0x7f5d87e5f880>
request = <FixtureRequest for <Function test_caller_temporary_shadow_view_lifecycle[drop]>>
run_snapshot_test = <function run_snapshot_test.<locals>._run at 0x7f5d87e5ee80>
add_cleanup_query = <function add_cleanup_query.<locals>._cleanup at 0x7f5d87e5e5c0>
register_identifier = <function register_identifier.<locals>._register at 0x7f5d87ef93a0>
operation = 'drop'
@pytest.mark.parametrize("operation", ["drop", "replace", "rename"])
@pytest.mark.xdist_group("caller_account_grants")
def test_caller_temporary_shadow_view_lifecycle(
db_execute,
request,
run_snapshot_test,
add_cleanup_query,
register_identifier,
operation,
):
suffix = short_uid().upper()
view, renamed, role = (
f"CG_TEMP_VIEW_{suffix}",
f"CG_MOVED_{suffix}",
f"CG_ROLE_{suffix}",
)
for name in (view, renamed, role):
register_identifier(name, case_insensitive=True)
db_execute(f"CREATE ROLE {role}")
add_cleanup_query(f"DROP ROLE IF EXISTS {role}")
> db_execute(f"CREATE VIEW {view} AS SELECT 7 AS v")
tests/queries/access_control/test_caller_grants_direct.py:423:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/conftest.py:1108: in _execute
cursor.execute(*args, **kwargs)
tests/conftest.py:310: in execute
return original(self, command, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/conftest.py:310: in execute
return original(self, command, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.12/site-packages/snowflake/connector/cursor.py:1142: in execute
Error.errorhandler_wrapper(self.connection, self, error_class, errvalue)
.venv/lib/python3.12/site-packages/snowflake/connector/errors.py:298: in errorhandler_wrapper
handed_over = Error.hand_to_other_handler(
.venv/lib/python3.12/site-packages/snowflake/connector/errors.py:354: in hand_to_other_handler
cursor.errorhandler(connection, cursor, error_class, error_value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
connection = <snowflake.connector.connection.SnowflakeConnection object at 0x7f5d98fe83e0>
cursor = <snowflake.connector.cursor.SnowflakeCursor object at 0x7f5d87e22d50>
error_class = <class 'snowflake.connector.errors.ProgrammingError'>
error_value = {'msg': 'Statement reached its lock timeout and was canceled.', 'errno': 627, 'sqlstate': '57014', 'sfqid': 'e2ffbeec-e355-4e91-a4e1-b9a0fdc65cbb', ...}
@staticmethod
def default_errorhandler(
connection: SnowflakeConnection,
cursor: SnowflakeCursor,
error_class: type[Error],
error_value: dict[str, str],
) -> None:
"""Default error handler that raises an error.
Args:
connection: Connections in which the error happened.
cursor: Cursor in which the error happened.
error_class: Class of error that needs handling.
error_value: A dictionary of the error details.
Raises:
A Snowflake error.
"""
errno = error_value.get("errno")
done_format_msg = error_value.get("done_format_msg")
> raise error_class(
msg=error_value.get("msg"),
errno=None if errno is None else int(errno),
sqlstate=error_value.get("sqlstate"),
sfqid=error_value.get("sfqid"),
query=error_value.get("query"),
done_format_msg=(
None if done_format_msg is None else bool(done_format_msg)
),
connection=connection,
cursor=cursor,
)
E snowflake.connector.errors.ProgrammingError: 000627 (57014): Statement reached its lock timeout and was canceled.
.venv/lib/python3.12/site-packages/snowflake/connector/errors.py:229: ProgrammingError
```
### tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-OFFSET-BEFORE-SCHEMA]
```
>> match key: rows-0
(~) /[0]/[0] 1 → 11 ... (expected → actual)
(~) /[1]/[0] 2 → 12 ... (expected → actual)
>> match key: independent-0
(~) /[0]/[0] 1 → 11 ... (expected → actual)
(~) /[1]/[0] 2 → 12 ... (expected → actual)
```
### tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-AT-ordinary-DATABASE]
```
>> match key: rows
(~) /[0]/[0] 1 → 11 ... (expected → actual)
(~) /[1]/[0] 2 → 12 ... (expected → actual)
```
### tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-AT-mixed-DATABASE]
```
>> match key: rows
(~) /[0]/[0] 1 → 11 ... (expected → actual)
(~) /[1]/[0] 2 → 12 ... (expected → actual)
```
## Deterministic local reproduction before the production fix
make test-compat PYTEST_PATH='tests/queries/ddl/test_container_time_travel.py::test_container_offset_clone_waits_for_procedure_context[AT-DATABASE]' PYTEST_XDIST_ARGS=''
```
>> match key: rows
(~) /[0]/[0] 1 → 11 ... (expected → actual)
(~) /[1]/[0] 2 → 12 ... (expected → actual)
>> match key: independent
(~) /[0]/[0] 1 → 11 ... (expected → actual)
(~) /[1]/[0] 2 → 12 ... (expected → actual)
```
The local emulator log recorded healthy-blocker retries at 07:16:46.869 and
07:16:50.905 while the same statement was waiting for its staged DAG holder.
test_edit_waiver: tests/queries/access_control/test_caller_grants_direct.py, tests/queries/ddl/test_container_time_travel.py, tests/queries/ddl/test_container_clone_hybrid_history.py
## Test matrix
DATABASE x AT x TIMESTAMP x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-TIMESTAMP-AT-DATABASE]
DATABASE x AT x TIMESTAMP x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-TIMESTAMP-AT-DATABASE]
DATABASE x AT x OFFSET x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-OFFSET-AT-DATABASE]
DATABASE x AT x OFFSET x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-OFFSET-AT-DATABASE]
DATABASE x AT x STATEMENT x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-STATEMENT-AT-DATABASE]
DATABASE x AT x STATEMENT x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-STATEMENT-AT-DATABASE]
DATABASE x BEFORE x TIMESTAMP x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-TIMESTAMP-BEFORE-DATABASE]
DATABASE x BEFORE x TIMESTAMP x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-TIMESTAMP-BEFORE-DATABASE]
DATABASE x BEFORE x OFFSET x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-OFFSET-BEFORE-DATABASE]
DATABASE x BEFORE x OFFSET x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-OFFSET-BEFORE-DATABASE]
DATABASE x BEFORE x STATEMENT x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-STATEMENT-BEFORE-DATABASE]
DATABASE x BEFORE x STATEMENT x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-STATEMENT-BEFORE-DATABASE]
SCHEMA x AT x TIMESTAMP x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-TIMESTAMP-AT-SCHEMA]
SCHEMA x AT x TIMESTAMP x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-TIMESTAMP-AT-SCHEMA]
SCHEMA x AT x OFFSET x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-OFFSET-AT-SCHEMA]
SCHEMA x AT x OFFSET x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-OFFSET-AT-SCHEMA]
SCHEMA x AT x STATEMENT x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-STATEMENT-AT-SCHEMA]
SCHEMA x AT x STATEMENT x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-STATEMENT-AT-SCHEMA]
SCHEMA x BEFORE x TIMESTAMP x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-TIMESTAMP-BEFORE-SCHEMA]
SCHEMA x BEFORE x TIMESTAMP x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-TIMESTAMP-BEFORE-SCHEMA]
SCHEMA x BEFORE x OFFSET x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-OFFSET-BEFORE-SCHEMA]
SCHEMA x BEFORE x OFFSET x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-OFFSET-BEFORE-SCHEMA]
SCHEMA x BEFORE x STATEMENT x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-STATEMENT-BEFORE-SCHEMA]
SCHEMA x BEFORE x STATEMENT x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-STATEMENT-BEFORE-SCHEMA]
DATABASE x ordinary source x AT x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-AT-ordinary-DATABASE]
DATABASE x ordinary source x AT x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-AT-ordinary-DATABASE]
DATABASE x ordinary source x AT x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-AT-ordinary-DATABASE]
DATABASE x ordinary source x AT x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-AT-ordinary-DATABASE]
DATABASE x ordinary source x AT x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-AT-ordinary-DATABASE]
DATABASE x ordinary source x AT x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-AT-ordinary-DATABASE]
DATABASE x ordinary source x BEFORE x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-BEFORE-ordinary-DATABASE]
DATABASE x ordinary source x BEFORE x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-BEFORE-ordinary-DATABASE]
DATABASE x ordinary source x BEFORE x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-BEFORE-ordinary-DATABASE]
DATABASE x ordinary source x BEFORE x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-BEFORE-ordinary-DATABASE]
DATABASE x ordinary source x BEFORE x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-BEFORE-ordinary-DATABASE]
DATABASE x ordinary source x BEFORE x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-BEFORE-ordinary-DATABASE]
DATABASE x hybrid source x AT x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-AT-hybrid-DATABASE]
DATABASE x hybrid source x AT x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-AT-hybrid-DATABASE]
DATABASE x hybrid source x AT x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-AT-hybrid-DATABASE]
DATABASE x hybrid source x AT x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-AT-hybrid-DATABASE]
DATABASE x hybrid source x AT x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-AT-hybrid-DATABASE]
DATABASE x hybrid source x AT x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-AT-hybrid-DATABASE]
DATABASE x hybrid source x BEFORE x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-BEFORE-hybrid-DATABASE]
DATABASE x hybrid source x BEFORE x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-BEFORE-hybrid-DATABASE]
DATABASE x hybrid source x BEFORE x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-BEFORE-hybrid-DATABASE]
DATABASE x hybrid source x BEFORE x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-BEFORE-hybrid-DATABASE]
DATABASE x hybrid source x BEFORE x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-BEFORE-hybrid-DATABASE]
DATABASE x hybrid source x BEFORE x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-BEFORE-hybrid-DATABASE]
DATABASE x mixed source x AT x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-AT-mixed-DATABASE]
DATABASE x mixed source x AT x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-AT-mixed-DATABASE]
DATABASE x mixed source x AT x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-AT-mixed-DATABASE]
DATABASE x mixed source x AT x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-AT-mixed-DATABASE]
DATABASE x mixed source x AT x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-AT-mixed-DATABASE]
DATABASE x mixed source x AT x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-AT-mixed-DATABASE]
DATABASE x mixed source x BEFORE x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-BEFORE-mixed-DATABASE]
DATABASE x mixed source x BEFORE x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-BEFORE-mixed-DATABASE]
DATABASE x mixed source x BEFORE x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-BEFORE-mixed-DATABASE]
DATABASE x mixed source x BEFORE x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-BEFORE-mixed-DATABASE]
DATABASE x mixed source x BEFORE x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-BEFORE-mixed-DATABASE]
DATABASE x mixed source x BEFORE x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-BEFORE-mixed-DATABASE]
SCHEMA x ordinary source x AT x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-AT-ordinary-SCHEMA]
SCHEMA x ordinary source x AT x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-AT-ordinary-SCHEMA]
SCHEMA x ordinary source x AT x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-AT-ordinary-SCHEMA]
SCHEMA x ordinary source x AT x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-AT-ordinary-SCHEMA]
SCHEMA x ordinary source x AT x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-AT-ordinary-SCHEMA]
SCHEMA x ordinary source x AT x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-AT-ordinary-SCHEMA]
SCHEMA x ordinary source x BEFORE x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-BEFORE-ordinary-SCHEMA]
SCHEMA x ordinary source x BEFORE x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-BEFORE-ordinary-SCHEMA]
SCHEMA x ordinary source x BEFORE x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-BEFORE-ordinary-SCHEMA]
SCHEMA x ordinary source x BEFORE x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-BEFORE-ordinary-SCHEMA]
SCHEMA x ordinary source x BEFORE x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-BEFORE-ordinary-SCHEMA]
SCHEMA x ordinary source x BEFORE x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-BEFORE-ordinary-SCHEMA]
SCHEMA x hybrid source x AT x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-AT-hybrid-SCHEMA]
SCHEMA x hybrid source x AT x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-AT-hybrid-SCHEMA]
SCHEMA x hybrid source x AT x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-AT-hybrid-SCHEMA]
SCHEMA x hybrid source x AT x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-AT-hybrid-SCHEMA]
SCHEMA x hybrid source x AT x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-AT-hybrid-SCHEMA]
SCHEMA x hybrid source x AT x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-AT-hybrid-SCHEMA]
SCHEMA x hybrid source x BEFORE x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-BEFORE-hybrid-SCHEMA]
SCHEMA x hybrid source x BEFORE x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-BEFORE-hybrid-SCHEMA]
SCHEMA x hybrid source x BEFORE x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-BEFORE-hybrid-SCHEMA]
SCHEMA x hybrid source x BEFORE x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-BEFORE-hybrid-SCHEMA]
SCHEMA x hybrid source x BEFORE x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-BEFORE-hybrid-SCHEMA]
SCHEMA x hybrid source x BEFORE x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-BEFORE-hybrid-SCHEMA]
SCHEMA x mixed source x AT x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-AT-mixed-SCHEMA]
SCHEMA x mixed source x AT x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-AT-mixed-SCHEMA]
SCHEMA x mixed source x AT x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-AT-mixed-SCHEMA]
SCHEMA x mixed source x AT x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-AT-mixed-SCHEMA]
SCHEMA x mixed source x AT x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-AT-mixed-SCHEMA]
SCHEMA x mixed source x AT x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-AT-mixed-SCHEMA]
SCHEMA x mixed source x BEFORE x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-BEFORE-mixed-SCHEMA]
SCHEMA x mixed source x BEFORE x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-BEFORE-mixed-SCHEMA]
SCHEMA x mixed source x BEFORE x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-BEFORE-mixed-SCHEMA]
SCHEMA x mixed source x BEFORE x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-BEFORE-mixed-SCHEMA]
SCHEMA x mixed source x BEFORE x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-BEFORE-mixed-SCHEMA]
SCHEMA x mixed source x BEFORE x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-BEFORE-mixed-SCHEMA]
DATABASE x AT x constant OFFSET x multiple healthy-blocker retries -> tests/queries/ddl/test_container_time_travel.py::test_container_offset_clone_waits_for_procedure_context[AT-DATABASE]
DATABASE x BEFORE x constant OFFSET x multiple healthy-blocker retries -> tests/queries/ddl/test_container_time_travel.py::test_container_offset_clone_waits_for_procedure_context[BEFORE-DATABASE]
DATABASE x unknown anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[unknown-DATABASE]
DATABASE x ddl anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[ddl-DATABASE]
DATABASE x null anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[null-DATABASE]
DATABASE x old anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[old-DATABASE]
SCHEMA x AT x constant OFFSET x multiple healthy-blocker retries -> tests/queries/ddl/test_container_time_travel.py::test_container_offset_clone_waits_for_procedure_context[AT-SCHEMA]
SCHEMA x BEFORE x constant OFFSET x multiple healthy-blocker retries -> tests/queries/ddl/test_container_time_travel.py::test_container_offset_clone_waits_for_procedure_context[BEFORE-SCHEMA]
SCHEMA x unknown anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[unknown-SCHEMA]
SCHEMA x ddl anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[ddl-SCHEMA]
SCHEMA x null anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[null-SCHEMA]
SCHEMA x old anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[old-SCHEMA]
DATABASE/SCHEMA x current OFFSET=0 x retention clause boundary -> tests/queries/ddl/test_container_time_travel.py::test_container_clone_current_anchor_retention_clause
DATABASE/SCHEMA x unanchored clone x retention clause boundary -> tests/queries/ddl/test_container_time_travel.py::test_container_clone_unanchored_retention_clause
DATABASE/SCHEMA x hybrid/retention selection errors and atomic preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_retention_selection
CREATE STREAM x OFFSET=0 seed boundary -> tests/queries/test_streams.py::test_stream_seed_offset_key_deferred
CREATE STREAM x TIMESTAMP seed -> tests/queries/test_streams.py::test_stream_seed_timestamp_key_deferred
CREATE STREAM x STATEMENT seed -> tests/queries/test_streams.py::test_stream_seed_statement_key_deferred
CREATE VIEW x healthy context-entry congestion x temporary-shadow drop -> tests/queries/access_control/test_caller_grants_direct.py::test_caller_temporary_shadow_view_lifecycle[drop]
Temporary-shadow replace/rename x permanent view and caller grants retained -> tests/queries/access_control/test_caller_grants_direct.py::test_caller_temporary_shadow_view_lifecycle
DROP TABLE x registered procedure context-entry blocker x successful retry -> tests/queries/ddl/test_async_stmt_ddl_wait.py::test_drop_waits_for_procedure_context_entry
DDL x registered healthy blocker x successful bounded-attempt retry -> tests/queries/ddl/test_dependent_view_concurrency.py::test_ddl_waiter_behind_in_flight_emulator_statement_retries
DDL x foreign blocker x exact first-bound 000627 error -> tests/queries/ddl/test_dependent_view_concurrency.py::test_ddl_waiter_behind_foreign_blocker_surfaces_000627
## Verification
- make check: passed after the final source and fixture edits, and again before commit.
- Four-worker focused broad replay: 401 passed. Covers both full container
files, the full caller-grants direct file, the existing procedure-context
blocker regression, and stream OFFSET/TIMESTAMP/STATEMENT seed contracts.
- Serial --keep-duplicates replay: 20 passed, five separate executions of
every reported nodeid. No failure reruns were enabled. Duplicate nodeids
collapse under xdist's loadgroup scheduler, so serial execution was used
to verify the actual five repetitions rather than count scheduled items.
- Focused concurrency replay: 11 passed, including all four new staged clone
cases and both healthy/foreign DDL-blocker contracts. A later focused
four-worker replay of the final fixtures also passed all eight selected cases.
- TEST_TARGET=SNOWFLAKE_CLOUD / --snapshot-update / PYTEST_XDIST_ARGS='':
all four new regressions passed and captured the new snapshots. The three
original OFFSET failure cases were also captured with the final constant
elapsed-time offsets: all passed, and their recorded-content matches the
existing snapshots exactly (only capture dates changed).
- An initial broad replay exposed one new-fixture horizon setup race (000707),
corrected by observing the actual retention holder before creating source
data; the final broad replay passed all 401 cases.
- git diff --check: passed. No .spiral/check.sh or slow full-suite gate run;
the driver's post-turn gate remains untouched.
* LAV-4506: make OFFSET fixtures and stored-body anchors deterministic
Stored SQL must defer raw DDL OFFSET bases until CALL, while ordinary DDL
retains the request's frozen base across backend retries. Thread the context
through both raw-anchor consumers and mark reusable procedure statements at
their generic transform_inner call. Anonymous submissions remain request-pinned.
Replace the two separate-query elapsed-time OFFSET estimators with a pending
source UPDATE transaction and a distinct cloning connection. The historical
rows cannot advance while clone submission is delayed. Commit after cloning;
for OFFSET only, create LATE afterward. TIMESTAMP/STATEMENT still exercise
historical exclusion of already-created LATE objects. Existing snapshots and
assertions retain their recorded content.
The four lock-staged regressions now use OFFSET 0 and commit the pending source
mutation after observing an actual clone lock wait. Observe three distinct
(backend pid, query_start) attempts before releasing the context blocker.
Seven-second delays before CALL and clone submission exceed the old six-second
fixture window without changing the expected 1/2 historical rows.
Capture ten stored-body regressions against real Snowflake: DATABASE/SCHEMA
clones and streams on TABLE/VIEW/EXTERNAL TABLE, AT/BEFORE, with committed source
changes after procedure creation and again before repeated invocation. Enable
change tracking before the TABLE/VIEW mutations, and snapshot their exact
post-invocation deltas. External streams recreate their source generation
before each CALL and snapshot the exact created result and source metadata;
REFRESH_ON_CREATE=FALSE needs no uploaded objects or external-service fixture.
Four additional Cloud regressions delay the original OFFSET fixtures' clone
submission by three seconds. Re-capture the four staged cases: only their
recording dates change, never their expected content.
Swept both resolve_raw_anchor consumers and stored/anonymous generic lowering
for definition-time freezing; also fixed table/view/external stream seeds;
gated query anchors remain execution-relative. Swept both waived OFFSET
fixtures and all four staged parameterizations for separate-clock/submission
windows; replaced both estimators and the staged mutation ordering. Swept
container parser terminators: DATABASE consumed its semicolon, whereas SCHEMA
and Iceberg parsing preserve it; fixed DATABASE, leaving EOF behavior intact.
The original caller-grants timeout remains accounted for by merged fdb1398e9,
which registers context-entry pool work as a healthy blocker. No new retry,
skip, xfail, deletion, snapshot weakening, or caller-grants source change.
Co-authored-by: Sabir Akhadov <sabir.akhadov@localstack.cloud>
## Observed failures
The original CI failure (also quoted in ba5ea71a6) was:
snowflake.connector.errors.ProgrammingError: 000627 (57014): Statement reached its lock timeout and was canceled.
Its three clone failures reported rows and independent snapshots as:
(~) /[0]/[0] 1 -> 11 ... (expected -> actual)
(~) /[1]/[0] 2 -> 12 ... (expected -> actual)
Read job 115712028248 and downloaded the still-live shard-3 emulator, PostgreSQL
and traceback artifacts from run 38521189703 before investigating this round.
Disabling only the new stored-body deferral reproduced all eight DATABASE,
SCHEMA, TABLE-stream and VIEW-stream AT/BEFORE snapshot failures. For example:
test_stored_body_offset_anchor_invocation[BEFORE-SCHEMA]
>> match key: rows-0
(~) /[0]/[0] 11 -> 1 ... (expected -> actual)
(~) /[1]/[0] 12 -> 2 ... (expected -> actual)
>> match key: rows-1
(~) /[0]/[0] 21 -> 1 ... (expected -> actual)
(~) /[1]/[0] 22 -> 2 ... (expected -> actual)
make test-compat -k stored_body_offset_anchor_invocation: 8 failed.
Restoring statement_timestamp() for ordinary DDL while retaining stored-body
deferral reproduced all four modified, delayed staged retry regressions:
test_container_offset_clone_waits_for_procedure_context[AT-DATABASE]
>> match key: rows
(~) /[0]/[0] 1 -> 11 ... (expected -> actual)
(~) /[1]/[0] 2 -> 12 ... (expected -> actual)
The independent snapshot has the same mismatch. Focused four-worker replay:
4 failed. Both temporary production reversions were restored afterward.
The DATABASE stored-body tests also exposed a required parser prerequisite:
ProgrammingError: 001003 (42000): SQL compilation error:
syntax error line 1 at position 100 unexpected 'RETURN'.
The database parser had consumed the statement separator before the outer
scripting parser could read it. Preserve that token, like the neighboring
Iceberg parser, and the captured Snowflake procedure parses and executes.
## Deviations
- The hinted generic transform_inner call now lives in render_body_stmt_tail,
not transform_body_stmt_inner. Mark deferred anchors at the actual generic
body-lowering call so stored statements, including nested ones, share it.
- DATABASE stored-body regressions exposed a consumed-semicolon prerequisite.
Fix vendor/sqlparser/src/dialect/snowflake.rs so the outer scripting parser
receives the terminator; the observed RETURN error uniquely determines it.
test_edit_waiver: tests/queries/access_control/test_caller_grants_direct.py, tests/queries/ddl/test_container_time_travel.py, tests/queries/ddl/test_container_clone_hybrid_history.py
## Test matrix
DATABASE x AT x TIMESTAMP x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-TIMESTAMP-AT-DATABASE]
DATABASE x AT x TIMESTAMP x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-TIMESTAMP-AT-DATABASE]
DATABASE x AT x OFFSET x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-OFFSET-AT-DATABASE]
DATABASE x AT x OFFSET x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-OFFSET-AT-DATABASE]
DATABASE x AT x STATEMENT x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-STATEMENT-AT-DATABASE]
DATABASE x AT x STATEMENT x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-STATEMENT-AT-DATABASE]
DATABASE x BEFORE x TIMESTAMP x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-TIMESTAMP-BEFORE-DATABASE]
DATABASE x BEFORE x TIMESTAMP x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-TIMESTAMP-BEFORE-DATABASE]
DATABASE x BEFORE x OFFSET x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-OFFSET-BEFORE-DATABASE]
DATABASE x BEFORE x OFFSET x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-OFFSET-BEFORE-DATABASE]
DATABASE x BEFORE x STATEMENT x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-STATEMENT-BEFORE-DATABASE]
DATABASE x BEFORE x STATEMENT x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-STATEMENT-BEFORE-DATABASE]
SCHEMA x AT x TIMESTAMP x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-TIMESTAMP-AT-SCHEMA]
SCHEMA x AT x TIMESTAMP x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-TIMESTAMP-AT-SCHEMA]
SCHEMA x AT x OFFSET x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-OFFSET-AT-SCHEMA]
SCHEMA x AT x OFFSET x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-OFFSET-AT-SCHEMA]
SCHEMA x AT x STATEMENT x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-STATEMENT-AT-SCHEMA]
SCHEMA x AT x STATEMENT x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-STATEMENT-AT-SCHEMA]
SCHEMA x BEFORE x TIMESTAMP x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-TIMESTAMP-BEFORE-SCHEMA]
SCHEMA x BEFORE x TIMESTAMP x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-TIMESTAMP-BEFORE-SCHEMA]
SCHEMA x BEFORE x OFFSET x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-OFFSET-BEFORE-SCHEMA]
SCHEMA x BEFORE x OFFSET x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-OFFSET-BEFORE-SCHEMA]
SCHEMA x BEFORE x STATEMENT x replace=False x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[False-STATEMENT-BEFORE-SCHEMA]
SCHEMA x BEFORE x STATEMENT x replace=True x historical rows/membership/independence -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone[True-STATEMENT-BEFORE-SCHEMA]
DATABASE x ordinary source x AT x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-AT-ordinary-DATABASE]
DATABASE x ordinary source x AT x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-AT-ordinary-DATABASE]
DATABASE x ordinary source x AT x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-AT-ordinary-DATABASE]
DATABASE x ordinary source x AT x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-AT-ordinary-DATABASE]
DATABASE x ordinary source x AT x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-AT-ordinary-DATABASE]
DATABASE x ordinary source x AT x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-AT-ordinary-DATABASE]
DATABASE x ordinary source x BEFORE x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-BEFORE-ordinary-DATABASE]
DATABASE x ordinary source x BEFORE x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-BEFORE-ordinary-DATABASE]
DATABASE x ordinary source x BEFORE x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-BEFORE-ordinary-DATABASE]
DATABASE x ordinary source x BEFORE x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-BEFORE-ordinary-DATABASE]
DATABASE x ordinary source x BEFORE x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-BEFORE-ordinary-DATABASE]
DATABASE x ordinary source x BEFORE x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-BEFORE-ordinary-DATABASE]
DATABASE x hybrid source x AT x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-AT-hybrid-DATABASE]
DATABASE x hybrid source x AT x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-AT-hybrid-DATABASE]
DATABASE x hybrid source x AT x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-AT-hybrid-DATABASE]
DATABASE x hybrid source x AT x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-AT-hybrid-DATABASE]
DATABASE x hybrid source x AT x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-AT-hybrid-DATABASE]
DATABASE x hybrid source x AT x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-AT-hybrid-DATABASE]
DATABASE x hybrid source x BEFORE x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-BEFORE-hybrid-DATABASE]
DATABASE x hybrid source x BEFORE x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-BEFORE-hybrid-DATABASE]
DATABASE x hybrid source x BEFORE x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-BEFORE-hybrid-DATABASE]
DATABASE x hybrid source x BEFORE x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-BEFORE-hybrid-DATABASE]
DATABASE x hybrid source x BEFORE x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-BEFORE-hybrid-DATABASE]
DATABASE x hybrid source x BEFORE x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-BEFORE-hybrid-DATABASE]
DATABASE x mixed source x AT x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-AT-mixed-DATABASE]
DATABASE x mixed source x AT x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-AT-mixed-DATABASE]
DATABASE x mixed source x AT x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-AT-mixed-DATABASE]
DATABASE x mixed source x AT x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-AT-mixed-DATABASE]
DATABASE x mixed source x AT x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-AT-mixed-DATABASE]
DATABASE x mixed source x AT x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-AT-mixed-DATABASE]
DATABASE x mixed source x BEFORE x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-BEFORE-mixed-DATABASE]
DATABASE x mixed source x BEFORE x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-BEFORE-mixed-DATABASE]
DATABASE x mixed source x BEFORE x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-BEFORE-mixed-DATABASE]
DATABASE x mixed source x BEFORE x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-BEFORE-mixed-DATABASE]
DATABASE x mixed source x BEFORE x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-BEFORE-mixed-DATABASE]
DATABASE x mixed source x BEFORE x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-BEFORE-mixed-DATABASE]
SCHEMA x ordinary source x AT x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-AT-ordinary-SCHEMA]
SCHEMA x ordinary source x AT x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-AT-ordinary-SCHEMA]
SCHEMA x ordinary source x AT x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-AT-ordinary-SCHEMA]
SCHEMA x ordinary source x AT x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-AT-ordinary-SCHEMA]
SCHEMA x ordinary source x AT x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-AT-ordinary-SCHEMA]
SCHEMA x ordinary source x AT x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-AT-ordinary-SCHEMA]
SCHEMA x ordinary source x BEFORE x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-BEFORE-ordinary-SCHEMA]
SCHEMA x ordinary source x BEFORE x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-BEFORE-ordinary-SCHEMA]
SCHEMA x ordinary source x BEFORE x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-BEFORE-ordinary-SCHEMA]
SCHEMA x ordinary source x BEFORE x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-BEFORE-ordinary-SCHEMA]
SCHEMA x ordinary source x BEFORE x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-BEFORE-ordinary-SCHEMA]
SCHEMA x ordinary source x BEFORE x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-BEFORE-ordinary-SCHEMA]
SCHEMA x hybrid source x AT x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-AT-hybrid-SCHEMA]
SCHEMA x hybrid source x AT x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-AT-hybrid-SCHEMA]
SCHEMA x hybrid source x AT x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-AT-hybrid-SCHEMA]
SCHEMA x hybrid source x AT x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-AT-hybrid-SCHEMA]
SCHEMA x hybrid source x AT x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-AT-hybrid-SCHEMA]
SCHEMA x hybrid source x AT x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-AT-hybrid-SCHEMA]
SCHEMA x hybrid source x BEFORE x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-BEFORE-hybrid-SCHEMA]
SCHEMA x hybrid source x BEFORE x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-BEFORE-hybrid-SCHEMA]
SCHEMA x hybrid source x BEFORE x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-BEFORE-hybrid-SCHEMA]
SCHEMA x hybrid source x BEFORE x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-BEFORE-hybrid-SCHEMA]
SCHEMA x hybrid source x BEFORE x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-BEFORE-hybrid-SCHEMA]
SCHEMA x hybrid source x BEFORE x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-BEFORE-hybrid-SCHEMA]
SCHEMA x mixed source x AT x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-AT-mixed-SCHEMA]
SCHEMA x mixed source x AT x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-AT-mixed-SCHEMA]
SCHEMA x mixed source x AT x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-AT-mixed-SCHEMA]
SCHEMA x mixed source x AT x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-AT-mixed-SCHEMA]
SCHEMA x mixed source x AT x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-AT-mixed-SCHEMA]
SCHEMA x mixed source x AT x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-AT-mixed-SCHEMA]
SCHEMA x mixed source x BEFORE x TIMESTAMP x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-TIMESTAMP-BEFORE-mixed-SCHEMA]
SCHEMA x mixed source x BEFORE x TIMESTAMP x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-TIMESTAMP-BEFORE-mixed-SCHEMA]
SCHEMA x mixed source x BEFORE x OFFSET x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-OFFSET-BEFORE-mixed-SCHEMA]
SCHEMA x mixed source x BEFORE x OFFSET x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-OFFSET-BEFORE-mixed-SCHEMA]
SCHEMA x mixed source x BEFORE x STATEMENT x ignore_hybrid=False x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[False-STATEMENT-BEFORE-mixed-SCHEMA]
SCHEMA x mixed source x BEFORE x STATEMENT x ignore_hybrid=True x recorded success/error and target preservation -> tests/queries/ddl/test_container_clone_hybrid_history.py::test_container_hybrid_history[True-STATEMENT-BEFORE-mixed-SCHEMA]
DATABASE x AT x constant OFFSET x multiple healthy-blocker retries -> tests/queries/ddl/test_container_time_travel.py::test_container_offset_clone_waits_for_procedure_context[AT-DATABASE]
DATABASE x BEFORE x constant OFFSET x multiple healthy-blocker retries -> tests/queries/ddl/test_container_time_travel.py::test_container_offset_clone_waits_for_procedure_context[BEFORE-DATABASE]
DATABASE x unknown anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[unknown-DATABASE]
DATABASE x ddl anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[ddl-DATABASE]
DATABASE x null anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[null-DATABASE]
DATABASE x old anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[old-DATABASE]
SCHEMA x AT x constant OFFSET x multiple healthy-blocker retries -> tests/queries/ddl/test_container_time_travel.py::test_container_offset_clone_waits_for_procedure_context[AT-SCHEMA]
SCHEMA x BEFORE x constant OFFSET x multiple healthy-blocker retries -> tests/queries/ddl/test_container_time_travel.py::test_container_offset_clone_waits_for_procedure_context[BEFORE-SCHEMA]
SCHEMA x unknown anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[unknown-SCHEMA]
SCHEMA x ddl anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[ddl-SCHEMA]
SCHEMA x null anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[null-SCHEMA]
SCHEMA x old anchor error x exact recorded rejection -> tests/queries/ddl/test_container_time_travel.py::test_container_historical_clone_error[ol…1 parent 22f9365 commit 1af2a12
1 file changed
Lines changed: 5 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3512 | 3512 | | |
3513 | 3513 | | |
3514 | 3514 | | |
3515 | | - | |
| 3515 | + | |
| 3516 | + | |
| 3517 | + | |
| 3518 | + | |
| 3519 | + | |
3516 | 3520 | | |
3517 | 3521 | | |
3518 | 3522 | | |
| |||
0 commit comments