문제

대부분의 응용 프로그램은 "디스크 전체"시나리오를 올바르게 처리하지 않습니다.

예 : 설치 프로그램은 디스크가 가득 차서, 모든 오류를 무시하고, 마지막으로 "설치 완료!"를 기꺼이 발표하거나 이메일 프로그램이 방금 다운로드 한 메시지가 저장할 수 없다는 것을 알지 못하고 서버에 알려주는 것을 알지 못합니다. 원본을 삭제합니다.

이 상황을 우아하게 처리하기위한 어떤 기술이 있습니까? 당신은 그들을 사용합니까? 당신은 그들을 테스트합니까?

도움이 되었습니까?

해결책

사용자로서 소프트웨어를 원합니다.

  1. 내 데이터를 보존하십시오.
  2. 가능한 빨리 내 환경을 검증하고 ~ 전에 나는 진짜 일을한다.
  3. 만약에 #2 불가능하다, 말해 주세요 특별한 요구 사항에 대해.
  4. 그 자체로 청소하십시오.

개발자로서이를 수행하는 기술에는 다음이 포함됩니다.

  1. 중단 대안이없고, 이전이 실패하면 사용자가 새로운 선택을 할 수있는 기회를 허용합니다 (Agentthirteen의 답변 참조).
  2. 필요한 자원 (메모리, 디스크 공간, 주변 장치)을 최대한 빨리 확인합니다. 실패가 확실하다면 즉시 중지하십시오. 성공이 확실하지 않은 경우 경고를 표시하여 사용자가 계속할지 여부를 선택할 수 있습니다.
  3. 자원을 사전 할당하여 그들이 할 것입니다 아직 필요할 때 사용할 수 있습니다.
  4. 경고 및 오류 표시 비 모달 대화 상자 따라서 사용자는 응용 프로그램을 백그라운드에 배치하고 다른 도구를 사용하여 문제를 해결할 수 있습니다.
  5. "실행 취소"목록 유지 : 지금까지 수행 된 행동의 역사. 신청서가 중단 해야하는 경우 해당 조치를 취소 할 수있는 기회를 제공하십시오.

다른 팁

파일을 열거나 쓰거나 닫을 때 오류가 있는지 확인합니다. 반면에, 나는 "디스크 전체"오류를 처리하기 위해 특별히 아무것도하지 않습니다. 대신, 나는 기본 OS에 의존하여 다른 유형의 오류를보고하는 것과 같은 방식으로 이러한 오류를보고합니다.

데이터 수집 소프트웨어로 작업합니다. 파일을 생성하기 전에 파일의 크기를 추정 할 수 있기 때문에 (획득하도록 요청 된 데이터의 양을 기준으로), 공간이 떨어질 것으로 예상되는 경우 디스크 공간이 얼마나 많은지에 따라 파일을 작성하기 전에도 경고합니다. .

데이터가 올바르게 저장되거나 사용자가 취소하기로 선택할 때까지 사용자가 루프가있는 블록 내에있는 블록 내에있는 블록 내에있는 것이 중요합니다. 나에게는 분명해 보이지만, 당신이 처리하려고 시도 할 때 예외를 겪고있는 많은 앱을 보았고, 일상에서 실행을 꺼내고 메모리 내 데이터를 잃어 버렸습니다.

종종 그렇듯이이 질문에 대한 나의 입장은 기존의 사고와 모순됩니다.

일반적으로, 나는 메모리를 무시하는 것과 같은 방식으로 디스크 외 공간을 무시합니다. 부분적으로 이러한 조건을 안정적으로 예측하는 것은 불가능하기 때문입니다. 부분적으로 우리가 예상치 못한 조건에서 소프트웨어의 동작에 대해 이야기 할 때 (모든 디스크 나 메모리를 섭취하는 버그처럼) 상황에 대해 충분히 추론 할 수는 없습니다. 그리고 그것을 테스트하십시오. (테스트되지 않은 코드가 있으면 작동하지 않는다고 가정하는 것이 안전합니다).

