Правка infra/clickhouse/users.d/access.xml на машине до живого контейнера не
доходит. Compose монтирует не папку, а сам файл; git при своих операциях
подменяет его новым иноду, и bind-mount остаётся смотреть на старый, уже
отвязанный от имени. Внутри контейнера продолжает лежать версия, которая была
там в момент запуска.
Поймано при исполнении #105: в контейнере лежал access.xml от 18 августа,
на машине — от 20-го, а find по иноду контейнерного файла не находил ничего.
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
```
Я бы расширил задачу. access.xml - то что обнаружено. Но не нужно ли проверить другие конфиги на подобную проблему? Нет ли конфигов, которые мы бы хотели поправить и применить на лету, но не смогли бы? С другой стороны, если оно потребует ощутимой переработки или больших побочных эффектов, то надо ли оно нам?
Я бы расширил задачу. access.xml - то что обнаружено. Но не нужно ли проверить другие конфиги на подобную проблему? Нет ли конфигов, которые мы бы хотели поправить и применить на лету, но не смогли бы? С другой стороны, если оно потребует ощутимой переработки или больших побочных эффектов, то надо ли оно нам?
Резолюция: не исправлять горячую доставку конфигурации.
Исходную рамку проверили от будущих уроков. 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 про перезапуск и живое перечитывание неточны. Эта задача не превращается ради них в поддержку горячего обновления; при следующем проходе по этим документам формулировки следует удалить либо заменить на пересоздание.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Что не так
Правка
infra/clickhouse/users.d/access.xmlна машине до живого контейнера недоходит. Compose монтирует не папку, а сам файл; git при своих операциях
подменяет его новым иноду, и bind-mount остаётся смотреть на старый, уже
отвязанный от имени. Внутри контейнера продолжает лежать версия, которая была
там в момент запуска.
Поймано при исполнении #105: в контейнере лежал
access.xmlот 18 августа,на машине — от 20-го, а
findпо иноду контейнерного файла не находил ничего.Почему это важно
SYSTEM RELOAD CONFIGпри этом отрабатывает и рапортует успех — перечитываетсястарое содержимое. Отказ выглядит не как «файл не доехал», а как «правка не
подействовала», и разбирательство уходит в сторону прав и синтаксиса.
Заодно это расходится с обещаниями ADR
0007: «правка пароля
применяется перезапуском» и «настройку пользователей можно перечитать на живом
стенде». Перечитать можно, но перечитается прежнее.
Цель
Сделать так, чтобы правка файлов настройки ClickHouse доезжала до контейнера
предсказуемым действием, и записать это действие там, где его будут искать.
Критерии приёмки
access.xmlна машине становится видна контейнеру безmake clean.пересозданием или перечитыванием конфига.
SHOW GRANTSпоказываетновое состояние.
config.d/) не страдают тем же:если страдают — чинятся заодно, если нет — сказано почему.
Границы
Сначала прочитать
compose.yml, разделы монтирования нод ClickHouse;docs/architecture/storage.md, «Что проверено» — там записан сам замер.Команды проверки
Я бы расширил задачу. access.xml - то что обнаружено. Но не нужно ли проверить другие конфиги на подобную проблему? Нет ли конфигов, которые мы бы хотели поправить и применить на лету, но не смогли бы? С другой стороны, если оно потребует ощутимой переработки или больших побочных эффектов, то надо ли оно нам?
Резолюция: не исправлять горячую доставку конфигурации.
Исходную рамку проверили от будущих уроков.
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 про перезапуск и живое перечитывание неточны. Эта задача не превращается ради них в поддержку горячего обновления; при следующем проходе по этим документам формулировки следует удалить либо заменить на пересоздание.