[
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)