summaryrefslogtreecommitdiff
path: root/src/ingestor.cpp
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2026-05-17 14:32:11 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2026-05-17 16:18:08 +0100
commit7b1aeee4565fe0a2eed4a4fa8695b2a5fb671e06 (patch)
tree1ea4e2565a8f8f57e85d27291810cad07cd3b6be /src/ingestor.cpp
parent29f458117184af5b1507cac01b48b41bfbad568a (diff)
downloadwebstat-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.cpp9
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