Sto scrivendo una funzione PHP che memorizza/aggiorna grandi serie di dati in una tabella e può causare un deadlock. Ho provato a indagare su come riprovare una transazione fallita con Doctrine ma purtroppo non ho trovato alcuna informazione online. Alla fine ho scritto il seguente codiceCome riprovare la transazione dopo un deadlock utilizzando Doctrine?
$retry = 0;
$done = false;
while (!$done and $retry < 3) {
try {
$this->entityManager->flush();
$done = true;
} catch (\Exception $e) {
sleep(1);
$retry++;
}
}
if ($retry == 3) {
throw new Exception(
"[Exception: MySQL Deadlock] Too many people accessing the server at the same time. Try again in few minutes"
);
}
La mia domanda: c'è una possibilità di questo approccio inserirà i duplicati nel database? In tal caso, come posso forzare Doctrine a ripristinare le transazioni?
Grazie :) Questo almeno mi dà un'idea di come procedere. – Rorchackh
In realtà, questo non è più vero, poiché nel caso di Eccezione 'EntityManager' entra nello stato chiuso e genererà un' ORMException 'affermando che il gestore di entità è chiuso al secondo tentativo. Doctrine versione 2.4. * – Mantas
questo è come reimpostare entitymanager quando chiuso https://codedump.io/share/rjB45oiwtqwo/1/doctrine2-the-entitymanager-is-closed-how-to-reset-entity-manager-in- Symfony2 –