Подвійна броня виглядає безневинно: два записи на 14:00 до однієї майстрині. Наслідки не безневинні: один клієнт піде, а майстриня дізнається про це, коли обидва стоять на порозі.
Звідки береться щілина
Збереження запису влаштоване як «прочитав → записав»: спочатку перевіряємо, чи вільний час, потім зберігаємо. Між цими двома діями минають мілісекунди, але два адміністратори, які натиснули «Зберегти» одночасно, встигають обидва пройти перевірку. Кожен бачив вільний час, і кожен мав рацію: на момент перевірки він був вільний.
Ніякий інтерфейс цього не вирішує. Вирішує база даних.
Блокування на майстра
Перед перевіркою запис бере іменоване блокування в базі: «бронювання: компанія такa-то, майстер такий-то». Друге збереження до того ж майстра чекає, поки перше відпустить блокування, і тільки потім перевіряє час. Перевірка тепер бачить перший запис і відмовляє.
Блокування тримається не довше 5 секунд. Якщо за 5 секунд отримати його не вдалося, збереження повертає помилку «спробуйте ще раз»: тримати запит довше заради одного слота немає сенсу, а 5 секунд у нормальній роботі не трапляються ніколи.
Один лок на всі шляхи
Записи створюються з чотирьох місць: форма в CRM, перетягування в календарі, онлайн-запис клієнта і внутрішні сервіси, наприклад лист очікування. Блокування одне і те саме для всіх. Раніше онлайн-запис мала своє блокування, а CRM не мала жодного, і виходило, що клієнт на сайті і адміністратор у CRM усе одно могли зайняти один час: захист працював тільки між двома клієнтами сайту.
Тому ім'я блокування у всіх шляхах збігається. Це і є вся суть: не «розумніша перевірка», а одна черга для всіх, хто хоче цей час у цього майстра.
Що це означає на практиці
Два адміністратори тиснуть «Зберегти» одночасно: у одного запис створюється, другий бачить «час зайнято» і обирає інший. Клієнт на сайті і адміністратор конкурують так само. Затримки ви не помітите: блокування живе десятки мілісекунд.
Якщо все ж побачили «спробуйте ще раз», просто повторіть: це означає, що база була зайнята довше 5 секунд, і краще повторити, ніж отримати два записи.
Коментарі
Коментарів поки немає. Поставте запитання — відповідаємо протягом доби.