You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: ARCHITECTURE.md
+27-8Lines changed: 27 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -71,17 +71,26 @@ osctl/
71
71
- Создаем группы по репозиториям: для каждой группы создается один снапшот
72
72
5.**Dry run режим**:
73
73
- Получаем существующие снапшоты за сегодня из целевого репозитория
74
-
- Фильтруем снапшоты со статусом `SUCCESS` - они не показываются в плане
74
+
- Для каждой группы проверяем наличие снапшота со статусом `SUCCESS`:
75
+
- Если снапшот существует и содержит все индексы - пропускаем
76
+
- Если снапшот существует, но некоторые индексы отсутствуют - показываем план создания дополнительного снапшота с именем `{baseName}-{randomSuffix}-{date}` только для отсутствующих индексов
75
77
- Для снапшотов со статусом `IN_PROGRESS` показываем явное сообщение
76
78
- Показываем план создания снапшотов с указанием репозитория для каждой группы
77
79
6.**Создание снапшотов**:
78
80
- Ждем завершения всех активных снапшотов через `WaitForSnapshotCompletion` и `WaitForSnapshotTasks`
79
81
- Для каждой группы проверяем существующие снапшоты через `GET /_snapshot/{repo}/*{today}*`
80
82
- Проверяем состояние снапшота через `CheckSnapshotStateInRepo`:
81
-
- Если снапшот уже в состоянии `SUCCESS` - пропускаем с логированием
83
+
- Если снапшот уже в состоянии `SUCCESS`:
84
+
- Проверяем наличие всех индексов из группы в существующем снапшоте
85
+
- Если все индексы присутствуют - пропускаем с логированием
86
+
- Если некоторые индексы отсутствуют:
87
+
- Создаем новый снапшот с именем `{baseName}-{randomSuffix}-{date}`, где `randomSuffix` - 6-символьная рандомная строка
88
+
- В новый снапшот добавляем только отсутствующие индексы
89
+
- Создаем через `CreateSnapshotWithRetry` с retry логикой
82
90
- Если снапшот в состоянии `IN_PROGRESS` - пропускаем с логированием
83
-
- Для каждой группы проверяем/удаляем ошибочный снапшот через `CheckAndCleanSnapshot`
84
-
- Создаем снапшот через `CreateSnapshotWithRetry` с retry логикой (до 5 попыток)
91
+
- Если снапшота нет или он не в состоянии `SUCCESS`:
92
+
- Для каждой группы проверяем/удаляем ошибочный снапшот через `CheckAndCleanSnapshot`
93
+
- Создаем снапшот через `CreateSnapshotWithRetry` с retry логикой (до 5 попыток)
85
94
-**Алертинг**: При неудаче после всех попыток отправляется алерт в Madison через `SendSnapshotFailureAlert` (логируется попытка отправки и результат)
86
95
-**Обработка ошибок**: При ошибке создания снапшота команда продолжает работу со следующими снапшотами (не прерывает выполнение)
87
96
-**Repo-specific группы**: Для снапшотов в кастомных репозиториях применяется та же логика создания с retry
@@ -334,15 +343,25 @@ osctl/
334
343
4.**Группировка для снапшотов**: Группируем индексы через `GroupIndicesForSnapshots`
335
344
5.**Dry run режим**:
336
345
- Получаем существующие снапшоты за дату из целевого репозитория
337
-
- Фильтруем снапшоты со статусом `SUCCESS` и `IN_PROGRESS`
346
+
- Для каждой группы проверяем наличие снапшота со статусом `SUCCESS`:
347
+
- Если снапшот существует и содержит все индексы - пропускаем
348
+
- Если снапшот существует, но некоторые индексы отсутствуют - показываем план создания дополнительного снапшота с именем `{baseName}-{randomSuffix}-{date}` только для отсутствующих индексов
349
+
- Фильтруем снапшоты со статусом `IN_PROGRESS`
338
350
- Показываем план создания снапшотов с указанием репозитория для каждой группы
339
351
6.**Создание снапшотов**:
340
352
- Для каждой группы проверяем существующие снапшоты через `GET /_snapshot/{repo}/*{date}*`
341
353
- Проверяем состояние снапшота через `CheckSnapshotStateInRepo`:
342
-
- Если снапшот уже в состоянии `SUCCESS` - пропускаем с логированием
354
+
- Если снапшот уже в состоянии `SUCCESS`:
355
+
- Проверяем наличие всех индексов из группы в существующем снапшоте
356
+
- Если все индексы присутствуют - пропускаем с логированием
357
+
- Если некоторые индексы отсутствуют:
358
+
- Создаем новый снапшот с именем `{baseName}-{randomSuffix}-{date}`, где `randomSuffix` - 6-символьная рандомная строка
359
+
- В новый снапшот добавляем только отсутствующие индексы
360
+
- Создаем через `CreateSnapshotWithRetry` с retry логикой
343
361
- Если снапшот в состоянии `IN_PROGRESS` - пропускаем с логированием
344
-
- Для каждой группы проверяем/удаляем ошибочный снапшот через `CheckAndCleanSnapshot`
345
-
- Создаем снапшот через `CreateSnapshotWithRetry` с retry логикой
362
+
- Если снапшота нет или он не в состоянии `SUCCESS`:
363
+
- Для каждой группы проверяем/удаляем ошибочный снапшот через `CheckAndCleanSnapshot`
364
+
- Создаем снапшот через `CreateSnapshotWithRetry` с retry логикой
346
365
-**Пауза**: После каждого создания снапшота делаем паузу 10 минут перед следующим
347
366
-**Алертинг**: При неудаче после всех попыток отправляется алерт в Madison
348
367
-**Обработка ошибок**: При ошибке создания снапшота команда продолжает работу со следующими снапшотами
0 commit comments