summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@oath.com>2018-05-03 16:04:39 +0200
committerHenning Baldersheim <balder@oath.com>2018-05-03 16:04:39 +0200
commita6267f0546d61a878d531bdfe23b3bc09d71aa31 (patch)
tree529a82d25e6b850a6a6ff83119e2723ddf05d42f /searchlib
parentcf9712897e9ba0bb10ec04ce4305e7646c3e70be (diff)
Use std::shared_ptr for large blobs.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/docstore/visitcache.cpp16
-rw-r--r--searchlib/src/vespa/searchlib/docstore/visitcache.h4
2 files changed, 11 insertions, 9 deletions
diff --git a/searchlib/src/vespa/searchlib/docstore/visitcache.cpp b/searchlib/src/vespa/searchlib/docstore/visitcache.cpp
index 7e881d8de76..a3fc171eef2 100644
--- a/searchlib/src/vespa/searchlib/docstore/visitcache.cpp
+++ b/searchlib/src/vespa/searchlib/docstore/visitcache.cpp
@@ -38,7 +38,7 @@ BlobSet::BlobSet() :
_buffer(Alloc::alloc(0, 16 * MemoryAllocator::HUGEPAGE_SIZE), 0)
{ }
-BlobSet::~BlobSet() {}
+BlobSet::~BlobSet() = default;
namespace {
@@ -80,7 +80,7 @@ CompressedBlobSet::CompressedBlobSet() :
{
}
-CompressedBlobSet::~CompressedBlobSet() { }
+CompressedBlobSet::~CompressedBlobSet() = default;
CompressedBlobSet::CompressedBlobSet(const CompressionConfig &compression, const BlobSet & uncompressed) :
@@ -92,8 +92,10 @@ CompressedBlobSet::CompressedBlobSet(const CompressionConfig &compression, const
DataBuffer compressed;
ConstBufferRef org = uncompressed.getBuffer();
_compression = vespalib::compression::compress(compression, org, compressed, false);
- _buffer.resize(compressed.getDataLen());
- memcpy(_buffer, compressed.getData(), compressed.getDataLen());
+ _buffer = std::make_shared<vespalib::MallocPtr>(compressed.getDataLen());
+ memcpy(*_buffer, compressed.getData(), compressed.getDataLen());
+ } else {
+ _buffer = std::make_shared<vespalib::MallocPtr>();
}
}
@@ -105,13 +107,13 @@ CompressedBlobSet::getBlobSet() const
DataBuffer uncompressed(0, 1, Alloc::alloc(0, 16 * MemoryAllocator::HUGEPAGE_SIZE));
if ( ! _positions.empty() ) {
decompress(_compression, getBufferSize(_positions),
- ConstBufferRef(_buffer.c_str(), _buffer.size()), uncompressed, false);
+ ConstBufferRef(_buffer->c_str(), _buffer->size()), uncompressed, false);
}
return BlobSet(_positions, uncompressed.stealBuffer());
}
size_t CompressedBlobSet::size() const {
- return _positions.capacity() * sizeof(BlobSet::Positions::value_type) + _buffer.size();
+ return _positions.capacity() * sizeof(BlobSet::Positions::value_type) + _buffer->size();
}
namespace {
@@ -226,7 +228,7 @@ VisitCache::Cache::Cache(BackingStore & b, size_t maxBytes) :
Parent(b, maxBytes)
{ }
-VisitCache::Cache::~Cache() { }
+VisitCache::Cache::~Cache() = default;
void
VisitCache::Cache::removeKey(uint32_t subKey) {
diff --git a/searchlib/src/vespa/searchlib/docstore/visitcache.h b/searchlib/src/vespa/searchlib/docstore/visitcache.h
index effc6c19a21..5070f645557 100644
--- a/searchlib/src/vespa/searchlib/docstore/visitcache.h
+++ b/searchlib/src/vespa/searchlib/docstore/visitcache.h
@@ -85,8 +85,8 @@ public:
BlobSet getBlobSet() const;
private:
CompressionConfig::Type _compression;
- BlobSet::Positions _positions;
- vespalib::MallocPtr _buffer;
+ BlobSet::Positions _positions;
+ std::shared_ptr<vespalib::MallocPtr> _buffer;
};
/**