An error occurred while fetching folder content.
Vladimir Davydov
authored
This patch implements space_vtab::build_index callback for vinyl spaces. Now instead of returning an error in case the space is not empty, the callback will actually try to build a new index. The build procedure consists of four steps: 1. Prepare the LSM tree for building. This implies writing a special record to vylog, VY_LOG_PREPARE_LSM, and adding the new index to the vinyl scheduler so that it can be dumped during build. We need to log the new LSM tree so that we can keep track of run files created for it during build and remove them if build procedure fails. 2. Inserting tuples stored in the space into the new LSM tree. Since there may concurrent DML requests, we install a trigger to forward them to the new index. 3. Dumping the index to disk so that we don't have to rebuild it after recovery. 4. Committing the new LSM tree in vylog (VY_LOG_CREATE_LSM). Steps 1-3 are done from the space_vtab::build_index callback while step 4 is done after WAL write, from index_vtab::commit_create. While step 3 is being performed, new DML requests may be executed for the altered space. Those requests will be reflected in the new index thanks to the on_replace trigger, however they won't be recovered during WAL recovery as they will appear in WAL before the ALTER record that created the index. To recover them, we replay all statements stored in the primary key's memory level when replaying the ALTER record during WAL recovery. Closes #1653
Name | Last commit | Last update |
---|