Skip to content

Commit

Permalink
Replace locks in remote_logger_pool with an atomic counter
Browse files Browse the repository at this point in the history
  • Loading branch information
esensar committed Feb 7, 2025
1 parent 41a1eab commit 6692e56
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 12 deletions.
12 changes: 2 additions & 10 deletions pdns/remote_logger_pool.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#include "remote_logger_pool.hh"

RemoteLoggerPool::RemoteLoggerPool(std::vector<std::shared_ptr<RemoteLoggerInterface>>&& pool) :
d_pool(std::move(pool)), d_pool_it(d_pool.begin())
d_pool(std::move(pool)), d_counter(0)
{
}

Expand All @@ -27,14 +27,6 @@ RemoteLoggerPool::RemoteLoggerPool(std::vector<std::shared_ptr<RemoteLoggerInter

RemoteLoggerInterface::Result RemoteLoggerPool::queueData(const std::string& data)
{
std::shared_ptr<RemoteLoggerInterface> logger;
{
auto pool_it = d_pool_it.lock();
logger = **pool_it;
(*pool_it)++;
if (*pool_it == d_pool.end()) {
*pool_it = d_pool.begin();
}
}
std::shared_ptr<RemoteLoggerInterface> logger = d_pool.at(d_counter++ % d_pool.size());
return logger->queueData(data);
}
6 changes: 4 additions & 2 deletions pdns/remote_logger_pool.hh
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,16 @@
*/
#pragma once
#include "config.h"
#include "lock.hh"
#include "remote_logger.hh"
#include <atomic>
#include <cstddef>
#include <memory>
#include <vector>

class RemoteLoggerPool : public RemoteLoggerInterface
{
public:
// this expects a non-empty vector
RemoteLoggerPool(std::vector<std::shared_ptr<RemoteLoggerInterface>>&& pool);
RemoteLoggerPool(const RemoteLoggerPool&) = delete;
RemoteLoggerPool(RemoteLoggerPool&&) = delete;
Expand Down Expand Up @@ -59,5 +61,5 @@ public:

private:
std::vector<std::shared_ptr<RemoteLoggerInterface>> d_pool;
LockGuarded<std::vector<std::shared_ptr<RemoteLoggerInterface>>::iterator> d_pool_it;
std::atomic<size_t> d_counter;
};

0 comments on commit 6692e56

Please sign in to comment.