-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Disk manager] Retry snapshot creation on shadow disk fail #1950
Comments
Кажется не стоит удалять чекпойнт в этом случае |
Когда это делалось изначально, то предполагалось, что повторная попытка будет на уровне ДМ. Что он удалит чекпоинт и пересоздаст. После рефакторинга поведение поменялось, и создание чекпоинта с тем же именем запретили. |
Значит нужно поправить код Disk Manager (если он удаляет чекпойнт в этом случае) - и написать на эту ситуацию интеграционный тест |
Про правку #2691: В ней мы в случае падения теневого диска поступаем так: удалеям чекптоинт и создаём другой чекпоинт с новым checkpoint id. Для воспроизведения падений теневого диска в интеграционных тестах нам нужно ходить в disk registry. Поэтому мы также добавляем нужный для этого код в nbs client. |
Про тестирование: способ тестирования через ручку DisableAgent -- кажется, единственный способ, не требующий правок в код nbs и/или disk agent. Для тестирования была такая альтернатива, которую предлагал Миша: посылась сигнал SIGSTOP процесу диск агента. Логика такая: запросы должны зависать, по прошествии таймаута девайс будет считаться сломанным, полсе чего теневой диск перейдёт в стейт Error. Но к сожалению это так не срабатывает. Причина: код ошибки, который будут получать зависающие зарпосы, всегда будет один и тот же (E_TIMEOUT) вне зависимости от статуса девайса (т.к. это будут background запросы) -- ссылка на код. А так как E_TIMEOUT -- ретрабельная ошибка, то из-за неё теневой диск не будет переходить в стейт Error (ссылка на код). На будущее можно подумать в сторону того, чтобы ломать агенты/девайсы в nemesis тестах. |
Однако правка #2691 ещё не полностью решает проблему с падением теневого диска, так как теневой диск может упасть уже после окончания его наливки. То есть мы можем начать наливать снапшот из теневого диска в dataplane таске, но не успеть закончить. Вопрос, что с этим делать -- нетривиальный, так как нельзя просто зашедуллить другой dataplane таск с другим checkpoint id. Имеются предложения, что с этим делать -- надо будет их обсудить. Возможная промежуточная мера, которую предлагал Борис: в случае падения dataplane таска из-за поломки теневого диска возвращать в controlplane таске не-internal ошибку. |
Также надо будет то же самое, что мы сейчас делаем для снапшотов, сделать и для создания образов. Тут возникает неприятность, что получиться много копипасты нетривиальной логики. |
Если в процессе наливки теневого диска теневой диск ломается, то ошибка уходит в диск-менеджер.
Если диск-менеджер попробует повторить попытку, то ему нужно использовать другое имя для чекпоинта, так как сейчас нельзя создать чекпоинт с тем же именем после его удаления.
The text was updated successfully, but these errors were encountered: