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
+5-11Lines changed: 5 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -80,7 +80,7 @@ osctl/
80
80
- Показываем план создания снапшотов с указанием репозитория для каждой группы
81
81
6.**Создание снапшотов (параллельно, с ограничением слотов)**:
82
82
- Для всех групп формируем список задач `SnapshotTask` с полями: имя снапшота, список индексов, репозиторий, дата и расчетный размер (`Size`), который используется для приоритизации.
83
-
- Задачи сортируются по размеру **по убыванию** (большие снапшоты первыми), чтобы сначала снимать “жирные” индексы.
83
+
- Задачи сортируются по размеру **по убыванию** (большие снапшоты первыми).
84
84
- Для всех задач запускается worker‑pool через `CreateSnapshotsInParallel`:
85
85
- Количество одновременно работающих горутин ограничено конфигом `max-concurrent-snapshots` (по умолчанию 3).
86
86
- Каждая горутина (worker) последовательно берет задачи из общего канала и вызывает `CreateSnapshotWithRetry`, передавая свой `workerID` для логов.
@@ -99,9 +99,9 @@ osctl/
99
99
-**Проверка существующего снапшота прямо перед созданием**:
100
100
- После ожидания слота, но до вызова `CreateSnapshot`, `CreateSnapshotWithRetry` еще раз вызывает `CheckSnapshotStateInRepo` для конкретного снапшота:
101
101
- Если снапшот уже в состоянии `SUCCESS` — создание пропускается, задача считается выполненной.
102
-
- Если снапшот уже есть в другом состоянии (`IN_PROGRESS`/`FAILED`/`PARTIAL` и т.п.) — вызов `CreateSnapshot` пропускается, дальше запускается только мониторинг этого существующего снапшота (это устраняет 400 `invalid_snapshot_name_exception` и гонки между разными процессами).
103
-
-**Проверка статуса и шарды с ошибками**:
104
-
- После старта или при “подхвате” уже существующего снапшота `CreateSnapshotWithRetry` опрашивает его статус через `GET /_snapshot/{repo}/*{today}*` (через `GetSnapshots`) с таймаутом видимости 15 минут.
102
+
- Если снапшот уже есть в другом состоянии (`IN_PROGRESS`/`FAILED`/`PARTIAL` и т.п.) — вызов `CreateSnapshot` пропускается, дальше запускается только мониторинг этого существующего снапшота (иначе возникает рейс кондишен).
103
+
-**Проверка статуса**:
104
+
- После старта `CreateSnapshotWithRetry` опрашивает статус через `GET /_snapshot/{repo}/*{today}*` (через `GetSnapshots`) с таймаутом видимости 15 минут.
105
105
- Если состояние `IN_PROGRESS`, дополнительно вызывается `GetSnapshotStatusDetail` (`GET /_snapshot/{repo}/{snapshot}/_status`).
106
106
- Если в детальном статусе `shards_stats.failed > 0`:
107
107
- Снапшот сразу считается невалидным, удаляется через `DeleteSnapshotsWithRetry`.
@@ -127,12 +127,6 @@ osctl/
127
127
- Поддерживает переопределение репозитория через `Repository` в конфиге индекса
128
128
- Использует общий лимит параллельных снапшотов `max-concurrent-snapshots` (CLI/конфиг), по умолчанию 3
129
129
130
-
#### Обновления (декабрь 2025)
131
-
132
-
- Перед каждым фактическим `CreateSnapshot` внутри `CreateSnapshotWithRetry` выполняется дополнительная проверка через `CheckSnapshotStateInRepo`:
133
-
- Если снапшот уже в состоянии `SUCCESS` — создание пропускается, задача считается выполненной.
134
-
- Если снапшот уже есть в другом состоянии (`IN_PROGRESS`/`FAILED`/`PARTIAL` и т.п.) — мы не вызываем создание, а просто начинаем мониторить существующий снапшот (это устраняет 400 `invalid_snapshot_name_exception` и гонки между процессами).
135
-
136
130
### 2. **snapshot-manual** - Ручное создание снапшотов
137
131
138
132
**Алгоритм:**
@@ -619,7 +613,7 @@ osctl/
619
613
- Извлекаем базовый паттерн через первую группу захвата regex
620
614
- Формируем паттерн: `{base}-*`
621
615
- Удаляем дубликаты
622
-
4.**Получение существующих patterns**: `GET /{tenant_index}/_search?q=type:index-pattern` из `.kibana` (без `.kibana*`).
616
+
4.**Получение существующих patterns**: `GET /{tenant_index}/_search?q=type:index-pattern` из `.kibana`.
623
617
5.**Создание недостающих patterns**: Для каждого отсутствующего паттерна создаем через `POST /{tenant_index}/_doc/index-pattern:{uuid}`
0 commit comments