Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 12 |
| ReplicaDatabaseIgnoreSubscriber | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
20 | |
0.00% |
0 / 12 |
| checkReplicaServer | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 9 |
|||
| getSubscribedEvents | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\EventSubscriber\ReplicaDatabaseIgnoreSubscriber. | |
| */ | |
| namespace Drupal\Core\EventSubscriber; | |
| use Drupal\Core\Database\Database; | |
| use Symfony\Component\HttpKernel\KernelEvents; | |
| use Symfony\Component\HttpKernel\Event\GetResponseEvent; | |
| use Symfony\Component\EventDispatcher\EventSubscriberInterface; | |
| /** | |
| * System subscriber for controller requests. | |
| */ | |
| class ReplicaDatabaseIgnoreSubscriber implements EventSubscriberInterface { | |
| /** | |
| * Checks and disables the replica database server if appropriate. | |
| * | |
| * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event | |
| * The Event to process. | |
| */ | |
| public function checkReplicaServer(GetResponseEvent $event) { | |
| // Ignore replica database servers for this request. | |
| // | |
| // In Drupal's distributed database structure, new data is written to the | |
| // master and then propagated to the replica servers. This means there is a | |
| // lag between when data is written to the master and when it is available | |
| // on the replica. At these times, we will want to avoid using a replica server | |
| // temporarily. For example, if a user posts a new node then we want to | |
| // disable the replica server for that user temporarily to allow the replica | |
| // server to catch up. | |
| // That way, that user will see their changes immediately while for other | |
| // users we still get the benefits of having a replica server, just with | |
| // slightly stale data. Code that wants to disable the replica server should | |
| // use the db_set_ignore_replica() function to set | |
| // $_SESSION['ignore_replica_server'] to the timestamp after which the replica | |
| // can be re-enabled. | |
| if (isset($_SESSION['ignore_replica_server'])) { | |
| if ($_SESSION['ignore_replica_server'] >= REQUEST_TIME) { | |
| Database::ignoreTarget('default', 'replica'); | |
| } | |
| else { | |
| unset($_SESSION['ignore_replica_server']); | |
| } | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| static function getSubscribedEvents() { | |
| $events[KernelEvents::REQUEST][] = array('checkReplicaServer'); | |
| return $events; | |
| } | |
| } |