mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
Speed up Snappy uncompression, new Logger interface.
- Removed one copy of an uncompressed block contents changing
the signature of Snappy_Uncompress() so it uncompresses into a
flat array instead of a std::string.
Speeds up readrandom ~10%.
- Instead of a combination of Env/WritableFile, we now have a
Logger interface that can be easily overridden applications
that want to supply their own logging.
- Separated out the gcc and Sun Studio parts of atomic_pointer.h
so we can use 'asm', 'volatile' keywords for Sun Studio.
git-svn-id: https://leveldb.googlecode.com/svn/trunk@39 62dab493-f737-651d-591e-8d6aee1b9529
This commit is contained in:
@@ -107,16 +107,20 @@ Status ReadBlock(RandomAccessFile* file,
|
||||
// Ok
|
||||
break;
|
||||
case kSnappyCompression: {
|
||||
std::string decompressed;
|
||||
if (!port::Snappy_Uncompress(data, n, &decompressed)) {
|
||||
size_t ulength = 0;
|
||||
if (!port::Snappy_GetUncompressedLength(data, n, &ulength)) {
|
||||
delete[] buf;
|
||||
s = Status::Corruption("corrupted compressed block contents");
|
||||
return s;
|
||||
return Status::Corruption("corrupted compressed block contents");
|
||||
}
|
||||
delete[] buf; // Done with uncompressed data
|
||||
buf = new char[decompressed.size()];
|
||||
memcpy(buf, decompressed.data(), decompressed.size());
|
||||
n = decompressed.size();
|
||||
char* ubuf = new char[ulength];
|
||||
if (!port::Snappy_Uncompress(data, n, ubuf)) {
|
||||
delete[] buf;
|
||||
delete[] ubuf;
|
||||
return Status::Corruption("corrupted compressed block contents");
|
||||
}
|
||||
delete[] buf;
|
||||
buf = ubuf;
|
||||
n = ulength;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user