свёртка доставки в объекты и сшивка с приёмом
- internal/fold — свёртка по идентификатору доставки, тело из архива: тот же код, каким пойдёт пересборка витрины - приём зовёт свёртку на context.WithoutCancel с собственным дедлайном; исход разбора на код ответа не влияет - слой доставки хранится в delivery.derived_layer и наследуется от ПРЕДШЕСТВУЮЩЕЙ доставки автоматизации: без границы по времени свёртка переставала быть функцией от префикса журнала (1737 объектов против 1742) - task verify:archive — сходимость на живом архиве, 99 доставок из 99
This commit is contained in:
@@ -457,6 +457,30 @@ func (s *Store) MarkSealed(ctx context.Context, metric, layer string, hour time.
|
||||
return nil
|
||||
}
|
||||
|
||||
// BucketHours возвращает часы, за которые есть объекты метрики в слое, по
|
||||
// возрастанию. Первое, что понадобится каталогу разрезов, и то, чем проверка
|
||||
// сходимости находит объект, не зная дат в фикстуре.
|
||||
func (s *Store) BucketHours(ctx context.Context, metric, layer string) ([]time.Time, error) {
|
||||
const q = `
|
||||
SELECT hour_utc FROM bucket
|
||||
WHERE metric = ? AND layer = ? ORDER BY hour_utc`
|
||||
|
||||
var raw []string
|
||||
if err := s.db.SelectContext(ctx, &raw, q, metric, layer); err != nil {
|
||||
return nil, fmt.Errorf("select bucket hours: %w", err)
|
||||
}
|
||||
|
||||
out := make([]time.Time, 0, len(raw))
|
||||
for _, s := range raw {
|
||||
t, err := ParseTime(s)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
out = append(out, t)
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// CountBuckets возвращает число часовых объектов. Нужно проверке сходимости и
|
||||
// healthcheck.
|
||||
func (s *Store) CountBuckets(ctx context.Context) (int64, error) {
|
||||
|
||||
Reference in New Issue
Block a user