|
|
|
@ -56,15 +56,17 @@ bool LogReader::load(const std::string &url, std::atomic<bool> *abort, bool loca |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool LogReader::load(const std::byte *data, size_t size, std::atomic<bool> *abort) { |
|
|
|
|
raw_ = decompressBZ2(data, size); |
|
|
|
|
raw_ = decompressBZ2(data, size, abort); |
|
|
|
|
if (raw_.empty()) { |
|
|
|
|
std::cout << "failed to decompress log" << std::endl; |
|
|
|
|
if (!(abort && *abort)) { |
|
|
|
|
std::cout << "failed to decompress log" << std::endl; |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
kj::ArrayPtr<const capnp::word> words((const capnp::word *)raw_.data(), raw_.size() / sizeof(capnp::word)); |
|
|
|
|
while (words.size() > 0) { |
|
|
|
|
while (words.size() > 0 && !(abort && *abort)) { |
|
|
|
|
|
|
|
|
|
#ifdef HAS_MEMORY_RESOURCE |
|
|
|
|
Event *evt = new (mbr_) Event(words); |
|
|
|
@ -91,11 +93,14 @@ bool LogReader::load(const std::byte *data, size_t size, std::atomic<bool> *abor |
|
|
|
|
} |
|
|
|
|
} catch (const kj::Exception &e) { |
|
|
|
|
std::cout << "failed to parse log : " << e.getDescription().cStr() << std::endl; |
|
|
|
|
if (events.empty()) return false; |
|
|
|
|
|
|
|
|
|
std::cout << "read " << events.size() << " events from corrupt log" << std::endl; |
|
|
|
|
if (!events.empty()) { |
|
|
|
|
std::cout << "read " << events.size() << " events from corrupt log" << std::endl; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
std::sort(events.begin(), events.end(), Event::lessThan()); |
|
|
|
|
return true; |
|
|
|
|
if (!events.empty() && !(abort && *abort)) { |
|
|
|
|
std::sort(events.begin(), events.end(), Event::lessThan()); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|