Hello everyone!
Currently, dropping indexes consists of the following steps (based on
SchemaAbstractDiscoveryMessage's):
Step 1: Removing the index from the SQL engine and starting
DurableBackgroundCleanupIndexTreeTask, which removes the index trees in the
background;
Step 1.1: DurableBackgroundCleanupIndexTreeTask is added to the metaStorage
and removed after successful completion at the next checkpoint.
Step 2: Removing the index from the cache configuration and persist it.
Problems:
1)We add and immediately delete the index, a checkpoint does not happen and the
node crashes, after restarting DurableBackgroundCleanupIndexTreeTask will not
be able to complete and will periodically restart due to the fact that it saves
DurableBackgroundCleanupIndexTreeTask#rootPages (root pages of index trees)
that have not appeared;
2)After adding a DurableBackgroundCleanupIndexTreeTask node crashes, after
restarting the node, the task will clean the index trees and there will be
errors when using the index;
3)etc.
Suggested solution:
Rename the root index trees and write about this with a logical entry in the
WAL and do this at the first start of DurableBackgroundCleanupIndexTreeTask.
Thus, if we find the renamed root pages in task 1, we can clear the index trees
to the end, otherwise the task can be completed.
Also, if we find that rename pages are present, and the step 2 has not been
completed, then we can start rebuilding the indexes.
WDYT?