mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 00:30:49 +00:00
SensitiveDataMasker: replace shared_ptr with MultiVersion
This commit is contained in:
parent
a83f6be97c
commit
5ef9478a2e
@ -85,9 +85,9 @@ public:
|
||||
|
||||
SensitiveDataMasker::~SensitiveDataMasker() = default;
|
||||
|
||||
std::shared_ptr<SensitiveDataMasker> SensitiveDataMasker::sensitive_data_masker = nullptr;
|
||||
SensitiveDataMasker::MaskerMultiVersion SensitiveDataMasker::sensitive_data_masker{};
|
||||
|
||||
void SensitiveDataMasker::setInstance(std::shared_ptr<SensitiveDataMasker> sensitive_data_masker_)
|
||||
void SensitiveDataMasker::setInstance(std::unique_ptr<SensitiveDataMasker>&& sensitive_data_masker_)
|
||||
{
|
||||
|
||||
if (!sensitive_data_masker_)
|
||||
@ -95,18 +95,17 @@ void SensitiveDataMasker::setInstance(std::shared_ptr<SensitiveDataMasker> sensi
|
||||
|
||||
if (sensitive_data_masker_->rulesCount() > 0)
|
||||
{
|
||||
std::atomic_store(&sensitive_data_masker, std::move(sensitive_data_masker_));
|
||||
sensitive_data_masker.set(std::move(sensitive_data_masker_));
|
||||
}
|
||||
else
|
||||
{
|
||||
std::atomic_store(&sensitive_data_masker, std::shared_ptr<SensitiveDataMasker>(nullptr));
|
||||
sensitive_data_masker.set(nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
std::shared_ptr<SensitiveDataMasker> SensitiveDataMasker::getInstance()
|
||||
SensitiveDataMasker::MaskerMultiVersion::Version SensitiveDataMasker::getInstance()
|
||||
{
|
||||
// TODO: use std::atomic<std::shared_ptr> when compiler supports it
|
||||
return std::atomic_load(&sensitive_data_masker);
|
||||
return sensitive_data_masker.get();
|
||||
}
|
||||
|
||||
SensitiveDataMasker::SensitiveDataMasker(const Poco::Util::AbstractConfiguration & config, const std::string & config_prefix)
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include "Common/MultiVersion.h"
|
||||
|
||||
namespace Poco
|
||||
{
|
||||
@ -44,7 +45,8 @@ class SensitiveDataMasker
|
||||
private:
|
||||
class MaskingRule;
|
||||
std::vector<std::unique_ptr<MaskingRule>> all_masking_rules;
|
||||
static std::shared_ptr<SensitiveDataMasker> sensitive_data_masker;
|
||||
using MaskerMultiVersion = MultiVersion<SensitiveDataMasker>;
|
||||
static MaskerMultiVersion sensitive_data_masker;
|
||||
|
||||
public:
|
||||
SensitiveDataMasker(const Poco::Util::AbstractConfiguration & config, const std::string & config_prefix);
|
||||
@ -55,8 +57,8 @@ public:
|
||||
|
||||
/// setInstance is not thread-safe and should be called once in single-thread mode.
|
||||
/// https://github.com/ClickHouse/ClickHouse/pull/6810#discussion_r321183367
|
||||
static void setInstance(std::shared_ptr<SensitiveDataMasker> sensitive_data_masker_);
|
||||
static std::shared_ptr<SensitiveDataMasker> getInstance();
|
||||
static void setInstance(std::unique_ptr<SensitiveDataMasker>&& sensitive_data_masker_);
|
||||
static MaskerMultiVersion::Version getInstance();
|
||||
|
||||
/// Used in tests.
|
||||
void addMaskingRule(const std::string & name, const std::string & regexp_string, const std::string & replacement_string);
|
||||
|
Loading…
Reference in New Issue
Block a user