Skip to content

TimeCast: don't block mediator time for tablets without transactions #6512

@snaury

Description

@snaury

Related to #6030.

We currently have a problem where one tablet in a timecast bucket may block mediator time for all other tablets in the same bucket. We need a way to solve this problem with backwards compatible protocol. Here's how we could solve this:

  • Add a new granular watch protocol (TEvMediatorTimecast::TEvGranularWatch) with a list of tablets that timecast service is watching. Unlike previous watch protocol it will always return the latest step, while also tracking frozen steps for tablets we subscribed to.
  • Add a TEvGranularWatchModify message which would allow adding and removing tablets with an updated seqno
  • When mediator supports the new protocol it will send TEvGranularWatchUpdate messages with the latest known step, freezes for tablets that have pending unacknowledged transactions and unfreezes for tablets that join the common time stream.

Timecast service will use the two atomic variables approach with freeze/unfreeze to advance tablet time. It will also subscribe to both the old and new watch protocol, using the old protocol to advance time for all tablets simultaneously, and granular protocol for more specific updates when available. Special care will be needed when connection to mediator switches between versions of the old and new protocol, the conflicting information will need to be synchronized somehow.

Metadata

Metadata

Assignees

Labels

area/datashardIssues related to datashard tablets (relational table partitions)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions