void CDiskPartHandlerBase::open() { unsigned location; StringBuffer filePath; if (!(globals->getPropBool("@autoCopyBackup", true)?ensurePrimary(&activity, *partDesc, iFile, location, filePath):getBestFilePart(&activity, *partDesc, iFile, location, filePath, &activity))) { StringBuffer locations; IException *e = MakeActivityException(&activity, TE_FileNotFound, "No physical file part for logical file %s, found at given locations: %s (Error = %d)", activity.logicalFilename.get(), getFilePartLocations(*partDesc, locations).str(), GetLastError()); EXCLOG(e, NULL); throw e; } filename.set(iFile->queryFilename()); ActPrintLog(&activity, "%s[part=%d]: reading physical file '%s' (logical file = %s)", kindStr, which, filePath.str(), activity.logicalFilename.get()); if (checkFileCrc) { CDateTime createTime, modifiedTime, accessedTime; iFile->getTime(&createTime, &modifiedTime, &accessedTime); const char *descModTimeStr = partDesc->queryProperties().queryProp("@modified"); CDateTime descModTime; descModTime.setString(descModTimeStr); if (!descModTime.equals(modifiedTime, false)) { StringBuffer diskTimeStr; ActPrintLog(&activity, "WARNING: file (%s); modified date stamps on disk (%s) are not equal to published modified data (%s)", filePath.str(), modifiedTime.getString(diskTimeStr).str(), descModTimeStr); } } ActPrintLog(&activity, "%s[part=%d]: Base offset to %"I64F"d", kindStr, which, fileBaseOffset); if (compressed) { ActPrintLog(&activity, "Reading %s compressed file: %s", (NULL != activity.eexp.get())?"encrypted":blockCompressed?"block":"row", filename.get()); if (checkFileCrc) { checkFileCrc = false; if (activity.crcCheckCompressed) // applies to encrypted too, (optional, default off) { ActPrintLog(&activity, "Calculating crc for file: %s", filename.get()); unsigned calcCrc = iFile->getCRC(); // NB: for compressed files should always be ~0 ActPrintLog(&activity, "Calculated crc = %x, storedCrc = %x", calcCrc, storedCrc); if (calcCrc != storedCrc) { IThorException *e = MakeActivityException(&activity, TE_FileCrc, "CRC Failure validating compressed file: %s", iFile->queryFilename()); e->setAudience(MSGAUD_operator); throw e; } } } } }
static IKeyIndex *openKeyPart(CActivityBase *activity, const char *logicalFilename, IPartDescriptor &partDesc) { unsigned location; StringBuffer filePath; OwnedIFile ifile; if (!(globals->getPropBool("@autoCopyBackup", true)?ensurePrimary(activity, partDesc, ifile, location, filePath):getBestFilePart(activity, partDesc, ifile, location, filePath, activity))) { StringBuffer locations; IException *e = MakeActivityException(activity, TE_FileNotFound, "No physical file part for logical key file %s, found at given locations: %s (Error = %d)", logicalFilename, getFilePartLocations(partDesc, locations).str(), GetLastError()); EXCLOG(e, NULL); throw e; } unsigned crc; partDesc.getCrc(crc); return createKeyIndex(filePath.str(), crc, false, false); }