[ 
https://issues.apache.org/jira/browse/IGNITE-22500?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Roman Puchkovskiy updated IGNITE-22500:
---------------------------------------
    Description: 
When creating an index with current defaults (DelayDuration=1sec, 
MaxClockSkew=500ms, IdleSafeTimePropagationPeriod=1sec), it takes 6-6.5 seconds 
on my machine (without concurrent transactions, on an empty table that was just 
created).

According to the design, we need to first wait for the REGISTERED state to 
activate on all nodes, including the ones that are currently down; this is to 
make sure that all transactions started on schema versions before the index 
creation have finished before we start to build the index (this makes us 
waiting for DelayDuration+MaxClockSkew). Then, after the build finishes, we 
switch the index to the AVAILABLE state. This requires another wait of 
DelayDuration+MaxClockSkew.

Because of IGNITE-20378, in the second case we actually wait longer (for 
additional IdleSafeTimePropagationPeriod+MaxClockSkew).

The total of waits is thus 1.5+3=4.5sec. But index creation actually takes 
6-6.5 seconds. It looks like there are some additional delays (like submitting 
to the Metastorage and executing its watches).

  was:
ChangeIndexStatusTask#start() (executed when switching an index status from 
REGISTERED to BUILDING) calls awaitCatalogVersionActivation() which does not 
seem to be needed (we need to wait for REGISTERED to be activated on all 
primaries of the table, but this will be reached anyway in 
awaitFinishRwTxsBeforeCatalogVersion(), but faster).

Actually, we could do the following:
 # Still call awaitCatalogVersionActivation(), but instead of using 
cluster-wide ensured activation ts, just wait for the bare activationTimestamp
 # Then call awaitFinishRwTxsBeforeCatalogVersion() (this will anyway make sure 
that the version activates on the recipient node, but less polling will be 
needed)

Also, we need to make sure we don't wait for intermediate statuses (like 
BUILDING) activation.


> Remove unnecessary waits when creating an index
> -----------------------------------------------
>
>                 Key: IGNITE-22500
>                 URL: https://issues.apache.org/jira/browse/IGNITE-22500
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Roman Puchkovskiy
>            Priority: Major
>              Labels: ignite-3
>
> When creating an index with current defaults (DelayDuration=1sec, 
> MaxClockSkew=500ms, IdleSafeTimePropagationPeriod=1sec), it takes 6-6.5 
> seconds on my machine (without concurrent transactions, on an empty table 
> that was just created).
> According to the design, we need to first wait for the REGISTERED state to 
> activate on all nodes, including the ones that are currently down; this is to 
> make sure that all transactions started on schema versions before the index 
> creation have finished before we start to build the index (this makes us 
> waiting for DelayDuration+MaxClockSkew). Then, after the build finishes, we 
> switch the index to the AVAILABLE state. This requires another wait of 
> DelayDuration+MaxClockSkew.
> Because of IGNITE-20378, in the second case we actually wait longer (for 
> additional IdleSafeTimePropagationPeriod+MaxClockSkew).
> The total of waits is thus 1.5+3=4.5sec. But index creation actually takes 
> 6-6.5 seconds. It looks like there are some additional delays (like 
> submitting to the Metastorage and executing its watches).



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

Reply via email to