Description
Sql layer can raise transaction implicitly if no explicit is supplied, tx.(rollback|commit) methods for appropriate implicit tx may be untouched due to bug.
Check
SqlQueryProcessor#querySingle0
the only call for implicit tx.
For now there are huge number of tests (for example ItSqlAsynchronousApiTest#implicitTransactionsStates) that use reflection for detection transaction completeness. This is erroneous way. So required test only functionality that can shows call difference between TxManager.begin(boolean) and Transaction.(commit|rollback).
Another words: required functionality that detects that no transactions without Transaction.(commit|rollback) call are present in appropriate TxManager.
Pseudo code, as i can see it
TxManager txManagerInstance = ... (so this is a questionable how can we get it without reflection) tx = txManagerInstance.begin(RW or RO); ... some code, probably sql corner cases... call_sql_operation_with_EXPLICIT_tx(tx, ...); tx.commit(); call_sql_operation_with_IMPLICIT_tx(null, ...); (tx will burn and finalize internally) .... assertTrue(txManagerInstance.no_transactions_without_commit_or_rollback_call())
Attachments
Issue Links
- blocks
-
IGNITE-19916 TX SQL tests refactoring with the help of @TestOnly IgniteImpl#txManager and TxManager#pending
- Resolved
- links to