Adjust MongoCXX instance handling in mongo_sink
Changes suggested by @gabime on #2519
This commit is contained in:
parent
a3c47cc682
commit
1bb1f05d73
@ -30,26 +30,18 @@ template<typename Mutex>
|
|||||||
class mongo_sink : public base_sink<Mutex>
|
class mongo_sink : public base_sink<Mutex>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
mongo_sink(const std::string &db_name, const std::string &collection_name, const std::string &uri = "mongodb://localhost:27017",
|
mongo_sink(const std::string &db_name, const std::string &collection_name, const std::string &uri = "mongodb://localhost:27017")
|
||||||
bool create_instance = true)
|
try : mongo_sink(std::make_shared<mongocxx::instance>(), db_name, collection_name, uri) {}
|
||||||
|
catch (...) {} // Re-throws exception
|
||||||
|
|
||||||
|
mongo_sink(const std::shared_ptr<mongocxx::instance> &instance, const std::string &db_name, const std::string &collection_name, const std::string &uri = "mongodb://localhost:27017")
|
||||||
|
: instance_(instance)
|
||||||
|
, db_name_(db_name)
|
||||||
|
, coll_name_(collection_name)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (create_instance && !instance_)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
instance_ = std::make_shared<mongocxx::instance>();
|
|
||||||
}
|
|
||||||
catch (const mongocxx::logic_error&)
|
|
||||||
{
|
|
||||||
// A MongoCXX instance already exists, so this object doesn't need to own it
|
|
||||||
instance_ = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
client_ = spdlog::details::make_unique<mongocxx::client>(mongocxx::uri{uri});
|
client_ = spdlog::details::make_unique<mongocxx::client>(mongocxx::uri{uri});
|
||||||
db_name_ = db_name;
|
|
||||||
coll_name_ = collection_name;
|
|
||||||
}
|
}
|
||||||
catch (const std::exception&)
|
catch (const std::exception&)
|
||||||
{
|
{
|
||||||
@ -82,13 +74,11 @@ protected:
|
|||||||
void flush_() override {}
|
void flush_() override {}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static std::shared_ptr<mongocxx::instance> instance_;
|
std::shared_ptr<mongocxx::instance> instance_;
|
||||||
std::string db_name_;
|
std::string db_name_;
|
||||||
std::string coll_name_;
|
std::string coll_name_;
|
||||||
std::unique_ptr<mongocxx::client> client_ = nullptr;
|
std::unique_ptr<mongocxx::client> client_ = nullptr;
|
||||||
};
|
};
|
||||||
template<>
|
|
||||||
std::shared_ptr<mongocxx::instance> mongo_sink<std::mutex>::instance_{};
|
|
||||||
|
|
||||||
#include "spdlog/details/null_mutex.h"
|
#include "spdlog/details/null_mutex.h"
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
Loading…
Reference in New Issue
Block a user