[ 
https://issues.apache.org/jira/browse/IGNITE-25286?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18002685#comment-18002685
 ] 

Roman Puchkovskiy commented on IGNITE-25286:
--------------------------------------------

Terminology change: in PR, it's 'schema safe time' instead of 'catalog safe 
time' used in the ticket description.

> Only concern Catalog updates application for Schema sync
> --------------------------------------------------------
>
>                 Key: IGNITE-25286
>                 URL: https://issues.apache.org/jira/browse/IGNITE-25286
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Roman Puchkovskiy
>            Assignee: Roman Puchkovskiy
>            Priority: Major
>              Labels: ignite-3
>
> Currently, schema sync mechanism makes sure that AppliedMetastoreSafeTime 
> >=(operationTs - DD) for each operation (including KV operations and SQL).
> AppliedMetastoreSafeTime is updated when the corresponding Metastore command 
> is both applied to the Metastore storage and all watch listeners fully 
> handled the revision corresponding to the command. Some watch listeners 
> perform long actions (like creating storages (this involves I/O) and starting 
> replicas (involves I/O and time to elect a leader); as a result, 
> read/write/SQL operations might be held by these long operations.
> Schema sync mechanism actually only concerns Catalog updates (as the Catalog 
> stores schemas to sync on); this mechanism was implemented to make sure that, 
> when processing a transactional operation, we don't miss a schema update 
> relevant to this operation. Schemas are rarely updated. If we only concern 
> safe time of Catalog updates, long-running actions like storage creation and 
> replica starts will not affect transactional operations.
> We could do the following:
>  # Introduce another tracker called Catalog safe time
>  # Inside WatchProcessor, have a chained future called 
> catalogSafeTimeUpdateFuture
>  # When notifying the WatchProcessor about a Metastore command (including 
> Metastore Idle Safe Time command):
>  ## If the command is a Catalog update, then, after reassigning 
> notificationFuture, do catalogSafeTimeUpdateFuture = 
> catalogSafeTimeUpdateFuture.thenCompose(v -> notificationFuture)
>  ## Do catalogSafeTimeUpdateFuture = catalogSafeTimeUpdateFuture.thenRun(() 
> -> <update Catalog safe time with the command safe time>)
>  # In SchemaSyncServiceImpl, use Catalog safe time tracker instead of raw 
> Metastore safe time tracker
>  # Make sure that everywhere we use SchemaSyncService, we are actually only 
> concerned about Catalog updates. If there are places where we are concerned 
> about other Metastore updates, we should introduce another service/method 
> that would still use the original Metastore safe time tracker
> Note that item 3.2, for non-Catalog updates, we update the Catalog safe time 
> tracker with a safe time value that could not yet be handled by the Watch 
> listeners. This will allow the schema sync mechanism to ignore delays 
> introduced by listeners not related to Catalog updates.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to