ErrorCode LogParser::processHeaderEntry()

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;
}