By default non-mvcc transactions don't log their states in WAL log, so tx rollbacks without hanging as there is nothing to save to WAL or PageMemory.
So, it may be helpful to check case for non-mvcc tx with txState WAL-logging enabled at first.
When StorageException occurs during any mvcc tx operation enabled, then storage locks become blocked. Then Ignite try to rollback Tx due to the error and try to save txState into WAL and TxLog and hangs forever. A thread hangs awaiting uninterruptibly for next WAL segment or lock released.
Failure handler tries to stop a node and hangs as well.
Looks like we shouldn't wait if kernal context become invalid.
Good startpoint is IgniteWalFlush* tests.