Как справиться “с диском полные” сценарии?

Перед первым .handle добавьте заголовок, обогащенный выражением, чтобы скопировать payload в заголовок.

Перед вторым .handle используйте .transform() для копирования заголовка обратно в полезную нагрузку.

10
задан Kevin Fairchild 31 October 2008 в 20:25
поделиться

11 ответов

Как пользователь, я хочу программное обеспечение к:

  1. Сохраните мои данные.
  2. Проверьте мою среду как можно раньше, прежде чем я сделаю любую реальную работу.
  3. Если #2 невозможно, скажите мне о любых особых требованиях.
  4. Вымойтесь после себя.

Как разработчик, методы, чтобы сделать это включает:

  1. Прерывание только, когда нет никакой альтернативы и разрешения пользователю шанса сделать новый выбор, если предыдущий перестал работать (см. ответ AgentThirteen).
  2. Проверяя на необходимые ресурсы (память, дисковое пространство, периферийные устройства) как можно раньше. Остановитесь сразу, если отказ является бесспорным; отобразите предупреждение, если успех сомнителен, позволяя пользователю выбрать, продолжить ли.
  3. При предварительном выделении ресурсов для обеспечения они все еще будут доступны, когда они будут требоваться.
  4. При отображении предупреждений и ошибок в немодальных диалоговых окнах, таким образом, пользователь может поместить приложение в фоновом режиме и использовать другие инструменты для решения проблемы.
  5. Поддержание списка "отмены": история действий, которые были выполнены до сих пор. Если приложение должно прерваться, предложите возможность отменить те действия.
7
ответ дан 3 December 2019 в 21:24
поделиться

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

2
ответ дан 3 December 2019 в 21:24
поделиться

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

2
ответ дан 3 December 2019 в 21:24
поделиться

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

2
ответ дан 3 December 2019 в 21:24
поделиться

Для расширения этого далее, там методы для обработки "диска, полного" на SQL-сервере? Никогда не должен происходить я знаю, но это может (и происходить со мной).

Я знаком с тестированием на диск, полный на автономных приложениях для ПК (выраставших программирующий в эру гибкого диска). Даже в более старой системе Unix SCO, которая была очень трудна на пространстве и заморозится, если Вы выполнили его из пространства. Не настолько знакомый с тем, что это означает в современной системе.

0
ответ дан 3 December 2019 в 21:24
поделиться

Вы совершенно правы. Программное обеспечение должно обработать корректно этот вид ситуации.

Можно всегда проверять IOException, чтобы видеть, полон ли диск или если пользователь имеет права записать в то местоположение.

SQL Server обрабатывает эту ситуацию, но не восстанавливается с нее. Когда диск полон..., он прекращает работать.:)

0
ответ дан 3 December 2019 в 21:24
поделиться

Как это часто бывает моя позиция по этому вопросу противоречит традиционным взглядам.

В целом я игнорирую out-of-disk-space тем же путем, я игнорирую из памяти. Частично, потому что невозможно надежно предсказать эти условия. Частично, потому что, когда мы говорим о поведении программного обеспечения в неожиданных условиях (как ошибка Вы не знаете, Вы имеете, какие причины Вы для еды всего диска или памяти) невозможно обосновать достаточно хорошо о ситуации, чтобы кодировать для него И ПРОТЕСТИРОВАТЬ IT. (Безопасно предположить, что, если у Вас есть код, который не тестируется, это не работает).

Однако существуют особые условия, которые указывают на другой подход:

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

  • Если Вы собираетесь записать в находящийся на диске на команде интерактивного пользователя (например, Файл-> Сохраняют), можно поймать отказ и предложить позволять им попробовать еще раз.

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

2
ответ дан 3 December 2019 в 21:24
поделиться

Мы только что добавили поддержку для этого в наш продукт. Работая на встроенном устройстве, мы проверяем, что дисковое пространство ниже 20% (10 МБ) каждый час, и отправляем предупреждения на офисный сервер, регистрируем проблему и предупреждаем пользователя.

Находясь в этом состоянии, мы каждые две минуты проверяем наличие свободного места размером менее 2 Мб, изящно останавливаем приложение (систему указаний) и отказываемся запускаться, пока проблема с пространством не будет решена.

Поскольку наш продукт является основной системой на рабочем месте наших клиентов, это привлекает внимание администраторов.

0
ответ дан 3 December 2019 в 21:24
поделиться

Если я пишу приложение, я могу каким-то образом восстановить его после сбоя ввода-вывода, но если я запускаю чужое приложение, я должен использовать другой подход, который должен освободить как можно больше дискового пространства. Я использую этот метод. Могут быть большие объемы восстанавливаемого дискового пространства: 1) небольшое количество больших файлов, спрятанных глубоко в непонятных каталогах, или 2) большое количество мелких файлов, рассредоточенных по диску, опять же в неочевидных местах. Этот метод найдет их в любом случае.

0
ответ дан 3 December 2019 в 21:24
поделиться

Для тестирования создайте небольшие разделы, в которых будет не хватать места в разных точках, например, как виртуальные ПК, чтобы тесты были корректными и воспроизводимыми.

2
ответ дан 3 December 2019 в 21:24
поделиться

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

0
ответ дан 3 December 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: