tx: exclude sysview engine from transaction control
Sysview is a special engine that is used for filtering out objects that a user can't access due to lack of privileges. Since it's treated as a separate engine by the transaction manager, we can't query sysview spaces from a memtx/vinyl transaction. In particular, if called from a transaction space:format() will return error: A multi-statement transaction can not use multiple storage engines which is inconvenient. To fix this, let's mark sysview engine with a new ENGINE_BYPASS_TX flag and make the transaction manager skip binding a transaction to an engine in case this flag is set. Closes #3528
Showing
- src/box/engine.h 12 additions, 0 deletionssrc/box/engine.h
- src/box/sysview.c 1 addition, 0 deletionssrc/box/sysview.c
- src/box/txn.c 5 additions, 4 deletionssrc/box/txn.c
- src/box/txn.h 0 additions, 1 deletionsrc/box/txn.h
- test/box/on_replace.result 6 additions, 6 deletionstest/box/on_replace.result
- test/box/transaction.result 34 additions, 3 deletionstest/box/transaction.result
- test/box/transaction.test.lua 16 additions, 0 deletionstest/box/transaction.test.lua
Loading
Please register or sign in to comment