rdbms: add and enforce DB_REPLICA/DB_MASTER roles in DBConnRef
authorAaron Schulz <aschulz@wikimedia.org>
Thu, 21 Mar 2019 16:10:23 +0000 (09:10 -0700)
committerAaron Schulz <aschulz@wikimedia.org>
Fri, 5 Apr 2019 09:03:50 +0000 (09:03 +0000)
commiteb603040de8dcc164128080ba669df0ea930faee
treeed9fe23558a2ec3df9f6ec47554b660ae7b274dd
parent4a958273c1ecfe5d13492fc4b469aeba9877e00f
rdbms: add and enforce DB_REPLICA/DB_MASTER roles in DBConnRef

Even if there is only one database, if a DB_REPLICA connection
reference is obtained and an attempt is made to write it then
it will still fail. This can make it easier to spot incorrect
database usage even in a simple vanilla developer environment.

Note that methods like ILoadBalancer::getConnectionRef() can
be used for local connections as well as foreign ones.

Change-Id: I5523daad1bdd64624d3e0dd41bfd8d078b1078b0
autoload.php
includes/libs/rdbms/database/DBConnRef.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/database/IDatabase.php
includes/libs/rdbms/database/MaintainableDBConnRef.php
includes/libs/rdbms/exception/DBReadOnlyRoleError.php [new file with mode: 0644]
includes/libs/rdbms/loadbalancer/ILoadBalancer.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
tests/phpunit/includes/db/LoadBalancerTest.php
tests/phpunit/includes/libs/rdbms/database/DBConnRefTest.php