Repository navigation
Ствол краснел не потому, что мак не даёт чисел, а потому что сторож искал их не на том языке - #5
Merged
Merged
Conversation
…сегда Ствол красен на каждом коммите с 2 сентября — четырнадцать прогонов подряд, включая выпуски 0.7.0, 0.8.0, 0.9.0 и 0.9.1. Оба маковских задания падали на шаге «Снимок содержит числа», докладывая, что чисел нет. ЧИСЛА БЫЛИ. Тот же прогон, шагом выше, зеленел `TestProcessesAreMeasured` на живой машине, а сам снимок печатался в журнал строкой ниже жалобы: macos-latest PROCESSES total 559, threads 946, running 14, measured over 315 macos-15-intel PROCESSES total 472, threads 741, running 1, measured over 249 и обе десятки под ней — с размерами и долями. Падал не снимок, а сторож. ЧТО СЛОМАЛОСЬ. Образцы завели коммитом `680b0e5`, когда вывод был только русским и печатал долю как `%.1f%%`. Следующим коммитом, `22885a2`, инструмент заговорил на двух языках: слова поехали через словарь, а разделитель дробной части — через `l.Pct`. С тех пор образец `занято ЦП [0-9]+\.[0-9]%` не совпадал НИ С ОДНИМ языком: по-английски другие слова, по-русски запятая. На бегунке `LANG` не задан, `lang.Default` — английский, и сторож искал русские слова в английском снимке. Шаг не зеленел ни разу за всё своё существование: до `33636268145` маковское задание не доходило до него, а начиная с него падало все три раза, каждый — всеми десятью образцами, а не тремя. ЧТО СТАЛО. Язык снимка ЗАДАЁТСЯ ключом `--lang`, а не наследуется от бегунка, и спрашиваются обе редакции: дерево обещает полный перевод, и снимок, полный по-русски и пустой по-английски, — сломанный снимок. Образцов стало 28 вместо 10: 24 `need` (строка обязана нести ЧИСЛО) и 4 `named` (строка обязана НАЗВАТЬ словом то, чего на маке взять нечем, — заблокированные процессы и показания датчиков; непокрытое называется, а не выдаётся за поломку). Заголовок десятки больше не считается числом: рядом с ним стоит образец на саму строку с размером и на строку с долей, потому что десятка из прочерков прежний образец устраивала. ОТРИЦАТЕЛЬНЫЙ КОНТРОЛЬ — в самом шаге, потому что беда была ровно такая: сторож, который не умеет упасть, трое суток выглядел работающим. Тот же сторож сначала натравливается на заведомо пустой снимок, и заругаться обязан КАЖДЫЙ из 28 образцов, а не хотя бы один: образец, срабатывающий на пустоте, проверяет не число, а собственную формулировку. Смолчал хоть один — шаг падает до приговора по настоящему снимку. ЧТОБЫ ОБРАЗЕЦ И ПЕЧАТЬ НЕ РАЗОШЛИСЬ МОЛЧА ЕЩЁ РАЗ, заведён `host/snapshot_numbers_test.go`. Он читает `.github/workflows/check.yml` — файл вне модуля, как `main_test.go` читает страницу руководства, — печатает снимок, собранный маком, и валится, если хоть один образец оттуда в нём не находится. Копию образцов сюда не переписывали: копия разошлась бы так же. Три его отрицательных контроля проверены возвратом прежней беды: образец с английской точкой в русской строке роняет тест; `need`, сходящийся на незамеренном снимке, роняет; `named`, сходящийся на полном, роняет. ЧТО ЗАМЕРЕНО, А ЧТО НЕТ. Мака нет, `digitdisk status` на маке не запускался. Английская половина — все 14 образцов — сверена с НАСТОЯЩИМ выводом обоих бегунков, слово в слово вынутым из журнала прогона `33967026504`: сходятся все, на обеих машинах. Русская половина сверена с печатью на Linux и тестом выше; что мак напечатает её так же, следует из того, что язык выбирается до печати, а сбор от языка не зависит, — но НЕ ЗАМЕРЕНО. Не прогонялись `make -C core` и `tools/sverka-ui.sh`: ни `core/`, ни `ui/` не тронуты. Лицензионный сторож прогнан имеющимся `flang 0.6.2`, а не закреплённым `v0.7.10`: бед 0, и он же роняет прогон, если у нового файла снять заголовок SPDX.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Задача 8179. Ствол красен на каждом коммите минимум с 2 сентября — падают оба маковских задания «снимок снимается по-настоящему» с «НЕТ ЧИСЛА: сколько процессов работает» и двумя десятками.
Числа на маке снимались всегда
Ни одно из трёх не рвётся в коде — цепочка целая на всём протяжении:
sysctl kern.proc.all→ParseProcs+ProcTaskInfo, счёт по потокам вrank(), а не по букве состояния (p_statзовёт «runnable» каждый живой процесс)proc_pidinfo(PROC_PIDTASKINFO)черезinternal/libsystem— без cgo, той же дверью, что взят Machpti_total_user + pti_total_systemза окно замера; не прожил окно — обнуляется и причина названаВ журнале падавшего прогона снимок напечатан строкой ниже жалобы:
PROCESSES total 559, threads 946, running 14и обе десятки с величинами. То есть жаловался сторож на числа, которые стоят прямо под ним.Где рвалось на самом деле
Образцы завели коммитом
680b0e5, когда вывод был только русским и печатал долю как%.1f%%. Следующий коммит22885a2научил инструмент двум языкам: слова поехали через словарь, разделитель дробной части — черезl.Pct. Образецзанято ЦП [0-9]+\.[0-9]%с тех пор не совпадал ни с одним языком: по-английски другие слова, по-русски запятая. На бегункеLANGне задан, умолчание — английский.Шаг не зеленел ни разу за всё существование: до прогона
33636268145маковское задание до него не доходило, а начиная с него падало всеми десятью образцами, а не тремя.Что стало
Язык снимка задаётся
--lang, спрашиваются обе редакции. Образцов 28 вместо 10: 24 «строка обязана нести число» и 4 «строка обязана назвать словом непокрытое» (заблокированные процессы, показания датчиков). Заголовок десятки больше не считается числом — рядом стоят образцы на саму строку с размером и на строку с долей: десятка из прочерков прежний образец устраивала. Убрана труба| tee, прятавшая падение снимка за кодом возвратаtee.Отрицательный контроль внутри шага: сторож сперва натравливается на пустой снимок, и заругаться обязан каждый из 28, а не хотя бы один.
Против повторного молчаливого расхождения —
host/snapshot_numbers_test.go: читает самcheck.yml(файл вне модуля, какmain_test.goчитает страницу руководства), печатает маковский снимок и валится, если образец оттуда не нашёлся. Копия образцов в тест не переписана — она разошлась бы так же. Четыре теста, все зелёные при приёмке; три отрицательных контроля проверены возвратом прежней беды.Ничего не заглушено: проверок стало больше, и каждая доказанно умеет упасть.
Что осталось непроверенным — честно
digitdisk statusна маке не запускался: мака нет. Что прогон позеленеет, утверждать нельзя — можно показать основания.33967026504(Apple Silicon и Intel — разные версии, разные величины).go test -count=1во всех трёх сочетаниях признаков зелен, обе маковские цели кросс-собираются сCGO_ENABLED=0.