vinyl: refactor index recovery from vylog
We have vy_recovery_lookup_index() function to look up an index in a recovery context by id and vy_recovery_iterate_index() to iterate over ranges, runs, and slices of a found index. vy_recovery_lookup_index() used to be a part of vy_recovery_iterate_index() and was factored out when index logging was moved to be called after WAL write, from vy_index_commit_create(), because during recovery we need to check if an index creation record was flushed to vylog before restart - currently we do it by trying to look it up in the recovery context. To stop using index lsn as vylog index id and remove lsn from index options, I'm planning to make the function loading an index from vylog advance an internal vylog counter so that the next time it is called it loads a newer incarnation of the same index. vy_recovery_lookup_index() doesn't fit this concept. So I introduce vy_recovery_load_index() that calls vy_recovery_lookup_index() and vy_recovery_iterate_index() internally and make the two functions private to vylog. To deal with indexes not logged due to vylog errors, I introduce a per index flag, vy_index->is_committed, which is set if the index record was flushed to vylog - the same approach is already used to handle index drop (see vy_index_commit_drop()).
Showing
- src/box/vinyl.c 3 additions, 2 deletionssrc/box/vinyl.c
- src/box/vy_index.c 28 additions, 19 deletionssrc/box/vy_index.c
- src/box/vy_index.h 5 additions, 0 deletionssrc/box/vy_index.h
- src/box/vy_log.c 13 additions, 2 deletionssrc/box/vy_log.c
- src/box/vy_log.h 18 additions, 29 deletionssrc/box/vy_log.h
Loading
Please register or sign in to comment