Spaces:
No application file
No application file
| namespace Mautic\CampaignBundle\Entity; | |
| use Doctrine\DBAL\Connection; | |
| use Doctrine\DBAL\Connections\PrimaryReadReplicaConnection; | |
| use Mautic\CampaignBundle\Executioner\ContactFinder\Limiter\ContactLimiter; | |
| /** | |
| * Trait ReplicaConnectionTrait. | |
| */ | |
| trait ReplicaConnectionTrait | |
| { | |
| /** | |
| * Get a connection, preferring a replica connection if available and prudent. | |
| * | |
| * If a query is being executed with a limiter with specific contacts | |
| * then this could be a real-time request being handled so we should avoid forcing a replica connection. | |
| */ | |
| private function getReplicaConnection(ContactLimiter $limiter = null): Connection | |
| { | |
| /** @var Connection $connection */ | |
| $connection = $this->getEntityManager()->getConnection(); | |
| if ($connection instanceof PrimaryReadReplicaConnection) { | |
| if ( | |
| !$limiter | |
| || !($limiter->getContactId() || $limiter->getContactIdList()) | |
| ) { | |
| $connection->ensureConnectedToReplica(); | |
| } | |
| } | |
| return $connection; | |
| } | |
| } | |