Правка настройки ClickHouse не доезжает до контейнера #106

Closed
opened 2026-08-20 11:35:55 +03:00 by ddmitry · 2 comments
Owner

Что не так

Правка infra/clickhouse/users.d/access.xml на машине до живого контейнера не
доходит. Compose монтирует не папку, а сам файл; git при своих операциях
подменяет его новым иноду, и bind-mount остаётся смотреть на старый, уже
отвязанный от имени. Внутри контейнера продолжает лежать версия, которая была
там в момент запуска.

Поймано при исполнении #105: в контейнере лежал access.xml от 18 августа,
на машине — от 20-го, а find по иноду контейнерного файла не находил ничего.

host:      stat -c '%i %s' → 5401750  3184
container: stat -c '%i %s' → 5396009  2941
find . -inum 5396009 → пусто

Почему это важно

SYSTEM RELOAD CONFIG при этом отрабатывает и рапортует успех — перечитывается
старое содержимое. Отказ выглядит не как «файл не доехал», а как «правка не
подействовала», и разбирательство уходит в сторону прав и синтаксиса.

Заодно это расходится с обещаниями ADR
0007
: «правка пароля
применяется перезапуском» и «настройку пользователей можно перечитать на живом
стенде». Перечитать можно, но перечитается прежнее.

Цель

Сделать так, чтобы правка файлов настройки ClickHouse доезжала до контейнера
предсказуемым действием, и записать это действие там, где его будут искать.

Критерии приёмки

  • Правка access.xml на машине становится видна контейнеру без make clean.
  • Названо и записано, каким действием она применяется — перезапуском,
    пересозданием или перечитыванием конфига.
  • Проверено на живом стенде: правка, применение, SHOW GRANTS показывает
    новое состояние.
  • Обещания ADR 0007 приведены в соответствие с поведением тем же PR.
  • Проверено, что остальные файлы настройки (config.d/) не страдают тем же:
    если страдают — чинятся заодно, если нет — сказано почему.

Границы

  • Не менять модель доступа: пользователи, роли и права остаются как есть.
  • Не переносить объявление доступа из файлов в SQL — это решено ADR 0007.

Сначала прочитать

  • ADR 0007 — почему доступ объявлен файлами и что это обещает;
  • compose.yml, разделы монтирования нод ClickHouse;
  • docs/architecture/storage.md, «Что проверено» — там записан сам замер.

Команды проверки

docker compose exec clickhouse-01 stat -c '%i %s' /etc/clickhouse-server/users.d/access.xml
stat -c '%i %s' infra/clickhouse/users.d/access.xml
## Что не так Правка `infra/clickhouse/users.d/access.xml` на машине до живого контейнера не доходит. Compose монтирует не папку, а сам файл; git при своих операциях подменяет его новым иноду, и bind-mount остаётся смотреть на старый, уже отвязанный от имени. Внутри контейнера продолжает лежать версия, которая была там в момент запуска. Поймано при исполнении #105: в контейнере лежал `access.xml` от 18 августа, на машине — от 20-го, а `find` по иноду контейнерного файла не находил ничего. ``` host: stat -c '%i %s' → 5401750 3184 container: stat -c '%i %s' → 5396009 2941 find . -inum 5396009 → пусто ``` ## Почему это важно `SYSTEM RELOAD CONFIG` при этом отрабатывает и рапортует успех — перечитывается старое содержимое. Отказ выглядит не как «файл не доехал», а как «правка не подействовала», и разбирательство уходит в сторону прав и синтаксиса. Заодно это расходится с обещаниями [ADR 0007](../src/branch/main/docs/adr/0007-clickhouse-access.md): «правка пароля применяется перезапуском» и «настройку пользователей можно перечитать на живом стенде». Перечитать можно, но перечитается прежнее. ## Цель Сделать так, чтобы правка файлов настройки ClickHouse доезжала до контейнера предсказуемым действием, и записать это действие там, где его будут искать. ## Критерии приёмки - [ ] Правка `access.xml` на машине становится видна контейнеру без `make clean`. - [ ] Названо и записано, каким действием она применяется — перезапуском, пересозданием или перечитыванием конфига. - [ ] Проверено на живом стенде: правка, применение, `SHOW GRANTS` показывает новое состояние. - [ ] Обещания ADR 0007 приведены в соответствие с поведением тем же PR. - [ ] Проверено, что остальные файлы настройки (`config.d/`) не страдают тем же: если страдают — чинятся заодно, если нет — сказано почему. ## Границы - Не менять модель доступа: пользователи, роли и права остаются как есть. - Не переносить объявление доступа из файлов в SQL — это решено ADR 0007. ## Сначала прочитать - ADR 0007 — почему доступ объявлен файлами и что это обещает; - `compose.yml`, разделы монтирования нод ClickHouse; - `docs/architecture/storage.md`, «Что проверено» — там записан сам замер. ## Команды проверки ```sh docker compose exec clickhouse-01 stat -c '%i %s' /etc/clickhouse-server/users.d/access.xml stat -c '%i %s' infra/clickhouse/users.d/access.xml ```
Author
Owner

