diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-10-08 18:56:55 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-10-08 18:56:55 +0000 |
commit | 32286c1b4f19b0db0e899155dd26af8cde8a6b5b (patch) | |
tree | 26d715ea60d2bcb77e10e05985125241c8ef70f0 /searchlib | |
parent | 2e3515a187d0b3aae7ae1afd2708f011b9b8bf22 (diff) |
Use std::mutex
Diffstat (limited to 'searchlib')
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; |