summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-10-08 18:56:55 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-10-08 18:56:55 +0000
commit32286c1b4f19b0db0e899155dd26af8cde8a6b5b (patch)
tree26d715ea60d2bcb77e10e05985125241c8ef70f0 /searchlib
parent2e3515a187d0b3aae7ae1afd2708f011b9b8bf22 (diff)
Use std::mutex
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/wand/weak_and_heap.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/wand/weak_and_heap.h4
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/client_session.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/domain.cpp60
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/domain.h14
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/domainpart.cpp23
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/domainpart.h10
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/translogclient.h4
8 files changed, 62 insertions, 61 deletions
diff --git a/searchlib/src/vespa/searchlib/queryeval/wand/weak_and_heap.cpp b/searchlib/src/vespa/searchlib/queryeval/wand/weak_and_heap.cpp
index dc84eb45b8a..28c229596b0 100644
--- a/searchlib/src/vespa/searchlib/queryeval/wand/weak_and_heap.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/wand/weak_and_heap.cpp
@@ -12,7 +12,7 @@ SharedWeakAndPriorityQueue::SharedWeakAndPriorityQueue(uint32_t scoresToTrack) :
_bestScores.reserve(scoresToTrack);
}
-SharedWeakAndPriorityQueue::~SharedWeakAndPriorityQueue() { }
+SharedWeakAndPriorityQueue::~SharedWeakAndPriorityQueue() = default;
void
SharedWeakAndPriorityQueue::adjust(score_t *begin, score_t *end)
@@ -20,7 +20,7 @@ SharedWeakAndPriorityQueue::adjust(score_t *begin, score_t *end)
if (getScoresToTrack() == 0) {
return;
}
- vespalib::LockGuard guard(_lock);
+ std::lock_guard guard(_lock);
for (score_t *itr = begin; itr != end; ++itr) {
score_t score = *itr;
if (!is_full()) {
diff --git a/searchlib/src/vespa/searchlib/queryeval/wand/weak_and_heap.h b/searchlib/src/vespa/searchlib/queryeval/wand/weak_and_heap.h
index d6105d7e6f2..28c317de3ee 100644
--- a/searchlib/src/vespa/searchlib/queryeval/wand/weak_and_heap.h
+++ b/searchlib/src/vespa/searchlib/queryeval/wand/weak_and_heap.h
@@ -3,7 +3,7 @@
#include "wand_parts.h"
#include <vespa/vespalib/util/priority_queue.h>
-#include <vespa/vespalib/util/sync.h>
+#include <mutex>
namespace search::queryeval {
@@ -51,7 +51,7 @@ class SharedWeakAndPriorityQueue : public WeakAndHeap
private:
typedef vespalib::PriorityQueue<score_t> Scores;
Scores _bestScores;
- vespalib::Lock _lock;
+ std::mutex _lock;
bool is_full() const { return (_bestScores.size() >= getScoresToTrack()); }
diff --git a/searchlib/src/vespa/searchlib/transactionlog/client_session.cpp b/searchlib/src/vespa/searchlib/transactionlog/client_session.cpp
index 8678d88b43c..40db92cbe78 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/client_session.cpp
+++ b/searchlib/src/vespa/searchlib/transactionlog/client_session.cpp
@@ -123,7 +123,7 @@ void
Session::clear()
{
if (_sessionId > 0) {
- LockGuard guard(_tlc._lock);
+ std::lock_guard guard(_tlc._lock);
_tlc._sessions.erase(SessionKey(_domain, _sessionId));
}
_sessionId = 0;
@@ -145,7 +145,7 @@ Session::init(FRT_RPCRequest *req)
_sessionId = retval;
SessionKey key(_domain, _sessionId);
{
- LockGuard guard(_tlc._lock);
+ std::lock_guard guard(_tlc._lock);
_tlc._sessions[key] = this;
}
retval = run();
diff --git a/searchlib/src/vespa/searchlib/transactionlog/domain.cpp b/searchlib/src/vespa/searchlib/transactionlog/domain.cpp
index 126a7afed4d..454293dfc84 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/domain.cpp
+++ b/searchlib/src/vespa/searchlib/transactionlog/domain.cpp
@@ -19,7 +19,6 @@ LOG_SETUP(".transactionlog.domain");
using vespalib::string;
using vespalib::make_string_short::fmt;
-using vespalib::LockGuard;
using vespalib::makeTask;
using vespalib::makeClosure;
using vespalib::makeLambdaTask;
@@ -104,7 +103,7 @@ Domain::addPart(SerialNum partId, bool isLastPart) {
dp->erase(dp->range().to() + 1);
} else {
{
- LockGuard guard(_lock);
+ std::lock_guard guard(_lock);
_parts[partId] = dp;
}
if (! isLastPart) {
@@ -123,7 +122,7 @@ Domain::~Domain() {
DomainInfo
Domain::getDomainInfo() const
{
- LockGuard guard(_lock);
+ UniqueLock guard(_lock);
DomainInfo info(SerialNumRange(begin(guard), end(guard)), size(guard), byteSize(guard), _maxSessionRunTime);
for (const auto &entry: _parts) {
const DomainPart &part = *entry.second;
@@ -135,14 +134,18 @@ Domain::getDomainInfo() const
SerialNum
Domain::begin() const
{
- return begin(LockGuard(_lock));
+ return begin(UniqueLock(_lock));
}
+void
+Domain::verifyLock(const UniqueLock & guard) const {
+ assert(guard.mutex() == &_lock);
+ assert(guard.owns_lock());
+}
SerialNum
-Domain::begin(const LockGuard & guard) const
+Domain::begin(const UniqueLock & guard) const
{
- (void) guard;
- assert(guard.locks(_lock));
+ verifyLock(guard);
SerialNum s(0);
if ( ! _parts.empty() ) {
s = _parts.cbegin()->second->range().from();
@@ -153,14 +156,13 @@ Domain::begin(const LockGuard & guard) const
SerialNum
Domain::end() const
{
- return end(LockGuard(_lock));
+ return end(UniqueLock(_lock));
}
SerialNum
-Domain::end(const LockGuard & guard) const
+Domain::end(const UniqueLock & guard) const
{
- (void) guard;
- assert(guard.locks(_lock));
+ verifyLock(guard);
SerialNum s(0);
if ( ! _parts.empty() ) {
s = _parts.crbegin()->second->range().to();
@@ -171,14 +173,13 @@ Domain::end(const LockGuard & guard) const
size_t
Domain::byteSize() const
{
- return byteSize(LockGuard(_lock));
+ return byteSize(UniqueLock(_lock));
}
size_t
-Domain::byteSize(const LockGuard & guard) const
+Domain::byteSize(const UniqueLock & guard) const
{
- (void) guard;
- assert(guard.locks(_lock));
+ verifyLock(guard);
size_t size = 0;
for (const auto &entry : _parts) {
const DomainPart &part = *entry.second;
@@ -191,7 +192,7 @@ SerialNum
Domain::getSynced() const
{
SerialNum s(0);
- LockGuard guard(_lock);
+ UniqueLock guard(_lock);
if (_parts.empty()) {
return s;
}
@@ -228,7 +229,7 @@ Domain::triggerSyncNow()
DomainPart::SP
Domain::findPart(SerialNum s)
{
- LockGuard guard(_lock);
+ std::lock_guard guard(_lock);
DomainPartList::iterator it(_parts.upper_bound(s));
if (!_parts.empty() && it != _parts.begin()) {
DomainPartList::iterator prev(it);
@@ -246,14 +247,13 @@ Domain::findPart(SerialNum s)
uint64_t
Domain::size() const
{
- return size(LockGuard(_lock));
+ return size(UniqueLock(_lock));
}
uint64_t
-Domain::size(const LockGuard & guard) const
+Domain::size(const UniqueLock & guard) const
{
- (void) guard;
- assert(guard.locks(_lock));
+ verifyLock(guard);
uint64_t sz(0);
for (const auto & part : _parts) {
sz += part.second->size();
@@ -265,7 +265,7 @@ SerialNum
Domain::findOldestActiveVisit() const
{
SerialNum oldestActive(std::numeric_limits<SerialNum>::max());
- LockGuard guard(_sessionLock);
+ std::lock_guard guard(_sessionLock);
for (const auto & pair : _sessions) {
Session * session(pair.second.get());
if (!session->inSync()) {
@@ -281,7 +281,7 @@ Domain::cleanSessions()
if ( _sessions.empty()) {
return;
}
- LockGuard guard(_sessionLock);
+ std::lock_guard guard(_sessionLock);
for (SessionList::iterator it(_sessions.begin()), mt(_sessions.end()); it != mt; ) {
Session * session(it->second.get());
if (session->inSync()) {
@@ -318,7 +318,7 @@ Domain::optionallyRotateFile(SerialNum serialNum) {
dp = std::make_shared<DomainPart>(_name, dir(), serialNum, _config.getEncoding(),
_config.getCompressionlevel(), _fileHeaderContext, false);
{
- LockGuard guard(_lock);
+ std::lock_guard guard(_lock);
_parts[serialNum] = dp;
assert(_parts.rbegin()->first == serialNum);
}
@@ -409,7 +409,7 @@ Domain::erase(SerialNum to)
for (DomainPartList::iterator it(_parts.begin()); (_parts.size() > 1) && (it->second.get()->range().to() < to); it = _parts.begin()) {
DomainPart::SP dp(it->second);
{
- LockGuard guard(_lock);
+ std::lock_guard guard(_lock);
_parts.erase(it);
}
retval = retval && dp->erase(to);
@@ -429,7 +429,7 @@ Domain::visit(const Domain::SP & domain, SerialNum from, SerialNum to, std::uniq
SerialNumRange range(from, to);
auto session = std::make_shared<Session>(_sessionId++, range, domain, std::move(dest));
int id = session->id();
- LockGuard guard(_sessionLock);
+ std::lock_guard guard(_sessionLock);
_sessions[id] = std::move(session);
return id;
}
@@ -438,7 +438,7 @@ int
Domain::startSession(int sessionId)
{
int retval(-1);
- LockGuard guard(_sessionLock);
+ std::lock_guard guard(_sessionLock);
SessionList::iterator found = _sessions.find(sessionId);
if (found != _sessions.end()) {
found->second->setStartTime(std::chrono::steady_clock::now());
@@ -458,7 +458,7 @@ Domain::closeSession(int sessionId)
int retval(-1);
DurationSeconds sessionRunTime(0);
{
- LockGuard guard(_sessionLock);
+ std::lock_guard guard(_sessionLock);
SessionList::iterator found = _sessions.find(sessionId);
if (found != _sessions.end()) {
sessionRunTime = (std::chrono::steady_clock::now() - found->second->getStartTime());
@@ -467,7 +467,7 @@ Domain::closeSession(int sessionId)
}
while (retval == 1) {
std::this_thread::sleep_for(10ms);
- LockGuard guard(_sessionLock);
+ std::lock_guard guard(_sessionLock);
SessionList::iterator found = _sessions.find(sessionId);
if (found != _sessions.end()) {
if ( ! found->second->isVisitRunning()) {
@@ -479,7 +479,7 @@ Domain::closeSession(int sessionId)
}
}
{
- LockGuard guard(_lock);
+ std::lock_guard guard(_lock);
if (sessionRunTime > _maxSessionRunTime) {
_maxSessionRunTime = sessionRunTime;
}
diff --git a/searchlib/src/vespa/searchlib/transactionlog/domain.h b/searchlib/src/vespa/searchlib/transactionlog/domain.h
index e41ad930840..a883156f32c 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/domain.h
+++ b/searchlib/src/vespa/searchlib/transactionlog/domain.h
@@ -56,16 +56,18 @@ public:
uint64_t size() const;
Domain & setConfig(const DomainConfig & cfg);
private:
+ using UniqueLock = std::unique_lock<std::mutex>;
+ void verifyLock(const UniqueLock & guard) const;
void commitIfFull(const vespalib::MonitorGuard & guard);
void commitAndTransferResponses(const vespalib::MonitorGuard & guard);
std::unique_ptr<CommitChunk> grabCurrentChunk(const vespalib::MonitorGuard & guard);
void commitChunk(std::unique_ptr<CommitChunk> chunk, const vespalib::MonitorGuard & chunkOrderGuard);
void doCommit(std::unique_ptr<CommitChunk> chunk);
- SerialNum begin(const vespalib::LockGuard & guard) const;
- SerialNum end(const vespalib::LockGuard & guard) const;
- size_t byteSize(const vespalib::LockGuard & guard) const;
- uint64_t size(const vespalib::LockGuard & guard) const;
+ SerialNum begin(const UniqueLock & guard) const;
+ SerialNum end(const UniqueLock & guard) const;
+ size_t byteSize(const UniqueLock & guard) const;
+ uint64_t size(const UniqueLock & guard) const;
void cleanSessions();
vespalib::string dir() const { return getDir(_baseDir, _name); }
void addPart(SerialNum partId, bool isLastPart);
@@ -89,9 +91,9 @@ private:
bool _pendingSync;
vespalib::string _name;
DomainPartList _parts;
- vespalib::Lock _lock;
+ mutable std::mutex _lock;
vespalib::Monitor _currentChunkMonitor;
- vespalib::Lock _sessionLock;
+ mutable std::mutex _sessionLock;
SessionList _sessions;
DurationSeconds _maxSessionRunTime;
vespalib::string _baseDir;
diff --git a/searchlib/src/vespa/searchlib/transactionlog/domainpart.cpp b/searchlib/src/vespa/searchlib/transactionlog/domainpart.cpp
index 97ab61d3045..830384ee538 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/domainpart.cpp
+++ b/searchlib/src/vespa/searchlib/transactionlog/domainpart.cpp
@@ -15,7 +15,6 @@ using vespalib::FileHeader;
using vespalib::string;
using vespalib::getLastErrorString;
using vespalib::IllegalHeaderException;
-using vespalib::LockGuard;
using vespalib::nbostream;
using vespalib::nbostream_longlivedbuf;
using vespalib::alloc::Alloc;
@@ -239,7 +238,7 @@ DomainPart::buildPacketMapping(bool allowTruncate)
_range.to(packet.range().to());
_packets.insert(std::make_pair(firstSerial, std::move(packet)));
{
- LockGuard guard(_lock);
+ std::lock_guard guard(_lock);
_skipList.push_back(SkipInfo(firstSerial, firstPos));
}
} else {
@@ -330,7 +329,7 @@ DomainPart::close()
{
bool retval(false);
{
- LockGuard guard(_fileLock);
+ std::lock_guard guard(_fileLock);
/*
* Sync old domainpart before starting writing new, to avoid
* hole. XXX: Feed latency spike due to lack of delayed open
@@ -339,7 +338,7 @@ DomainPart::close()
handleSync(*_transLog);
_transLog->dropFromCache();
retval = _transLog->Close();
- LockGuard wguard(_writeLock);
+ std::lock_guard wguard(_writeLock);
_syncedSerial = _writtenSerial;
}
if ( ! retval ) {
@@ -347,7 +346,7 @@ DomainPart::close()
_transLog->GetFileName(), _transLog->GetSize()));
}
{
- LockGuard guard(_lock);
+ std::lock_guard guard(_lock);
_packets.clear();
}
return retval;
@@ -364,7 +363,7 @@ DomainPart::openAndFind(FastOS_FileInterface &file, const SerialNum &from)
bool retval(file.OpenReadOnly(_transLog->GetFileName()));
if (retval) {
int64_t pos(_headerLen);
- LockGuard guard(_lock);
+ std::lock_guard guard(_lock);
for(SkipList::const_iterator it(_skipList.begin()), mt(_skipList.end());
(it < mt) && (it->id() <= from);
it++)
@@ -422,7 +421,7 @@ DomainPart::commit(SerialNum firstSerial, const Packet &packet)
}
bool merged(false);
- LockGuard guard(_lock);
+ std::lock_guard guard(_lock);
if ( ! _packets.empty() ) {
Packet & lastPacket = _packets.rbegin()->second;
if (lastPacket.sizeBytes() < 0xf000) {
@@ -441,12 +440,12 @@ DomainPart::sync()
{
SerialNum syncSerial(0);
{
- LockGuard guard(_writeLock);
+ std::lock_guard guard(_writeLock);
syncSerial = _writtenSerial;
}
- LockGuard guard(_fileLock);
+ std::lock_guard guard(_fileLock);
handleSync(*_transLog);
- LockGuard wguard(_writeLock);
+ std::lock_guard wguard(_writeLock);
if (_syncedSerial < syncSerial) {
_syncedSerial = syncSerial;
}
@@ -456,7 +455,7 @@ bool
DomainPart::visit(SerialNumRange &r, Packet &packet)
{
bool retval(false);
- LockGuard guard(_lock);
+ std::lock_guard guard(_lock);
LOG(spam, "Visit r(%" PRIu64 ", %" PRIu64 "] Checking %" PRIu64 " packets",
r.from(), r.to(), uint64_t(_packets.size()));
if ( ! isClosed() ) {
@@ -550,7 +549,7 @@ DomainPart::write(FastOS_FileInterface &file, const IChunk & chunk)
os << realEncoding.getRaw(); //Patching real encoding
os << uint32_t(end - (begin + sizeof(uint32_t) + sizeof(uint8_t))); // Patching actual size.
os.wp(end);
- LockGuard guard(_writeLock);
+ std::lock_guard guard(_writeLock);
if ( ! file.CheckedWrite(os.data(), os.size()) ) {
throw runtime_error(handleWriteError("Failed writing the entry.", file, byteSize(), chunk.range(), os.size()));
}
diff --git a/searchlib/src/vespa/searchlib/transactionlog/domainpart.h b/searchlib/src/vespa/searchlib/transactionlog/domainpart.h
index 31d6938b654..a956932be19 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/domainpart.h
+++ b/searchlib/src/vespa/searchlib/transactionlog/domainpart.h
@@ -3,11 +3,11 @@
#include "common.h"
#include "ichunk.h"
-#include <vespa/vespalib/util/sync.h>
#include <vespa/vespalib/util/memory.h>
#include <map>
#include <vector>
#include <atomic>
+#include <mutex>
class FastOS_FileInterface;
@@ -34,7 +34,7 @@ public:
SerialNumRange range() const { return _range; }
SerialNum getSynced() const {
- vespalib::LockGuard guard(_writeLock);
+ std::lock_guard guard(_writeLock);
return _syncedSerial;
}
@@ -74,8 +74,8 @@ private:
typedef std::map<SerialNum, Packet> PacketList;
const Encoding _encoding;
const uint8_t _compressionLevel;
- vespalib::Lock _lock;
- vespalib::Lock _fileLock;
+ std::mutex _lock;
+ std::mutex _fileLock;
SerialNumRange _range;
size_t _sz;
std::atomic<uint64_t> _byteSize;
@@ -84,7 +84,7 @@ private:
std::unique_ptr<FastOS_FileInterface> _transLog;
SkipList _skipList;
uint32_t _headerLen;
- vespalib::Lock _writeLock;
+ mutable std::mutex _writeLock;
// Protected by _writeLock
SerialNum _writtenSerial;
SerialNum _syncedSerial;
diff --git a/searchlib/src/vespa/searchlib/transactionlog/translogclient.h b/searchlib/src/vespa/searchlib/transactionlog/translogclient.h
index 289a0fcb8c0..c232dfdad69 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/translogclient.h
+++ b/searchlib/src/vespa/searchlib/transactionlog/translogclient.h
@@ -3,10 +3,10 @@
#include "client_common.h"
#include "client_session.h"
-#include <vespa/vespalib/util/sync.h>
#include <vespa/fnet/frt/invokable.h>
#include <map>
#include <vector>
+#include <mutex>
class FNET_Transport;
class FRT_Supervisor;
@@ -58,7 +58,7 @@ private:
vespalib::string _rpcTarget;
SessionMap _sessions;
//Brute force lock for subscriptions. For multithread safety.
- vespalib::Lock _lock;
+ std::mutex _lock;
std::unique_ptr<FastOS_ThreadPool> _threadPool;
std::unique_ptr<FNET_Transport> _transport;
std::unique_ptr<FRT_Supervisor> _supervisor;