rdbms: enforce and improve LBFactory/LoadBalancer callback handling
- Handle the case where an onTransaction* callback for one handle adds more onTransaction* callbacks to a different handle. Instead of supporting only a short chain of such callbacks, try to resolve the whole chain by using a loop in LoadBalancer and LBFactory.
- Add sanity checks to enforce the proper call order of LoadBalancer transaction methods, such as those that execute callbacks. This is the order that LBFactory already uses. Use ROUND_ERROR for problems that can ruin the instance state. Such problems require rollback.
- Correct setTrxEndCallbackSuppression() calls in beginMasterChanges() that were making tests fail.
- Make Database handle callback suppression for FLUSHING_ALL_PEERS instead of making LoadBalancer/LBFactory have to manage it.
- Simplify finalizeMasterChanges() given that suppression does not actually effect runOnTransactionPreCommitCallbacks().
- Make dangling callback warning in Database::close work properly.
- Actually use $fname in flushReplicaSnapshots().
- Use DBTransactionError instead of DBExpectedError in some places where stages fail.
- Fix failing testGetScopedLock() unit tests so everything passes.
Add more comments to setTransactionListener and onTransactionIdle.