separate shred and check process

This commit is contained in:
2022-09-27 21:58:59 +02:00
parent 392fe67aa2
commit b73e1765b5
5 changed files with 45 additions and 18 deletions

View File

@ -177,7 +177,11 @@ int Shred::shredDrive(Drive* drive, int* ipSignalFd)
tfng_prng_seedkey(NULL); //reset random generator
#ifdef ZERO_CHECK_ALERT
drive->bWasShredded = true;
Logger::logThis()->info("Shred-Task finished - Drive: " + drive->getModelName() + "-" + drive->getSerial() + " @" + address.str());
#ifdef ZERO_CHECK
drive->state=Drive::CHECK_ACTIVE;
Logger::logThis()->info("Check-Task started - Drive: " + drive->getModelName() + "-" + drive->getSerial() + " @" + address.str());
drive->u32DriveChecksumAferShredding = uiCalcChecksum(driveFileDiscr, drive, ipSignalFd);
#ifdef LOG_LEVEL_HIGH
if (drive->u32DriveChecksumAferShredding != 0)
@ -194,12 +198,11 @@ int Shred::shredDrive(Drive* drive, int* ipSignalFd)
cleanup();
if(drive->state == Drive::SHRED_ACTIVE)
if((drive->state == Drive::SHRED_ACTIVE) || (drive->state == Drive::CHECK_ACTIVE))
{
drive->bWasShredded = true;
drive->state= Drive::NONE;
drive->setTaskPercentage(0.0);
Logger::logThis()->info("Finished shred for: " + drive->getModelName() + "-" + drive->getSerial());
Logger::logThis()->info("Finished shred/check for: " + drive->getModelName() + "-" + drive->getSerial());
}
return 0;
}
@ -213,7 +216,7 @@ double Shred::calcProgress()
{
unsigned int uiMaxShredIteration = SHRED_ITERATIONS;
#ifdef ZERO_CHECK_ALERT
#ifdef ZERO_CHECK
uiMaxShredIteration++; //increment because we will check after SHRED_ITERATIONS the drive for non-zero bytes
#endif
return (double) (((double) ulDriveByteOverallCount) / ((double)this->ulDriveByteSize*uiMaxShredIteration))*100.0f;
@ -271,16 +274,22 @@ unsigned int Shred::uiCalcChecksum(fileDescriptor file,Drive* drive, int* ipSign
ulDriveByteOverallCount += iReadBytes;
d32Percent = this->calcProgress();
drive->sShredSpeed.ulSpeedMetricBytesWritten += iReadBytes;
#ifdef LOG_LEVEL_HIGH
Logger::logThis()->info("Shred-Task (Checksum): ByteCount: " + to_string(ulDriveByteCounter) + " - progress: " + to_string(d32Percent) + " - Drive: " + drive->getSerial());
#endif
if((d32Percent-d32TmpPercent) >= 0.01)
if(((d32Percent-d32TmpPercent) >= 0.01) || (d32Percent == 100.0))
{
drive->setTaskPercentage(d32TmpPercent);
d32TmpPercent = d32Percent;
#ifdef LOG_LEVEL_HIGH
Logger::logThis()->info("send progress signal to main loop (check)");
#endif
write(*ipSignalFd, "A",1);
}
}
drive->bWasChecked = true;
return uiChecksum;
}