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?

Reply via email to