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?