For master connections, LoadBalancer unconditionally replaces the
connection’s read-only mode with the load balancer’s, so if we don’t
include the read-only reason in the parameters we pass to the parent
constructor, the parameter we set on the connection has no effect.
I attempted to write tests for this, but eventually had to stop wasting
time on it, since I couldn’t get anywhere. Add a warning to the top of
the class to discourage others from making the same mistake.
Change-Id: I481553fac4f0f13a429ad4bbfdf15007c8299af9
use InvalidArgumentException;
/**
use InvalidArgumentException;
/**
- * Trivial LoadBalancer that always returns an injected connection handle
+ * Trivial LoadBalancer that always returns an injected connection handle.
+ *
+ * Note that, while this LoadBalancer does not open any connections itself,
+ * it still closes the injected connection at times, including during destruction.
+ * It is therefore unsuitable for use in tests unless you have a Database instance
+ * separate from the main test database (which is expected to stay open).
*/
class LoadBalancerSingle extends LoadBalancer {
/** @var IDatabase */
*/
class LoadBalancerSingle extends LoadBalancer {
/** @var IDatabase */
'trxProfiler' => $params['trxProfiler'] ?? null,
'srvCache' => $params['srvCache'] ?? null,
'wanCache' => $params['wanCache'] ?? null,
'trxProfiler' => $params['trxProfiler'] ?? null,
'srvCache' => $params['srvCache'] ?? null,
'wanCache' => $params['wanCache'] ?? null,
- 'localDomain' => $params['localDomain'] ?? $this->db->getDomainID()
+ 'localDomain' => $params['localDomain'] ?? $this->db->getDomainID(),
+ 'readOnlyReason' => $params['readOnlyReason'] ?? false,
] );
if ( isset( $params['readOnlyReason'] ) ) {
] );
if ( isset( $params['readOnlyReason'] ) ) {