그러나 다른 접근법을 나타내는 특정 조건이 있습니다.

  • 중요하고 구원받지 않은 사용자 상태 (일부 편집이있는 텍스트 파일과 같은)를 보유하고 있다면 백그라운드에서 데이터를 사전 절약하여 나중에 충돌을 복구 할 수 있도록 고려하십시오.

  • 대화식 사용자의 명령 (예 : 파일-> 저장)을 기반으로 디스크에 편지를 쓰려고하는 경우 실패를 포착하고 다시 시도 할 수 있도록 제안 할 수 있습니다.

두 경우 모두 버그가 버그처럼 보이는 것이 중요합니다. 충돌하는 버그는 충돌해야합니다. 예상치 못한 예외를 포착하고 조용히 계속해서 진단 기회를 빼앗아 소프트웨어를 안전하지 않은 상태로 남겨 두십시오.

테스트의 경우 테스트가 잘 포함되어 있고 재현 가능하도록 가상 PC와 같이 다른 지점에서 공간이 부족한 작은 파티션을 만듭니다.

이것을 더 확장하기 위해 SQL 서버에서 "디스크 전체"를 처리하는 기술이 있습니까? 내가 알지 못하면 안된다. 그러나 그것은 할 수있다 (그리고 나에게 일어났다).

독립형 PC 앱에서 디스크 전체 테스트 (플로피 디스크 시대에 프로그래밍을 자란) 테스트에 익숙합니다. 공간에서 매우 빡빡한 오래된 SCO UNIX 시스템에서도 공간에서 벗어나면 얼어 붙을 것입니다. 현대 시스템에서 의미하는 바에 익숙하지 않습니다.

당신은 완전히 옳습니다. 소프트웨어는 이런 종류의 상황을 우아하게 처리해야합니다.

디스크가 가득 찬지 또는 사용자가 해당 위치에 쓸 권한이 있는지 확인하려면 항상 IOException을 확인할 수 있습니다.

SQL Server는 이러한 상황을 처리하지만 회복하지는 않습니다. 디스크가 가득 차면 작동이 멈 춥니 다. :)

우리는 우리 제품에 이것에 대한 지원을 추가했습니다. 임베디드 장치에서 실행하면 디스크 공간이 매시간 20% (10MB) 미만인지 확인하고 사무실 서버에 경고를 전송하고 문제를 기록한 다음 사용자에게 경고합니다.

이 상태에서 2MB 이하의 공간을 2 분마다 확인하고 응용 프로그램 (안내 시스템)을 우아하게 중지하고 공간 문제가 해결 될 때까지 실행을 거부합니다.

당사의 제품은 직장에서 핵심 시스템이므로 관리를 관리합니다.

앱을 작성하는 경우 I/O 실패에서 어떤 식 으로든 복구 할 수 있지만 다른 사람의 앱을 실행하는 경우 다른 접근 방식을 취해야합니다. 이는 가능한 한 많은 디스크 공간을 복구해야합니다. . 이것이 내가 사용하는 방법입니다. 1) 모호한 디렉토리에 깊이 숨겨져있는 소수의 큰 파일 또는 2) 디스크 위에 분산 된 많은 작은 파일, 다시는 불쾌한 위치에서 다시 많은 수의 작은 파일이 복구 가능한 디스크 공간이 많이있을 수 있습니다. 이 방법은 어느 쪽이든 그것들을 찾습니다.

예, 아마도 이런 종류의 문제에 대해 "똑똑한"무언가를 시도하는 것은 정말 나쁜 생각 일 것입니다. 기본적으로 당신이 할 수있는 가장 많은 것은 손실을 최소화하는 것입니다. 구원받지 않은 사용자 데이터가있는 대화식 앱의 경우 사용자가 문제를 해결할 기회가 있기 전에 충돌을 피하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top