Я бы расширил задачу. access.xml - то что обнаружено. Но не нужно ли проверить другие конфиги на подобную проблему? Нет ли конфигов, которые мы бы хотели поправить и применить на лету, но не смогли бы? С другой стороны, если оно потребует ощутимой переработки или больших побочных эффектов, то надо ли оно нам?

Я бы расширил задачу. access.xml - то что обнаружено. Но не нужно ли проверить другие конфиги на подобную проблему? Нет ли конфигов, которые мы бы хотели поправить и применить на лету, но не смогли бы? С другой стороны, если оно потребует ощутимой переработки или больших побочных эффектов, то надо ли оно нам?
ddmitry added the needs-triage label 2026-08-20 12:29:40 +03:00
Author
Owner

Резолюция: не исправлять горячую доставку конфигурации.

Исходную рамку проверили от будущих уроков. access.xml — часть базовой настройки стенда, а не поверхность лабораторной работы. ADR 0007 задаёт другой урок: увидеть отказ в правах, понять его причину и знать, чего просить. Для лабы «сломать права» достаточно временных пользователей и ролей, созданных через SQL; править объявленные файлом роли не требуется. Ротация секретов и эксплуатация управления доступом мастер-спекой вынесены за границы стенда.

Каталожное монтирование и живое перечитывание добавили бы несколько способов применения настройки: XML можно перечитать, значения из .env требуют пересоздания, часть config.d — перезапуска сервера. Менти платил бы за это различие, не получая нового урока.

Редкая правка основы стенда остаётся операцией разработчика и может применяться пересозданием нод без удаления данных:

docker compose up -d --force-recreate clickhouse-01 clickhouse-02

Тот же механизм устаревшего inode возможен у одиночно смонтированных файлов config.d, но потребности менять их на лету сейчас нет. Если такая потребность появится в конкретном уроке или рабочей процедуре, решение следует открыть заново от этого читателя.

Отдельный остаток: инструкция docker compose restart для prometheus.xml в README и формулировки ADR 0007 про перезапуск и живое перечитывание неточны. Эта задача не превращается ради них в поддержку горячего обновления; при следующем проходе по этим документам формулировки следует удалить либо заменить на пересоздание.

Резолюция: не исправлять горячую доставку конфигурации. Исходную рамку проверили от будущих уроков. `access.xml` — часть базовой настройки стенда, а не поверхность лабораторной работы. ADR 0007 задаёт другой урок: увидеть отказ в правах, понять его причину и знать, чего просить. Для лабы «сломать права» достаточно временных пользователей и ролей, созданных через SQL; править объявленные файлом роли не требуется. Ротация секретов и эксплуатация управления доступом мастер-спекой вынесены за границы стенда. Каталожное монтирование и живое перечитывание добавили бы несколько способов применения настройки: XML можно перечитать, значения из `.env` требуют пересоздания, часть `config.d` — перезапуска сервера. Менти платил бы за это различие, не получая нового урока. Редкая правка основы стенда остаётся операцией разработчика и может применяться пересозданием нод без удаления данных: `docker compose up -d --force-recreate clickhouse-01 clickhouse-02` Тот же механизм устаревшего inode возможен у одиночно смонтированных файлов `config.d`, но потребности менять их на лету сейчас нет. Если такая потребность появится в конкретном уроке или рабочей процедуре, решение следует открыть заново от этого читателя. Отдельный остаток: инструкция `docker compose restart` для `prometheus.xml` в README и формулировки ADR 0007 про перезапуск и живое перечитывание неточны. Эта задача не превращается ради них в поддержку горячего обновления; при следующем проходе по этим документам формулировки следует удалить либо заменить на пересоздание.
ddmitry added wontfix and removed needs-triage labels 2026-08-20 12:52:41 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ddmitry/clickstream-data-platform#106