Skip to content

Commit 08788b3

Browse files
author
anton.voskresensky
committed
fix sort for backfill
1 parent 617769d commit 08788b3

File tree

3 files changed

+38
-6
lines changed

3 files changed

+38
-6
lines changed

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
build/
22
main
33
# Test certificates
4-
test-certs/
4+
test-certs/
5+
osctl
6+
Makefile
7+
test.yaml

ARCHITECTURE.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -398,8 +398,10 @@ osctl/
398398
- Если дата есть - добавляем в список для обработки
399399
4. **Проверка снапшотов**: Получаем все снапшоты через `GET /_snapshot/{repo}/*`
400400
5. **Определение индексов без снапшотов**: Для каждого индекса проверяем наличие валидного снапшота через `HasValidSnapshot`
401-
6. **Группировка по датам**: Группируем индексы без снапшотов по датам (по убыванию даты)
402-
7. **Создание снапшотов**: Для каждой группы по датам создаем снапшоты (алгоритм создания ниже)
401+
6. **Группировка по датам**: Группируем индексы без снапшотов по датам через `GroupIndicesByDate`
402+
7. **Сортировка дат**: Сортируем даты по возрастанию (от старых к новым) через `sort.Strings`
403+
8. **Сортировка индексов по размеру**: Для каждой даты получаем индексы с размерами через `GetIndicesWithFields` с сортировкой `ss:asc` (от маленьких к большим) и переупорядочиваем список индексов для даты
404+
9. **Создание снапшотов**: Для каждой группы по датам создаем снапшоты (алгоритм создания ниже)
403405

404406
**Режим 2: Без параметра `--indices-list`**
405407
1. **Загрузка конфигурации**: Получаем `osctl-indices-config`, `unknown.snapshot` и S3 конфигурацию
@@ -409,8 +411,10 @@ osctl/
409411
- Пропускаем индексы без даты в названии
410412
4. **Проверка снапшотов**: Получаем все снапшоты через `GET /_snapshot/{repo}/*`
411413
5. **Определение индексов без снапшотов**: Для каждого индекса проверяем наличие валидного снапшота через `HasValidSnapshot`
412-
6. **Группировка по датам**: Группируем индексы без снапшотов по датам (по убыванию даты)
413-
7. **Создание снапшотов**: Для каждой группы по датам создаем снапшоты (алгоритм создания ниже)
414+
6. **Группировка по датам**: Группируем индексы без снапшотов по датам через `GroupIndicesByDate`
415+
7. **Сортировка дат**: Сортируем даты по возрастанию (от старых к новым) через `sort.Strings`
416+
8. **Сортировка индексов по размеру**: Для каждой даты получаем индексы с размерами через `GetIndicesWithFields` с сортировкой `ss:asc` (от маленьких к большим) и переупорядочиваем список индексов для даты
417+
9. **Создание снапшотов**: Для каждой группы по датам создаем снапшоты (алгоритм создания ниже)
414418

415419
**Алгоритм создания снапшотов для группы по дате:**
416420
1. **Разделение конфигураций**: Разделяем конфигурации на системные и обычные

commands/snapshotsbackfill.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ func runSnapshotsBackfill(cmd *cobra.Command, args []string) error {
173173
for k := range dateGroups {
174174
dateKeys = append(dateKeys, k)
175175
}
176-
sort.Sort(sort.Reverse(sort.StringSlice(dateKeys)))
176+
sort.Strings(dateKeys)
177177

178178
logger.Info(fmt.Sprintf("Grouped indices by date groups=%d", len(dateGroups)))
179179
for _, dateKey := range dateKeys {
@@ -190,6 +190,31 @@ func runSnapshotsBackfill(cmd *cobra.Command, args []string) error {
190190
indicesForDate := dateGroups[dateKey]
191191
logger.Info(fmt.Sprintf("Processing date group date=%s indicesCount=%d", dateKey, len(indicesForDate)))
192192

193+
indicesSet := make(map[string]bool)
194+
for _, idx := range indicesForDate {
195+
indicesSet[idx] = true
196+
}
197+
198+
pattern := "*" + dateKey + "*"
199+
indicesWithSize, err := client.GetIndicesWithFields(pattern, "index,ss", "ss:asc")
200+
if err != nil {
201+
logger.Warn(fmt.Sprintf("Failed to get indices with size for date date=%s error=%v, using unsorted list", dateKey, err))
202+
} else {
203+
var sortedIndices []string
204+
for _, idx := range indicesWithSize {
205+
if indicesSet[idx.Index] {
206+
sortedIndices = append(sortedIndices, idx.Index)
207+
delete(indicesSet, idx.Index)
208+
}
209+
}
210+
for idx := range indicesSet {
211+
sortedIndices = append(sortedIndices, idx)
212+
}
213+
if len(sortedIndices) > 0 {
214+
indicesForDate = sortedIndices
215+
}
216+
}
217+
193218
goFormat := utils.ConvertDateFormat(cfg.GetDateFormat())
194219
parsedDate, err := time.Parse(goFormat, dateKey)
195220
if err != nil {

0 commit comments

Comments
 (0)