ГСЧ Валидаты: всегда живая проверка — если seed пропал (перезагрузка ВМ), мастер снова показывает датчик

Раньше готовность кэшировалась в памяти и не возвращалась в «не готов»: после
перезагрузки ВМ seed Валидаты пропадал, а bj рапортовал «готов» и прятал карточку
датчика — пересборка справочника падала без понятной причины. Теперь rngCheck
каждый раз проверяет живьём у воркера.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-20 17:34:33 +03:00
parent 93d23dae79
commit 8d71543ac3
+12 -15
View File
@@ -24,7 +24,8 @@ import (
var rngDir = "/var/lib/bj/rng"
// rngReady — датчик уже инициализирован (запоминаем: обратно в «не готов» он сам не возвращается).
// rngReady — последняя известная готовность датчика (кэш UI). На виртуалке готовность может
// вернуться в «не готов» (пропал seed), поэтому rngCheck всегда перепроверяет живьём.
var rngReady struct {
sync.Mutex
ok bool
@@ -69,21 +70,17 @@ func rngCheck(ctx context.Context) rngView {
if rngLive(s, age) {
return rngView{OK: true, State: s.State, Progress: s.Progress, Window: s.Window}
}
rngReady.Lock()
ready := rngReady.ok
rngReady.Unlock()
if !ready {
res, err := runKeymediaOp(ctx, "rng-status", nil)
if err != nil {
return rngView{Error: "проверка датчика не удалась: " + errStr(err)}
}
ready = res["ready"] == true
if ready {
rngReady.Lock()
rngReady.ok = true
rngReady.Unlock()
}
// Всегда живая проверка у воркера: на виртуальной машине seed Валидаты
// (/opt/Validata/VDCSP/.crysvc.seed) может пропасть при перезагрузке или рестарте
// службы ключей — тогда датчик снова «не готов», и мастер должен снова его запросить.
res, err := runKeymediaOp(ctx, "rng-status", nil)
if err != nil {
return rngView{Error: "проверка датчика не удалась: " + errStr(err)}
}
ready := res["ready"] == true
rngReady.Lock()
rngReady.ok = ready
rngReady.Unlock()
v := rngView{OK: true, Ready: ready}
if age < 10*time.Minute { // итог недавнего сеанса — показать, чем кончился
switch {