| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
#### Hash runtime settings for stable identification ✎
- Introduces a stable hash function for runtime settings to enable consistent identification of configuration states
- Implements `SHA-256` based hashing that includes both host settings and UDF settings with deterministic ordering
- Ensures hash stability regardless of setting insertion order by using ordered data structures
- Adds comprehensive unit tests to verify hash consistency, content sensitivity, and order independence
- Enhances configuration serialization to properly count and filter serializable settings
- Makes serialization order deterministic by switching from hash map to map for setting storage
<a href="https://nda.ya.ru/t/qa0kX64r7DqvtN"><font size="2">Autodescription by Yandex Code Assistant</font></a>
commit_hash:49aafc63bf011c335d556cd41dd4971473b62f13
|
| |
|
|
| |
commit_hash:ca028259d6fbf7b46aa0cc392187b8b153716d62
|
| |
|
|
| |
commit_hash:e8ea8f3c4365ed8b87ced31aa1fa34ca0686758c
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
**Режим capture** (qContext.CanWrite())
1. Проходим по всем элементам source с индексом idx.
2. Для каждого элемента вызываем filter(item) ровно один раз (фильтр может иметь побочные эффекты — например, запись статистики об активации).
3. Элементы, прошедшие фильтр, добавляются в возвращаемый результат.
4. Сохраняем индексы всех прошедших фильтр элементов в QStorage в формате V2:
\{"version": "v2", "indexes": \[0, 2, 5, ...\]\}
---
**Режим replay** (qContext.CanRead())
1. Читаем YSON-запись из QStorage по ключу \{Component="Activation", Label=label\}.
2. Определяем версию формата по наличию ключа "version":
**Формат V1** (старый, обратная совместимость) — ключ "version" отсутствует:
- Структура: \{"имя\_флага": сериализованный\_proto, ...\}
- Десериализуем каждый флаг через ParseFromString, возвращаем список напрямую.
- Фильтр не вызывается. Список source игнорируется.
**Формат V2 (текущий)** — "version": "v2":
- Структура: \{"version": "v2", "indexes": \[0, 2, 5, ...\]\}
- Читаем сохранённое множество индексов.
- Проходим по source с *индексом* idx:
- Элемент без условия активации (!HasActivation()) → всегда включается (такие элементы не зависят от активации).
- Элемент с условием активации (HasActivation()) → включается только если его idx есть в сохранённом множестве.
- Фильтр не вызывается.
commit_hash:306113465bcd614cd3c0cd311ab20542d1f8e254
|
| |
|
|
| |
commit_hash:183e3a952a021c4701c20d6677800f245239d822
|
| |
|
|
| |
commit_hash:7db31947013b154fefd5664f2dca2db0330144b9
|
| |
|
|
| |
commit_hash:054395f57e37951159c1184eae2e6d4bc81245f8
|
|
|
commit_hash:eba49886bcafb9d280526ea3e3af12a9d07844a0
|