Update: 2026-08-07 01:35:27
This commit is contained in:
@@ -69,6 +69,32 @@ try {
|
||||
error_log("[accept_ride] تعذّر فحص الإيقاف: " . $eBlock->getMessage());
|
||||
}
|
||||
|
||||
// ═══════════════════════════════════════════════════════════
|
||||
// STEP A0b — حارس الحصرية في الإسناد بالدفعات
|
||||
//
|
||||
// بدون هذا الفحص تبقى الحصرية شكلية: سائق تلقّى العرض سابقاً (أو صاغ
|
||||
// الطلب يدوياً) يستطيع القبول خارج دوره فيعود السباق كما كان.
|
||||
//
|
||||
// وجود المفتاح هو ما يحدد الوضع: البثّ الحر لا يكتبه أصلاً، فالفحص
|
||||
// يمرّ بلا أثر — لا حاجة لقراءة DISPATCH_MODE هنا.
|
||||
// ═══════════════════════════════════════════════════════════
|
||||
try {
|
||||
if (isset($redisLocation) && $redisLocation) {
|
||||
$currentOffer = $redisLocation->get("ride:$rideId:current_offer");
|
||||
if ($currentOffer !== false && $currentOffer !== null
|
||||
&& (string) $currentOffer !== (string) $driverId) {
|
||||
error_log("[accept_ride] DriverID=$driverId حاول قبول RideID=$rideId"
|
||||
. " والعرض الحالي لـ $currentOffer — رُفض");
|
||||
printFailure("Ride not available");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
} catch (Throwable $eOffer) {
|
||||
// فشل الفحص لا يمنع القبول — القفل التفاؤلي في STEP A يبقى الضامن
|
||||
// ضد الازدواج، وأسوأ نتيجة هنا هي عودة سلوك البثّ الحر لهذه الرحلة.
|
||||
error_log("[accept_ride] تعذّر فحص حصرية العرض: " . $eOffer->getMessage());
|
||||
}
|
||||
|
||||
// ═══════════════════════════════════════════════════════════
|
||||
// STEP A — القفل على ride DB (المرجع الأساسي)
|
||||
// Optimistic lock: نغير فقط إذا status لا يزال 'waiting' أو 'wait'
|
||||
@@ -93,6 +119,17 @@ try {
|
||||
|
||||
error_log("[accept_ride] ride DB locked. RideID=$rideId → DriverID=$driverId");
|
||||
|
||||
// عدّاد القبول — بسط معدّل القبول الذي يرتّب به محرك الإسناد.
|
||||
// يُعدّ هنا بعد نجاح القفل حصراً: العدّ قبله كان سيحسب للخاسرين في
|
||||
// السباق قبولاً لم يحدث.
|
||||
try {
|
||||
if (isset($redisLocation) && $redisLocation) {
|
||||
$redisLocation->hIncrBy("driver:score:$driverId", 'accepts', 1);
|
||||
}
|
||||
} catch (Throwable $eScore) {
|
||||
error_log("[accept_ride] تعذّر تحديث عدّاد القبول: " . $eScore->getMessage());
|
||||
}
|
||||
|
||||
// ═══════════════════════════════════════════════════════════
|
||||
// STEP B — تزامن primary DB (بعد نجاح القفل)
|
||||
// ═══════════════════════════════════════════════════════════
|
||||
|
||||
Reference in New Issue
Block a user