Skip to content

UpdateTimeToLive and DescribeTimeToLive during a table's DELETING window answer differently from DynamoDB #552

Open

Description

@LeeroyHannigan

Summary

During a table's DELETING window the service serves UpdateTimeToLive and refuses DescribeTimeToLive with its own sentence; ExtendDB does the opposite.

Request during DELETING Service (measured 2026-10-25) ExtendDB (PostgreSQL and MongoDB measured; main 744ea29 and #550)
UpdateTimeToLive enable 200 {Enabled: true, AttributeName: ttl} 400 ResourceInUseException Table <name> is not in ACTIVE state
DescribeTimeToLive 400 ValidationException Cannot describe time to live while table is in DELETING state: Current table state is DELETING 200 {TimeToLiveStatus: DISABLED}

Cause

crates/engine/src/ttl.rs and the backends' TTL paths require ACTIVE for the update and do not check the status for the describe. #550 adds the TableBeingDeleted arm to the TTL error mapper, so a backend that returns the variant renders the DELETING sentence; none does yet.

Fix shape

Serve UpdateTimeToLive on a DELETING row (the write is to the catalog row, which goes with the table) and refuse DescribeTimeToLive with the measured sentence. Two dual-target wire rows on the held-window fixture.

Found while reviewing #505.

Activity

  1. LeeroyHannigan commented on Oct 25, 2026

    @LeeroyHannigan
    CollaboratorAuthor

    Repeated the two rows on 2026-10-25, three rounds, each call issued while DescribeTable read DELETING (the status is checked right before every call and the row is skipped otherwise; none was skipped). Added the follow-on calls a fix has to answer.

    Call during DELETING Round 1 and 2 (TTL never enabled) Round 3 (TTL ENABLED on ttl before the delete)
    DescribeTimeToLive 400 ValidationException Cannot describe time to live while table is in DELETING state: Current table state is DELETING same
    UpdateTimeToLive enable ttl 200 {TimeToLiveSpecification: {Enabled: true, AttributeName: ttl}} 400 ValidationException TimeToLive is already enabled
    DescribeTimeToLive after the enable the DELETING sentence again same
    UpdateTimeToLive disable ttl right after 400 ValidationException Time to live has been modified multiple times within a fixed interval same
    UpdateTimeToLive enable expires 400 ValidationException TimeToLive is active on a different AttributeName: current AttributeName is ttl same

    So during the window UpdateTimeToLive runs its ordinary rules against the catalog row (the enable persists within the window: the disable is rate limited and the other attribute is refused as a conflict), and only DescribeTimeToLive has a DELETING sentence. The fix serves UpdateTimeToLive on a DELETING row with the same rules as on an ACTIVE one and refuses DescribeTimeToLive with the sentence above.

    The window on the service was 3 to 5 s in these rounds; every row was measured inside it, and the table read ResourceNotFoundException afterwards.

  2. added this to the 1.0 milestone on Oct 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions