Opened 5 years ago

Closed 5 years ago

#41 closed улучшение (fixed)

Записывать сертификат в память синхронно

Reported by: AlexLir Owned by: alx
Priority: major Milestone: 1 очередь
Keywords: Cc: Director, san

Description (last modified by alx)

Если в устройство загрузить сертификат, а затем через некоторое время(минуты) ему отключить питание, сертификат пропадает.
Если же, после загрузки сертификата, выключить устройство правильно(например нажав кнопку перезагрузка в веб интерфейсе) сертификат остаётся и при следующих выключениях питания не пропадает.

Дополнено alx:

На случай, если пользователь забудет перед выключением питания нажать "перезагрузка", а также на случай, если питание неожиданно пропадет само, предлагается рассмотреть возможность записывать сертификаты и ключ в память синхронно, чтобы уменьшить вероятность потери записанных данных при внезапном отключении питания.

Change History (11)

comment:1 by AlexLir, 5 years ago

Owner: set to alx
Status: newassigned

comment:2 by alx, 5 years ago

Resolution: invalid
Status: assignedclosed

Это не баг. В любом современном компьютере данные, записываемые в постоянную память, кэшируются. Это значит, что при получении от приложения запроса на запись данных данные не записываются сразу в постоянную память, а помещается в оперативную память (ставится в очередь на последующую запись), после чего приложение сразу получает ответ о том, что операция записи успешно выполнена, что позволяет приложению немедленно продолжить работу. Реальная же запись данных в постоянную память происходит позже. Именно поэтому все современные компьютеры нельзя выключать простым выдергиванием вилки из розетки, а надо сначала дать команду операционной системе завершить работу, чтобы все данные из кэша успели записаться на постоянный носитель. Если этого не сделать, возможна потеря данных, подобная описанной в этом тикете.

Собственно, ты же сам пишешь, что если все сделать правильно, то данные сертификата не пропадают. Вот и делай правильно!

comment:3 by san, 5 years ago

Summary: После выключения питания пропадает сертификатЗаписывать сертификат в постоянную память

Алексей, согласен что багом это назвать нельзя, но наше оборудование часто работает в условиях, где внезапное отключение питания - вероятное событие.
Здесь же с момента загрузки сертификата прошло достаточно большое время и пользователь считал, что настройки сохранены.
Думаю, что будет правильно, если любые настройки сделанные пользователем из веб-интерфейса будут "немедленно" сохранены в постоянную память, предлагаю это как улучшение.

comment:4 by san, 5 years ago

Resolution: invalid
Status: closedreopened
Type: багулучшение

comment:5 by alx, 5 years ago

Description: modified (diff)
Summary: Записывать сертификат в постоянную памятьЗаписывать сертификат в память синхронно

Я изменил описание тикета, чтобы из него была ясна суть предложения (ибо сертификат и так записывается в постоянную память, предлагать это бессмысленно).

comment:6 by san, 5 years ago

Да, спасибо.
А остальные настройки вебморды сейчас записываются несинхронно?

in reply to:  6 comment:7 by alx, 5 years ago

Replying to san:

А остальные настройки вебморды сейчас записываются несинхронно?

Сейчас все записывается асинхронно. Синхронная запись замедлит работу компьютера во много раз (возможно, на порядок и даже сильнее).

comment:8 by san, 5 years ago

Ну нам ведь не нужно записывать синхронно всё...

comment:9 by san, 5 years ago

Priority: criticalmajor

in reply to:  8 comment:10 by alx, 5 years ago

Replying to san:

Ну нам ведь не нужно записывать синхронно всё...

Я догадался. Поэтому и написал: "рассмотреть возможность записывать сертификаты и ключ в память синхронно"... Может быть при открытии файла можно какие-то флаги установить, чтобы запись в данный конкретный файл происходила синхронно...

comment:11 by alx, 5 years ago

Resolution: fixed
Status: reopenedclosed

In 158/smartCrypto:

Сразу после записи сертификатов через web-интерфейс выполняется sync()
для уменьшения вероятности потери записанных данных при внезапном отключении питания.
Closes #41.

Note: See TracTickets for help on using tickets.