Java Fuckup Night 2024

Дата

24.06.2023

Место проведения

Москва

Формат

Оффлайн + Онлайн

Тема доклада

Как продукт воровал деньги у людей и пароходов и ему за это ничего не было (почти).

О чём доклад?

Поговорили о том, как продукт воровал деньги у людей и пароходов. Сразу скажу: это происходило не в Сбере. Приложение стало воровать деньги у ничего подозревающих покупателей, и происходило это от незнания членами команды уровней изоляции транзакций.

Что по теме?

Я препарировал код несколько дней, пытаясь воспроизвести ситуацию и смоделировать её, но это не помогало. Воспроизвести баг не получалось.

И тут я обратил внимание на аннотацию Transactional, которую завели предыдущие разработчики, чтобы, если что-то пойдёт не так, откатить статус задания в первоначальное состояние и попробовать ещё раз.

Как мы знаем, коммит изменений в таком случае происходит при завершении метода.

Всего существует 4 уровня изоляции:

  1. Самый «грязный» уровень – первый – READ UNCOMMITED. На этом уровне транзакции могут читать не закоммиченные изменения.
  2. Второй уровень изоляции – READ COMMITED. Транзакции могут читать только закоммиченные изменения.
  3. Третий уровень – REPEATABLE READ – блокирует изменение данных, если они читаются в рамках другой транзакции. Что позволяет гарантировать, что если вы прочитали данные, они не изменятся, пока ваша транзакция не завершилась.
  4. И четвёртый уровень – SERIALIZABLE – полностью параллельное исполнение транзакций. Только последовательное.

Вы спрашивали: зачем на собеседованиях спрашивают про уровни изоляции? А вот за этим и спрашивают.

Материалы доклада

Вы можете скачать презентацию в PDF.

Другие выступления