بازیابی قفل‌های قدیمی پروفایل مرورگر

قفل پروفایل مرورگر از باز شدن هم‌زمان یک حساب کاربری توسط دو ورکر (worker) جلوگیری می‌کند.

اکثر سیستم‌ها زمانی که یک ورکر کرش می‌کند یا اتصال شبکه را از دست می‌دهد، دچار خطا می‌شوند. آن‌ها یک قفل قدیمی را می‌بینند، آن را حذف می‌کنند و اجازه می‌دهند ورکر جدید جایگزین شود. این کار باعث حرکت صف می‌شود، اما وضعیت حساب کاربری شما را خراب می‌کند.

یک قفل قدیمی (stale lock) صرفاً فایلی برای حذف کردن نیست؛ بلکه یک عملیات ناتمام است که به یک مسیر بازیابی کنترل‌شده نیاز دارد.

با یک قفل مانند یک پرچم (flag) ساده برخورد نکنید. ارزش واقعی در پروفایل مرورگر نهفته است: کوکی‌ها، حافظه محلی (local storage) و تاریخچه نشست (session history).

برای بازیابی از یک ماشین حالت (state machine) استفاده کنید:

• در حال نگهداشت (Held) • مشکوک به قدیمی بودن (Suspected stale) • قرنطینه شده (Quarantined) • بازرسی شده (Inspected) • در دسترس | در انتظار ادامه | بررسی دستی

حالت قرنطینه حیاتی است. این حالت از ورود ورکر دوم در حین بررسی شما جلوگیری می‌کند.

شما باید از یک مدل اجاره (lease model) به همراه یک توکن حصار (fencing token) استفاده کنید. هر عملیات نوشتن باید شامل یک شماره نسخه باشد. اگر یک ورکر قدیمی پس از جایگزینی توسط ورکر جدید دوباره فعال شود، سیستم باید توکن قدیمی آن را رد کند. این کار از خرابی بی‌صدا (silent corruption) جلوگیری می‌کند.

دلایل رایج قفل‌های قدیمی:

  • کرش کردن فرآیند ورکر
  • ری‌استارت شدن میزبان (Host)
  • فراتر رفتن زمان اجرای وظیفه از حد مجاز
  • متوقف شدن ضربان قلب (Heartbeat)
  • قطعی شبکه (Network partition)

یک قفل قدیمی به این معنا نیست که پروفایل در امان است. ممکن است یک ورکر مرده به نظر برسد، اما همچنان ممکن است پشت یک تأخیر شبکه در حال اجرا باشد.

قبل از استفاده مجدد از یک پروفایل، باید شواهد را جمع‌آوری کنید:

  • آخرین URL شناخته شده
  • آخرین مرحله شناخته شده
  • آخرین اسکرین‌شات
  • شناسه پروکسی (Proxy ID)
  • وضعیت دایرکتوری پروفایل

اگر وظیفه‌ای در حین یک اقدام حساس مانند پرداخت (checkout) یا تغییر رمز عبور متوقف شد، آن را به صورت خودکار ادامه ندهید. آن را برای بررسی دستی ارسال کنید.

چهار نتیجه ایمن برای بازیابی:

  1. در دسترس: اگر وظیفه هرگز شروع نشده یا قبل از دسترسی به داده‌های حساب با خطا مواجه شده، از این حالت استفاده کنید.
  2. در انتظار ادامه: اگر وظایف شما دارای نقاط بازرسی (checkpoints) شفاف و ایمن هستند، از این حالت استفاده کنید.
  3. تلاش مجدد: اگر پروفایل ایمن است اما وظیفه باید از ابتدا شروع شود، از این حالت استفاده کنید.
  4. بررسی دستی: اگر وضعیت مبهم یا حساس است، از این حالت استفاده کنید.

از میان‌بر زدن دست بردارید. برای رفع مشکل یک نشست (session)، دایرکتوری‌های پروفایل را حذف نکنید یا کوکی‌ها را پاک نکنید. این اقدامات به بافت (context) حساب کاربری آسیب می‌زنند.

یک سیستم ایمن از این قوانین پیروی می‌کند:

  • یک پروفایل
  • یک اجاره مالک (owner lease)
  • یک وظیفه فعال
  • یک ردپای شواهد
  • یک تصمیم برای بازیابی

قفل تنها یک علامت (symptom) است. وظیفه شما محافظت از محیط حساب کاربری در پشت آن است.

منبع: https://dev.to/web4browser/recovering-stale-browser-profile-locks-without-corrupting-account-state-2hi