in util/TransferLogManager.cpp [767:812]
ErrorCode LogParser::processHeaderEntry(char *buf, int64_t max, int64_t size,
string &senderIp) {
if (size > max) {
WLOG(ERROR) << "Bad size " << size << " vs max " << max;
return INVALID_LOG;
}
int64_t timestamp;
int logVersion;
string logRecoveryId;
int64_t logConfig;
if (!encoderDecoder_.decodeLogHeader(buf, size, timestamp, logVersion,
logRecoveryId, senderIp, logConfig)) {
WLOG(ERROR) << "Couldn't decode the log header";
return INVALID_LOG;
}
if (logVersion != TransferLogManager::WLOG_VERSION) {
WLOG(ERROR) << "Can not parse log version " << logVersion
<< ", parser version " << TransferLogManager::WLOG_VERSION;
return INVALID_LOG;
}
if (senderIp.empty()) {
WLOG(ERROR) << "Log header has empty sender ip";
return INVALID_LOG;
}
if (parseOnly_) {
std::cout << getFormattedTimestamp(timestamp)
<< " Header entry, log-version " << logVersion << " recovery-id "
<< logRecoveryId << " sender-ip " << senderIp << " config "
<< logConfig << std::endl;
// we do not perform verifications for parse only mode
headerParsed_ = true;
return OK;
}
if (recoveryId_ != logRecoveryId) {
WLOG(ERROR) << "Current recovery-id does not match with log recovery-id "
<< recoveryId_ << " " << logRecoveryId;
return INCONSISTENT_DIRECTORY;
}
if (config_ != logConfig) {
WLOG(ERROR) << "Current config does not match with log config " << config_
<< " " << logConfig;
return INCONSISTENT_DIRECTORY;
}
headerParsed_ = true;
return OK;
}