Andrey Mashenkov created IGNITE-25663:
-----------------------------------------
Summary: Sql. Table statistic calculation may never ends.
Key: IGNITE-25663
URL: https://issues.apache.org/jira/browse/IGNITE-25663
Project: Ignite
Issue Type: Bug
Components: sql ai3
Reporter: Andrey Mashenkov
Motivation.
Shortly, it's possible a task, which calculates statistic, may never save a
results and fall into infinity retry.
Technical details.
Every access to table statistics, tries to trigger a task for calculating
statistics if the statistics values is older than a threshold
`thresholdTimeToPostponeUpdateMs`.
Firstly, the task replaces a holder object in the tableSizeMap with the current
timestamp, then start calculations that finally should lead to publish actual
data to this holder.
However, if calculations takes more time than the threshold, one may update the
holder with the newer timestamp. This leads to the previous task will drop the
result after completion, because of observing unexpectedly recent timestamp in
the holder.
Possible solution.
Let's introduce an `outdated` flag into a placeholder. The flag is raised, when
a thread triggers calculations, and flag is removed, iff calculations are done
and timestamp is expected.
With the flag we can ensure only one thread do calculations.
We should NOT trigger calculation in-place, when see the flag raised (means
other thread do calculations), but update the timestamp. After calculation
done, we should write the result (to guarantee the progress) and either drop
the flag or restart calculations regarding the timestamp.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)