summaryrefslogtreecommitdiffstats
path: root/persistence
diff options
context:
space:
mode:
authorHaavard <havardpe@yahoo-inc.com>2017-03-20 13:04:33 +0000
committerHaavard <havardpe@yahoo-inc.com>2017-03-27 09:53:26 +0000
commit23abed1a0bc4f4c5ea47b43fc7ea0645e63a26e6 (patch)
tree6d943bbe31738f7e9b84979e4fd63dfd76eef580 /persistence
parent8844ccb7297e8a5120dd903c85e923f2f93aa693 (diff)
remove most usage of LinkedPtr from vespa
Diffstat (limited to 'persistence')
-rw-r--r--persistence/src/main/java/com/yahoo/persistence/spi/conformance/ConformanceTest.java4
-rw-r--r--persistence/src/tests/dummyimpl/dummypersistence_test.cpp6
-rw-r--r--persistence/src/tests/proxy/mockprovider.h4
-rw-r--r--persistence/src/vespa/persistence/conformancetest/conformancetest.cpp51
-rw-r--r--persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp66
-rw-r--r--persistence/src/vespa/persistence/dummyimpl/dummypersistence.h22
-rw-r--r--persistence/src/vespa/persistence/proxy/providerproxy.cpp6
-rw-r--r--persistence/src/vespa/persistence/proxy/providerstub.cpp2
-rw-r--r--persistence/src/vespa/persistence/spi/docentry.h5
-rw-r--r--persistence/src/vespa/persistence/spi/result.h10
10 files changed, 86 insertions, 90 deletions
diff --git a/persistence/src/main/java/com/yahoo/persistence/spi/conformance/ConformanceTest.java b/persistence/src/main/java/com/yahoo/persistence/spi/conformance/ConformanceTest.java
index 80aedc3263d..58a494a7e4d 100644
--- a/persistence/src/main/java/com/yahoo/persistence/spi/conformance/ConformanceTest.java
+++ b/persistence/src/main/java/com/yahoo/persistence/spi/conformance/ConformanceTest.java
@@ -1497,7 +1497,7 @@ public abstract class ConformanceTest extends TestCase {
// }
//
// size_t
-// getRemoveEntryCount(const std::vector<spi::DocEntry::LP>& entries)
+// getRemoveEntryCount(const std::vector<spi::DocEntry::UP>& entries)
// {
// size_t ret = 0;
// for (size_t i = 0; i < entries.size(); ++i) {
@@ -1511,7 +1511,7 @@ public abstract class ConformanceTest extends TestCase {
// List<DocEntry>
// getEntriesFromChunks(const std::vector<Chunk>& chunks)
// {
-// std::vector<spi::DocEntry::LP> ret;
+// std::vector<spi::DocEntry::UP> ret;
// for (size_t chunk = 0; chunk < chunks.size(); ++chunk) {
// for (size_t i = 0; i < chunks[chunk]._entries.size(); ++i) {
// ret.push_back(chunks[chunk]._entries[i]);
diff --git a/persistence/src/tests/dummyimpl/dummypersistence_test.cpp b/persistence/src/tests/dummyimpl/dummypersistence_test.cpp
index 1a7c43db600..a408eec739f 100644
--- a/persistence/src/tests/dummyimpl/dummypersistence_test.cpp
+++ b/persistence/src/tests/dummyimpl/dummypersistence_test.cpp
@@ -19,7 +19,7 @@ struct Fixture {
BucketContent content;
void insert(DocumentId id, Timestamp timestamp, int meta_flags) {
- content.insert(DocEntry::LP(new DocEntry(timestamp, meta_flags, id)));
+ content.insert(DocEntry::UP(new DocEntry(timestamp, meta_flags, id)));
}
Fixture() {
@@ -37,14 +37,14 @@ TEST("require that empty BucketContent behaves") {
}
TEST_F("require that BucketContent can retrieve by timestamp", Fixture) {
- DocEntry::LP entry = f.content.getEntry(Timestamp(1));
+ DocEntry::SP entry = f.content.getEntry(Timestamp(1));
ASSERT_TRUE(entry.get());
ASSERT_TRUE(entry->getDocumentId());
ASSERT_EQUAL("doc:test:1", entry->getDocumentId()->toString());
}
TEST_F("require that BucketContent can retrieve by doc id", Fixture) {
- DocEntry::LP entry = f.content.getEntry(DocumentId("doc:test:2"));
+ DocEntry::SP entry = f.content.getEntry(DocumentId("doc:test:2"));
ASSERT_TRUE(entry.get());
ASSERT_TRUE(entry->getDocumentId());
ASSERT_EQUAL("doc:test:2", entry->getDocumentId()->toString());
diff --git a/persistence/src/tests/proxy/mockprovider.h b/persistence/src/tests/proxy/mockprovider.h
index 42d21d393b8..fa15334625d 100644
--- a/persistence/src/tests/proxy/mockprovider.h
+++ b/persistence/src/tests/proxy/mockprovider.h
@@ -111,8 +111,8 @@ struct MockProvider : PersistenceProvider {
virtual IterateResult iterate(IteratorId, uint64_t, Context&) const {
last_called = ITERATE;
IterateResult::List result;
- result.push_back(DocEntry::LP(new DocEntry(Timestamp(1), 0)));
- return IterateResult(result, true);
+ result.push_back(DocEntry::UP(new DocEntry(Timestamp(1), 0)));
+ return IterateResult(std::move(result), true);
}
virtual Result destroyIterator(IteratorId, Context&) {
diff --git a/persistence/src/vespa/persistence/conformancetest/conformancetest.cpp b/persistence/src/vespa/persistence/conformancetest/conformancetest.cpp
index 861b0afc100..7af0ea68da1 100644
--- a/persistence/src/vespa/persistence/conformancetest/conformancetest.cpp
+++ b/persistence/src/vespa/persistence/conformancetest/conformancetest.cpp
@@ -118,13 +118,13 @@ struct DocAndTimestamp
*/
struct Chunk
{
- std::vector<DocEntry::LP> _entries;
+ std::vector<DocEntry::UP> _entries;
};
struct DocEntryIndirectTimestampComparator
{
- bool operator()(const DocEntry::LP& e1,
- const DocEntry::LP& e2) const
+ bool operator()(const DocEntry::UP& e1,
+ const DocEntry::UP& e2) const
{
return e1->getTimestamp() < e2->getTimestamp();
}
@@ -145,18 +145,12 @@ doIterate(PersistenceProvider& spi,
std::vector<Chunk> chunks;
while (true) {
- std::vector<DocEntry::LP> entries;
-
Context context(defaultLoadType, Priority(0), Trace::TraceLevel(0));
IterateResult result(spi.iterate(id, maxByteSize, context));
CPPUNIT_ASSERT_EQUAL(Result::NONE, result.getErrorCode());
- for (size_t i = 0; i < result.getEntries().size(); ++i) {
- entries.push_back(result.getEntries()[i]);
- }
- chunks.push_back(Chunk());
- chunks.back()._entries.swap(entries);
+ chunks.push_back(Chunk{std::move(result.steal_entries())});
if (result.isCompleted()
|| (maxChunks != 0 && chunks.size() >= maxChunks))
{
@@ -167,7 +161,7 @@ doIterate(PersistenceProvider& spi,
}
size_t
-getRemoveEntryCount(const std::vector<spi::DocEntry::LP>& entries)
+getRemoveEntryCount(const std::vector<spi::DocEntry::UP>& entries)
{
size_t ret = 0;
for (size_t i = 0; i < entries.size(); ++i) {
@@ -178,13 +172,13 @@ getRemoveEntryCount(const std::vector<spi::DocEntry::LP>& entries)
return ret;
}
-std::vector<DocEntry::LP>
+std::vector<DocEntry::UP>
getEntriesFromChunks(const std::vector<Chunk>& chunks)
{
- std::vector<spi::DocEntry::LP> ret;
+ std::vector<spi::DocEntry::UP> ret;
for (size_t chunk = 0; chunk < chunks.size(); ++chunk) {
for (size_t i = 0; i < chunks[chunk]._entries.size(); ++i) {
- ret.push_back(chunks[chunk]._entries[i]);
+ ret.push_back(DocEntry::UP(chunks[chunk]._entries[i]->clone()));
}
}
std::sort(ret.begin(),
@@ -194,12 +188,12 @@ getEntriesFromChunks(const std::vector<Chunk>& chunks)
}
-std::vector<DocEntry::LP>
+std::vector<DocEntry::UP>
iterateBucket(PersistenceProvider& spi,
const Bucket& bucket,
IncludedVersions versions)
{
- std::vector<DocEntry::LP> ret;
+ std::vector<DocEntry::UP> ret;
DocumentSelection docSel("");
Selection sel(docSel);
@@ -218,11 +212,10 @@ iterateBucket(PersistenceProvider& spi,
spi.iterate(iter.getIteratorId(),
std::numeric_limits<int64_t>().max(), context);
if (result.getErrorCode() != Result::NONE) {
- return std::vector<DocEntry::LP>();
- }
- for (size_t i = 0; i < result.getEntries().size(); ++i) {
- ret.push_back(result.getEntries()[i]);
+ return std::vector<DocEntry::UP>();
}
+ auto list = result.steal_entries();
+ std::move(list.begin(), list.end(), std::back_inserter(ret));
if (result.isCompleted()) {
break;
}
@@ -240,7 +233,7 @@ verifyDocs(const std::vector<DocAndTimestamp>& wanted,
const std::vector<Chunk>& chunks,
const std::set<string>& removes = std::set<string>())
{
- std::vector<DocEntry::LP> retrieved(
+ std::vector<DocEntry::UP> retrieved(
getEntriesFromChunks(chunks));
size_t removeCount = getRemoveEntryCount(retrieved);
// Ensure that we've got the correct number of puts and removes
@@ -686,7 +679,7 @@ void ConformanceTest::testPutDuplicate() {
CPPUNIT_ASSERT_EQUAL(1, (int)info.getDocumentCount());
CPPUNIT_ASSERT_EQUAL(checksum, info.getChecksum());
}
- std::vector<DocEntry::LP> entries(
+ std::vector<DocEntry::UP> entries(
iterateBucket(*spi, bucket, ALL_VERSIONS));
CPPUNIT_ASSERT_EQUAL(size_t(1), entries.size());
}
@@ -711,7 +704,7 @@ void ConformanceTest::testRemove() {
CPPUNIT_ASSERT_EQUAL(1, (int)info.getDocumentCount());
CPPUNIT_ASSERT(info.getChecksum() != 0);
- std::vector<DocEntry::LP> entries(
+ std::vector<DocEntry::UP> entries(
iterateBucket(*spi, bucket, NEWEST_DOCUMENT_ONLY));
CPPUNIT_ASSERT_EQUAL(size_t(1), entries.size());
}
@@ -731,13 +724,13 @@ void ConformanceTest::testRemove() {
CPPUNIT_ASSERT_EQUAL(true, result2.wasFound());
}
{
- std::vector<DocEntry::LP> entries(iterateBucket(*spi,
+ std::vector<DocEntry::UP> entries(iterateBucket(*spi,
bucket,
NEWEST_DOCUMENT_ONLY));
CPPUNIT_ASSERT_EQUAL(size_t(0), entries.size());
}
{
- std::vector<DocEntry::LP> entries(iterateBucket(*spi,
+ std::vector<DocEntry::UP> entries(iterateBucket(*spi,
bucket,
NEWEST_DOCUMENT_OR_REMOVE));
@@ -820,7 +813,7 @@ void ConformanceTest::testRemoveMerge() {
// Remove entry should exist afterwards
{
- std::vector<DocEntry::LP> entries(iterateBucket(
+ std::vector<DocEntry::UP> entries(iterateBucket(
*spi, bucket, ALL_VERSIONS));
CPPUNIT_ASSERT_EQUAL(size_t(2), entries.size());
// Timestamp-sorted by iterateBucket
@@ -848,7 +841,7 @@ void ConformanceTest::testRemoveMerge() {
}
// Must have new remove. We don't check for the presence of the old remove.
{
- std::vector<DocEntry::LP> entries(iterateBucket(*spi, bucket, ALL_VERSIONS));
+ std::vector<DocEntry::UP> entries(iterateBucket(*spi, bucket, ALL_VERSIONS));
CPPUNIT_ASSERT(entries.size() >= 2);
CPPUNIT_ASSERT_EQUAL(removeId, *entries.back()->getDocumentId());
CPPUNIT_ASSERT_EQUAL(Timestamp(11), entries.back()->getTimestamp());
@@ -875,7 +868,7 @@ void ConformanceTest::testRemoveMerge() {
}
// Must have newest remove. We don't check for the presence of the old remove.
{
- std::vector<DocEntry::LP> entries(iterateBucket(*spi, bucket, ALL_VERSIONS));
+ std::vector<DocEntry::UP> entries(iterateBucket(*spi, bucket, ALL_VERSIONS));
CPPUNIT_ASSERT(entries.size() >= 2);
CPPUNIT_ASSERT_EQUAL(removeId, *entries.back()->getDocumentId());
CPPUNIT_ASSERT_EQUAL(Timestamp(11), entries.back()->getTimestamp());
@@ -1302,7 +1295,7 @@ ConformanceTest::testIterateRemoves()
createIterator(*spi, b, sel, NEWEST_DOCUMENT_OR_REMOVE));
std::vector<Chunk> chunks = doIterate(*spi, iter.getIteratorId(), 4096);
- std::vector<DocEntry::LP> entries = getEntriesFromChunks(chunks);
+ std::vector<DocEntry::UP> entries = getEntriesFromChunks(chunks);
CPPUNIT_ASSERT_EQUAL(docs.size(), entries.size());
verifyDocs(nonRemovedDocs, chunks, removedDocs);
diff --git a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp
index 75c83283c2c..f6a74fea83d 100644
--- a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp
+++ b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.cpp
@@ -111,8 +111,8 @@ namespace {
struct HasDocId {
const DocumentId &_did;
HasDocId(const DocumentId &did) : _did(did) {}
- bool operator()(const DocEntry::LP &entry)
- { return *entry->getDocumentId() == _did; }
+ bool operator()(const DocEntry &entry)
+ { return *entry.getDocumentId() == _did; }
};
struct TimestampLess {
@@ -159,7 +159,7 @@ BucketContent::hasTimestamp(Timestamp t) const
*/
void
-BucketContent::insert(DocEntry::LP e)
+BucketContent::insert(DocEntry::SP e)
{
LOG(spam, "insert(%s)", e->toString().c_str());
const DocumentId* docId(e->getDocumentId());
@@ -247,24 +247,24 @@ BucketContent::insert(DocEntry::LP e)
assert(_outdatedInfo || _info.getEntryCount() == _entries.size());
}
-DocEntry::LP
+DocEntry::SP
BucketContent::getEntry(const DocumentId& did) const
{
GidMapType::const_iterator it(_gidMap.find(did.getGlobalId()));
if (it != _gidMap.end()) {
return it->second;
}
- return DocEntry::LP();
+ return DocEntry::SP();
}
-DocEntry::LP
+DocEntry::SP
BucketContent::getEntry(Timestamp t) const
{
std::vector<BucketEntry>::const_iterator iter =
lower_bound(_entries.begin(), _entries.end(), t, TimestampLess());
if (iter == _entries.end() || iter->entry->getTimestamp() != t) {
- return DocEntry::LP();
+ return DocEntry::SP();
} else {
return iter->entry;
}
@@ -435,7 +435,7 @@ DummyPersistence::put(const Bucket& b, Timestamp t, const Document::SP& doc,
return BucketInfoResult(Result::TRANSIENT_ERROR, "Bucket not found");
}
- DocEntry::LP existing = (*bc)->getEntry(t);
+ DocEntry::SP existing = (*bc)->getEntry(t);
if (existing.get()) {
if (doc->getId() == *existing->getDocumentId()) {
return Result();
@@ -447,8 +447,8 @@ DummyPersistence::put(const Bucket& b, Timestamp t, const Document::SP& doc,
LOG(spam, "Inserting document %s", doc->toString(true).c_str());
- DocEntry::LP entry(new DocEntry(t, NONE, Document::UP(doc->clone())));
- (*bc)->insert(entry);
+ DocEntry::UP entry(new DocEntry(t, NONE, Document::UP(doc->clone())));
+ (*bc)->insert(std::move(entry));
return Result();
}
@@ -490,14 +490,14 @@ DummyPersistence::remove(const Bucket& b,
return RemoveResult(Result::TRANSIENT_ERROR, "Bucket not found");
}
- DocEntry::LP entry((*bc)->getEntry(did));
+ DocEntry::SP entry((*bc)->getEntry(did));
bool foundPut(entry.get() && !entry->isRemove());
- DocEntry::LP remEntry(new DocEntry(t, REMOVE_ENTRY, did));
+ DocEntry::UP remEntry(new DocEntry(t, REMOVE_ENTRY, did));
if ((*bc)->hasTimestamp(t)) {
(*bc)->eraseEntry(t);
}
- (*bc)->insert(remEntry);
+ (*bc)->insert(std::move(remEntry));
return RemoveResult(foundPut);
}
@@ -514,7 +514,7 @@ DummyPersistence::get(const Bucket& b,
BucketContentGuard::UP bc(acquireBucketWithLock(b));
if (!bc.get()) {
} else {
- DocEntry::LP entry((*bc)->getEntry(did));
+ DocEntry::SP entry((*bc)->getEntry(did));
if (entry.get() == 0 || entry->isRemove()) {
} else {
Document::UP doc(entry->getDocument()->clone());
@@ -538,7 +538,7 @@ DummyPersistence::createIterator(
{
DUMMYPERSISTENCE_VERIFY_INITIALIZED;
LOG(debug, "createIterator(%s)", b.toString().c_str());
- vespalib::LinkedPtr<document::select::Node> docSelection;
+ std::unique_ptr<document::select::Node> docSelection;
if (!s.getDocumentSelection().getDocumentSelection().empty()) {
docSelection.reset(
parseDocumentSelection(
@@ -563,13 +563,13 @@ DummyPersistence::createIterator(
++_nextIterator;
assert(_iterators.find(id) == _iterators.end());
it = new Iterator;
- _iterators[id] = Iterator::LP(it);
+ _iterators[id] = Iterator::UP(it);
assert(it->_bucket.getBucketId().getRawId() == 0); // Wrap detection
it->_bucket = b;
}
// Memory pointed to by 'it' should now be valid from here on out
- it->_fieldSet = vespalib::LinkedPtr<document::FieldSet>(fs.clone());
+ it->_fieldSet = std::unique_ptr<document::FieldSet>(fs.clone());
const BucketContent::GidMapType& gidMap((*bc)->_gidMap);
if (s.getTimestampSubset().empty()) {
@@ -630,7 +630,7 @@ DummyPersistence::iterate(IteratorId id, uint64_t maxByteSize, Context& ctx) con
Iterator* it;
{
vespalib::MonitorGuard lock(_monitor);
- std::map<IteratorId, Iterator::LP>::iterator iter(_iterators.find(id));
+ std::map<IteratorId, Iterator::UP>::iterator iter(_iterators.find(id));
if (iter == _iterators.end()) {
return IterateResult(Result::PERMANENT_ERROR,
"Bug! Used iterate without sending createIterator first");
@@ -645,12 +645,12 @@ DummyPersistence::iterate(IteratorId id, uint64_t maxByteSize, Context& ctx) con
}
LOG(debug, "Iterator %zu acquired bucket lock", uint64_t(id));
- std::vector<DocEntry::LP> entries;
+ std::vector<DocEntry::UP> entries;
uint32_t currentSize = 0;
uint32_t fastPath = 0;
while (!it->_leftToIterate.empty()) {
Timestamp next(it->_leftToIterate.back());
- DocEntry::LP entry((*bc)->getEntry(next));
+ DocEntry::SP entry((*bc)->getEntry(next));
if (entry.get() != 0) {
uint32_t size = entry->getSize();
if (currentSize != 0 && currentSize + size > maxByteSize) break;
@@ -664,14 +664,14 @@ DummyPersistence::iterate(IteratorId id, uint64_t maxByteSize, Context& ctx) con
document::FieldSet::createDocumentSubsetCopy(
*entry->getDocument(),
*it->_fieldSet));
- DocEntry::LP ret(new DocEntry(entry->getTimestamp(),
+ DocEntry::UP ret(new DocEntry(entry->getTimestamp(),
entry->getFlags(),
std::move(filtered),
entry->getPersistedDocumentSize()));
- entries.push_back(ret);
+ entries.push_back(std::move(ret));
} else {
// Use entry as-is.
- entries.push_back(DocEntry::LP(entry->clone()));
+ entries.push_back(DocEntry::UP(entry->clone()));
++fastPath;
}
}
@@ -691,10 +691,10 @@ DummyPersistence::iterate(IteratorId id, uint64_t maxByteSize, Context& ctx) con
currentSize,
fastPath);
if (it->_leftToIterate.empty()) {
- return IterateResult(entries, true);
+ return IterateResult(std::move(entries), true);
}
- return IterateResult(entries, false);
+ return IterateResult(std::move(entries), false);
}
Result
@@ -716,7 +716,7 @@ DummyPersistence::createBucket(const Bucket& b, Context&)
LOG(debug, "createBucket(%s)", b.toString().c_str());
vespalib::MonitorGuard lock(_monitor);
if (_content[b.getPartition()].find(b) == _content[b.getPartition()].end()) {
- _content[b.getPartition()][b] = BucketContent::LP(new BucketContent);
+ _content[b.getPartition()][b] = BucketContent::SP(new BucketContent);
} else {
assert(!_content[b.getPartition()][b]->_inUse);
LOG(debug, "%s already existed", b.toString().c_str());
@@ -770,16 +770,16 @@ DummyPersistence::split(const Bucket& source,
// Add entries
for (uint32_t i=0; i<sour._entries.size(); ++i) {
- DocEntry::LP entry(sour._entries[i].entry);
+ DocEntry::SP entry(sour._entries[i].entry);
document::BucketId bId(
target1.getBucketId().getUsedBits(),
idFactory.getBucketId(*entry->getDocumentId()).getRawId());
if (bId == target1.getBucketId()) {
- targ1.insert(entry);
+ targ1.insert(std::move(entry));
} else {
- targ2.insert(entry);
+ targ2.insert(std::move(entry));
}
}
targ1.setActive(sour.isActive());
@@ -817,8 +817,8 @@ DummyPersistence::join(const Bucket& source1, const Bucket& source2,
active |= sour.isActive();
for (uint32_t i=0; i<sour._entries.size(); ++i) {
- DocEntry::LP entry(sour._entries[i].entry);
- (*targetGuard)->insert(entry);
+ DocEntry::SP entry(sour._entries[i].entry);
+ (*targetGuard)->insert(std::move(entry));
}
sourceGuard.reset(0);
deleteBucket(source, context);
@@ -842,7 +842,7 @@ DummyPersistence::revert(const Bucket& b, Timestamp t, Context&)
}
BucketContent& content(**bc);
- DocEntry::LP docEntry(content.getEntry(t));
+ DocEntry::SP docEntry(content.getEntry(t));
if (!docEntry.get()) {
return Result();
}
@@ -953,4 +953,4 @@ DummyPersistence::releaseBucketNoLock(const BucketContent& bc) const
} // spi
} // storage
-VESPALIB_HASH_MAP_INSTANTIATE_H(storage::spi::Bucket, vespalib::LinkedPtr<storage::spi::dummy::BucketContent>, document::BucketId::hash) \ No newline at end of file
+VESPALIB_HASH_MAP_INSTANTIATE_H(storage::spi::Bucket, std::shared_ptr<storage::spi::dummy::BucketContent>, document::BucketId::hash)
diff --git a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h
index c1af86d5a77..940e72d1668 100644
--- a/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h
+++ b/persistence/src/vespa/persistence/dummyimpl/dummypersistence.h
@@ -28,10 +28,10 @@ namespace dummy {
struct BucketEntry
{
- DocEntry::LP entry;
+ DocEntry::SP entry;
GlobalId gid;
- BucketEntry(const DocEntry::LP& e, const GlobalId& g)
+ BucketEntry(DocEntry::SP e, const GlobalId& g)
: entry(e),
gid(g)
{ }
@@ -40,11 +40,11 @@ struct BucketEntry
struct BucketContent {
typedef vespalib::hash_map<
document::GlobalId,
- DocEntry::LP,
+ DocEntry::SP,
document::GlobalId::hash
> GidMapType;
- typedef vespalib::LinkedPtr<BucketContent> LP;
+ using SP = std::shared_ptr<BucketContent>;
std::vector<BucketEntry> _entries;
GidMapType _gidMap;
@@ -67,9 +67,9 @@ struct BucketContent {
const BucketInfo& getBucketInfo() const;
BucketInfo& getMutableBucketInfo() { return _info; }
bool hasTimestamp(Timestamp) const;
- void insert(DocEntry::LP);
- DocEntry::LP getEntry(const DocumentId&) const;
- DocEntry::LP getEntry(Timestamp) const;
+ void insert(DocEntry::SP);
+ DocEntry::SP getEntry(const DocumentId&) const;
+ DocEntry::SP getEntry(Timestamp) const;
void eraseEntry(Timestamp t);
void setActive(bool active = true) {
_active = active;
@@ -87,10 +87,10 @@ struct BucketContent {
};
struct Iterator {
- typedef vespalib::LinkedPtr<Iterator> LP;
+ using UP = std::unique_ptr<Iterator>;
Bucket _bucket;
std::vector<Timestamp> _leftToIterate;
- vespalib::LinkedPtr<document::FieldSet> _fieldSet;
+ std::unique_ptr<document::FieldSet> _fieldSet;
};
class DummyPersistence;
@@ -220,12 +220,12 @@ private:
mutable bool _initialized;
document::DocumentTypeRepo::SP _repo;
PartitionStateList _partitions;
- typedef vespalib::hash_map<Bucket, BucketContent::LP, document::BucketId::hash>
+ typedef vespalib::hash_map<Bucket, BucketContent::SP, document::BucketId::hash>
PartitionContent;
std::vector<PartitionContent> _content;
IteratorId _nextIterator;
- mutable std::map<IteratorId, Iterator::LP> _iterators;
+ mutable std::map<IteratorId, Iterator::UP> _iterators;
vespalib::Monitor _monitor;
std::unique_ptr<ClusterState> _clusterState;
diff --git a/persistence/src/vespa/persistence/proxy/providerproxy.cpp b/persistence/src/vespa/persistence/proxy/providerproxy.cpp
index 72936bbda6c..1f6d0b19be6 100644
--- a/persistence/src/vespa/persistence/proxy/providerproxy.cpp
+++ b/persistence/src/vespa/persistence/proxy/providerproxy.cpp
@@ -198,7 +198,7 @@ IterateResult ProviderProxy::readNoError(const FRT_Values &values) const {
string doc_id(getString(values[4]._string_array._pt[i]));
nbostream stream(values[5]._data_array._pt[i]._buf,
values[5]._data_array._pt[i]._len);
- DocEntry::LP entry;
+ DocEntry::UP entry;
if (!stream.empty()) {
Document::UP doc = readDocument(stream, *_repo);
entry.reset(new DocEntry(timestamp, meta_flags, std::move(doc)));
@@ -208,10 +208,10 @@ IterateResult ProviderProxy::readNoError(const FRT_Values &values) const {
} else {
entry.reset(new DocEntry(timestamp, meta_flags));
}
- result.push_back(entry);
+ result.push_back(std::move(entry));
}
- return IterateResult(result, values[6]._intval8);
+ return IterateResult(std::move(result), values[6]._intval8);
}
namespace {
diff --git a/persistence/src/vespa/persistence/proxy/providerstub.cpp b/persistence/src/vespa/persistence/proxy/providerstub.cpp
index 94d4811c0d6..e0f0a22f0dd 100644
--- a/persistence/src/vespa/persistence/proxy/providerstub.cpp
+++ b/persistence/src/vespa/persistence/proxy/providerstub.cpp
@@ -97,7 +97,7 @@ void addIterateResult(FRT_Values &ret, const IterateResult &result)
{
addResult(ret, result);
- const vector<DocEntry::LP> &entries = result.getEntries();
+ const vector<DocEntry::UP> &entries = result.getEntries();
uint64_t *timestamps = ret.AddInt64Array(entries.size());
uint32_t *flags = ret.AddInt32Array(entries.size());
assert(sizeof(DocEntry::SizeType) == sizeof(uint32_t));
diff --git a/persistence/src/vespa/persistence/spi/docentry.h b/persistence/src/vespa/persistence/spi/docentry.h
index 69c65465d8e..08db894a89a 100644
--- a/persistence/src/vespa/persistence/spi/docentry.h
+++ b/persistence/src/vespa/persistence/spi/docentry.h
@@ -14,7 +14,6 @@
#pragma once
#include <persistence/spi/types.h>
-#include <vespa/vespalib/util/linkedptr.h>
namespace storage {
namespace spi {
@@ -35,8 +34,8 @@ private:
DocumentIdUP _documentId;
DocumentUP _document;
public:
- typedef vespalib::LinkedPtr<DocEntry> LP;
- typedef std::unique_ptr<DocEntry> UP;
+ using UP = std::unique_ptr<DocEntry>;
+ using SP = std::shared_ptr<DocEntry>;
DocEntry(Timestamp t, int metaFlags, DocumentUP doc);
diff --git a/persistence/src/vespa/persistence/spi/result.h b/persistence/src/vespa/persistence/spi/result.h
index df2a2a55454..ce250f8aabe 100644
--- a/persistence/src/vespa/persistence/spi/result.h
+++ b/persistence/src/vespa/persistence/spi/result.h
@@ -248,7 +248,7 @@ private:
class IterateResult : public Result {
public:
- typedef std::vector<DocEntry::LP> List;
+ typedef std::vector<DocEntry::UP> List;
/**
* Constructor used when there was an error creating the iterator.
@@ -270,15 +270,19 @@ public:
_entries(std::move(entries))
{ }
+ IterateResult(const IterateResult &) = delete;
+ IterateResult(IterateResult &&rhs) = default;
+ IterateResult &operator=(IterateResult &&rhs) = default;
+
~IterateResult();
const List& getEntries() const { return _entries; }
-
+ List steal_entries() { return std::move(_entries); }
bool isCompleted() const { return _completed; }
private:
bool _completed;
- std::vector<DocEntry::LP> _entries;
+ std::vector<DocEntry::UP> _entries;
};
class PartitionStateListResult : public Result