मैं एक PHP फ़ंक्शन लिख रहा हूं जो किसी तालिका में डेटा के बड़े सेट को स्टोर/अपडेट करता है और इससे डेडलॉक हो सकता है। मैंने जांच की कोशिश की कि सिद्धांत के साथ एक असफल लेनदेन कैसे पुनः प्रयास करें लेकिन दुख की बात है कि ऑनलाइन कोई जानकारी नहीं मिल सका। इस बात की संभावना इस दृष्टिकोण डेटाबेस में डुप्लिकेट सम्मिलित जाएगा: मैं अंत में निम्न कोडसिद्धांत का उपयोग करके डेडलॉक के बाद लेनदेन का पुन: प्रयास कैसे करें?
$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"
);
}
मेरा प्रश्न लिखा? यदि हां, तो मैं लेनदेन को वापस लाने के लिए सिद्धांत को कैसे मजबूर कर सकता हूं?
धन्यवाद :) यह कम से कम मुझे आगे बढ़ने का विचार देता है। – Rorchackh
असल में, यह अब सत्य नहीं है, क्योंकि अपवाद 'EntityManager' बंद स्थिति में प्रवेश करता है और यह एक' ORMException 'फेंक देगा जिसमें कहा गया है कि इकाई प्रबंधक दूसरे प्रयास पर बंद है। सिद्धांत संस्करण 2.4। * – Mantas
यह बंद होने पर इकाई प्रबंधक को रीसेट करने का तरीका है https://codedump.io/share/rjB45oiwtqwo/1/doctrine2-the-entitymanager-is-closed-how-to-reset-entity-manager-in- symfony2 –