Пісочниця оновлення: перевірка перевіряла одну пробу з вісімнадцяти
Перший прогін на стенді пройшов, але таблиця «дані до й після» мала ОДИН рядок замість вісімнадцяти — і виглядала повною. docker exec читає stdin, а stdin у циклі проб — той самий їх перелік. Перша проба з'їдала решту, цикл завершувався після одного оберту, і нічим цього не виказував: рядок є, «ok» є. Одне </dev/null. Тепер видно, що міграція пройшла по базі з 6936 відліками телеметрії, 24 конфігами й 12 алертами, а не по порожній. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
d73f693cd7
commit
3d5d1c6967
2 changed files with 43 additions and 1 deletions
35
HISTORY.md
35
HISTORY.md
|
|
@ -8021,3 +8021,38 @@ ROADMAP називав три причини, з яких ламається с
|
|||
міркуванням, а не запуском. Саме той стан, проти якого написана
|
||||
пісочниця; перший прогін на стенді має бути перед першим тегом, а не
|
||||
після.
|
||||
|
||||
### Прогін пісочниці оновлення на стенді (2026-08-29)
|
||||
|
||||
Перший наскрізний прогін `./netpulse sandbox upgrade`. Пройшов повністю:
|
||||
`ec4b2cd → d73f693`, міграція 0073 накотилась поверх наповненої бази,
|
||||
самоперевірка зелена, сліди прибрані.
|
||||
|
||||
**Дорогою знайшлась вада в самій перевірці, і саме того класу, від якого
|
||||
вся ця робота й починалась.** Перший прогін звітував таблицю «дані до й
|
||||
після» з ОДНОГО рядка — «хости 24 → 24, ok». Виглядало як повна
|
||||
перевірка. Насправді проб вісімнадцять, а виконувалась одна:
|
||||
`docker exec` читає stdin, а stdin у цьому циклі — той самий перелік
|
||||
проб. Перша ж проба з'їдала решту, цикл завершувався після одного оберту,
|
||||
і жодного натяку на це не було: рядок є, «ok» є.
|
||||
|
||||
Виправлено одним `</dev/null`. Після нього таблиця показує те, заради
|
||||
чого існує:
|
||||
|
||||
```
|
||||
проби icmp 6936 → 6936 exact
|
||||
відліки метрик 6936 → 6936 exact
|
||||
конфіги ncm 24 → 24 exact
|
||||
алерти 12 → 12 exact
|
||||
```
|
||||
|
||||
Тобто міграція пройшла по базі з майже сімома тисячами рядів телеметрії,
|
||||
двома десятками конфігів і живими алертами — а не по порожній.
|
||||
|
||||
**Що прогін НЕ доводить:** «попередня версія» тут — сусідній коміт із
|
||||
різницею в одну міграцію. Перед справжнім випуском треба брати `--from`
|
||||
із тією версією, з якої клієнти оновлюватимуться насправді. Гілка
|
||||
мігратора «наявна інсталяція» цим режимом не досяжна за побудовою: база
|
||||
пісочниці народжується чистою. І `журнал аудиту 0 → 0` — проба з
|
||||
правилом `min`, тобто нуль у ній нічого не доводить; чому після повної
|
||||
установки аудит порожній, варто подивитись окремо.
|
||||
|
|
|
|||
9
netpulse
9
netpulse
|
|
@ -2933,7 +2933,14 @@ sandbox_up_snapshot() {
|
|||
sandbox_up_probes > "$_out.q"
|
||||
while IFS='|' read -r _label _rule _sql; do
|
||||
[ -n "$_label" ] || continue
|
||||
_n=$(dc exec -T db psql -tAX -U netpulse -d netpulse -c "$_sql" 2>/dev/null | tr -d ' \r')
|
||||
# </dev/null — не косметика, а причина, з якої ця перевірка
|
||||
# звітувала ОДИН рядок замість вісімнадцяти. `docker exec` читає
|
||||
# stdin, а stdin тут — той самий перелік проб, яким живиться
|
||||
# цикл: перша ж проба з'їдала решту, цикл завершувався після
|
||||
# одного оберту, і таблиця «дані до й після» виглядала повною,
|
||||
# бо в ній був рядок і слово «ok». Найгірший вид зеленого:
|
||||
# перевірка, яка нічого не перевірила й нічим цього не виказала.
|
||||
_n=$(dc exec -T db psql -tAX -U netpulse -d netpulse -c "$_sql" </dev/null 2>/dev/null | tr -d ' \r')
|
||||
case "$_n" in
|
||||
''|*[!0-9]*) _n=- ;;
|
||||
esac
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue