diff options
| author | Dan Goodliffe <dan@randomdan.homeip.net> | 2026-05-17 14:32:11 +0100 |
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2026-05-17 16:18:08 +0100 |
| commit | 7b1aeee4565fe0a2eed4a4fa8695b2a5fb671e06 (patch) | |
| tree | 1ea4e2565a8f8f57e85d27291810cad07cd3b6be /src/ingestor.cpp | |
| parent | 29f458117184af5b1507cac01b48b41bfbad568a (diff) | |
| download | webstat-7b1aeee4565fe0a2eed4a4fa8695b2a5fb671e06.tar.bz2 webstat-7b1aeee4565fe0a2eed4a4fa8695b2a5fb671e06.tar.xz webstat-7b1aeee4565fe0a2eed4a4fa8695b2a5fb671e06.zip | |
Add ThreadSafeT helper
Wraps a templated value and a templated mutex (defaults to shared_mutex)
and provides safe access, locked with either a shared_lock (const value)
or lock_guard (non-const value).
Applies this to existingEntities.
Diffstat (limited to 'src/ingestor.cpp')
| -rw-r--r-- | src/ingestor.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/ingestor.cpp b/src/ingestor.cpp index 3e6e307..e8dceb8 100644 --- a/src/ingestor.cpp +++ b/src/ingestor.cpp @@ -325,7 +325,7 @@ namespace WebStat { } catch (const std::exception & excp) { log(LOG_ERR, "Unhandled exception: %s, clearing known entity list", excp.what()); - existingEntities.clear(); + existingEntities()->clear(); } auto count = std::distance(processingLines.begin(), storedEnd); processingLines.erase(processingLines.begin(), storedEnd); @@ -372,7 +372,7 @@ namespace WebStat { try { DB::TransactionScope lineTx {*dbconn}; storeNewEntities(dbconn, valuesEntities); - existingEntities.insert_range(valuesEntities | entityIds); + existingEntities()->insert_range(valuesEntities | entityIds); storeLogLine(dbconn, values); } catch (const DB::Error & originalError) { @@ -558,8 +558,9 @@ namespace WebStat { void Ingestor::fillKnownEntities(const std::span<Entity *> entities) const { + auto lockedEntities = existingEntities.shared(); for (const auto entity : entities) { - if (auto existing = existingEntities.find(entity->hash); existing != existingEntities.end()) { + if (auto existing = lockedEntities->find(entity->hash); existing != lockedEntities->end()) { entity->id = existing->second; } } @@ -639,7 +640,7 @@ namespace WebStat { "Statistics: linesQueued %zu, linesRead %zu, linesParsed %zu, linesParseFailed %zu, logsInserted %zu, " "entitiesInserted %zu, entitiesKnown %zu", queuedLines.size(), stats.linesRead, stats.linesParsed, stats.linesParseFailed, stats.logsInserted, - stats.entitiesInserted, existingEntities.size()); + stats.entitiesInserted, existingEntities->size()); } void |
