Skip to content
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

Open
drbasic opened this issue Sep 4, 2024 · 7 comments
Open

[Disk manager] Retry snapshot creation on shadow disk fail #1950

drbasic opened this issue Sep 4, 2024 · 7 comments
Assignees

Comments

@drbasic
Copy link
Collaborator

drbasic commented Sep 4, 2024

Если в процессе наливки теневого диска теневой диск ломается, то ошибка уходит в диск-менеджер.
Если диск-менеджер попробует повторить попытку, то ему нужно использовать другое имя для чекпоинта, так как сейчас нельзя создать чекпоинт с тем же именем после его удаления.

@SvartMetal
Copy link
Collaborator

Кажется не стоит удалять чекпойнт в этом случае

@drbasic
Copy link
Collaborator Author

drbasic commented Sep 4, 2024

Когда это делалось изначально, то предполагалось, что повторная попытка будет на уровне ДМ. Что он удалит чекпоинт и пересоздаст. После рефакторинга поведение поменялось, и создание чекпоинта с тем же именем запретили.

@SvartMetal
Copy link
Collaborator

Значит нужно поправить код Disk Manager (если он удаляет чекпойнт в этом случае) - и написать на эту ситуацию интеграционный тест

@gy2411
Copy link
Collaborator

gy2411 commented Dec 13, 2024

Про правку #2691:

В ней мы в случае падения теневого диска поступаем так: удалеям чекптоинт и создаём другой чекпоинт с новым checkpoint id.

Для воспроизведения падений теневого диска в интеграционных тестах нам нужно ходить в disk registry. Поэтому мы также добавляем нужный для этого код в nbs client.

@gy2411
Copy link
Collaborator

gy2411 commented Dec 13, 2024

Про тестирование: способ тестирования через ручку DisableAgent -- кажется, единственный способ, не требующий правок в код nbs и/или disk agent.

Для тестирования была такая альтернатива, которую предлагал Миша: посылась сигнал SIGSTOP процесу диск агента. Логика такая: запросы должны зависать, по прошествии таймаута девайс будет считаться сломанным, полсе чего теневой диск перейдёт в стейт Error.

Но к сожалению это так не срабатывает. Причина: код ошибки, который будут получать зависающие зарпосы, всегда будет один и тот же (E_TIMEOUT) вне зависимости от статуса девайса (т.к. это будут background запросы) -- ссылка на код. А так как E_TIMEOUT -- ретрабельная ошибка, то из-за неё теневой диск не будет переходить в стейт Error (ссылка на код).

На будущее можно подумать в сторону того, чтобы ломать агенты/девайсы в nemesis тестах.

@gy2411
Copy link
Collaborator

gy2411 commented Dec 13, 2024

Однако правка #2691 ещё не полностью решает проблему с падением теневого диска, так как теневой диск может упасть уже после окончания его наливки. То есть мы можем начать наливать снапшот из теневого диска в dataplane таске, но не успеть закончить. Вопрос, что с этим делать -- нетривиальный, так как нельзя просто зашедуллить другой dataplane таск с другим checkpoint id. Имеются предложения, что с этим делать -- надо будет их обсудить.

Возможная промежуточная мера, которую предлагал Борис: в случае падения dataplane таска из-за поломки теневого диска возвращать в controlplane таске не-internal ошибку.

@gy2411
Copy link
Collaborator

gy2411 commented Dec 13, 2024

Также надо будет то же самое, что мы сейчас делаем для снапшотов, сделать и для создания образов. Тут возникает неприятность, что получиться много копипасты нетривиальной логики.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants