diff --git a/libraries/app/application.cpp b/libraries/app/application.cpp index b77da4b711..98d187763a 100644 --- a/libraries/app/application.cpp +++ b/libraries/app/application.cpp @@ -1007,31 +1007,17 @@ void application::initialize(const fc::path& data_dir, const boost::program_opti fc::asio::default_io_service_scope::set_num_threads(num_threads); } - std::vector wanted; - if( options.count("plugins") ) - { - boost::split(wanted, options.at("plugins").as(), [](char c){return c == ' ';}); - } - else - { - wanted.push_back("witness"); - wanted.push_back("account_history"); - wanted.push_back("market_history"); - wanted.push_back("grouped_orders"); - } - int es_ah_conflict_counter = 0; - for (auto& it : wanted) - { - if(it == "account_history") - ++es_ah_conflict_counter; - if(it == "elasticsearch") - ++es_ah_conflict_counter; + if (options.count("plugins")) { + std::set plugins; + boost::split(plugins, options.at("plugins").as(), [](char c){return c == ' ';}); - if(es_ah_conflict_counter > 1) { - elog("Can't start program with elasticsearch and account_history plugin at the same time"); - std::exit(EXIT_FAILURE); - } - if (!it.empty()) enable_plugin(it); + FC_ASSERT(!(plugins.count("account_history") && plugins.count("elasticsearch")), + "Plugin conflict: Cannot load both account_history plugin and elasticsearch plugin"); + + std::for_each(plugins.begin(), plugins.end(), [this](const string& plug) mutable { + if (!plug.empty()) + enable_plugin(plug); + }); } } diff --git a/libraries/app/include/graphene/app/application.hpp b/libraries/app/include/graphene/app/application.hpp index 4892bb9a27..bea72bf8ed 100644 --- a/libraries/app/include/graphene/app/application.hpp +++ b/libraries/app/include/graphene/app/application.hpp @@ -48,18 +48,17 @@ namespace graphene { namespace app { application(); ~application(); - void set_program_options( boost::program_options::options_description& command_line_options, - boost::program_options::options_description& configuration_file_options )const; - void initialize(const fc::path& data_dir, const boost::program_options::variables_map&options); - void initialize_plugins( const boost::program_options::variables_map& options ); + void set_program_options(boost::program_options::options_description& command_line_options, + boost::program_options::options_description& configuration_file_options)const; + void initialize(const fc::path& data_dir, const boost::program_options::variables_map& options); + void initialize_plugins(const boost::program_options::variables_map& options); void startup(); void shutdown(); void startup_plugins(); void shutdown_plugins(); template - std::shared_ptr register_plugin() - { + std::shared_ptr register_plugin(bool auto_load = false) { auto plug = std::make_shared(); plug->plugin_set_app(this); @@ -72,6 +71,10 @@ namespace graphene { namespace app { _cfg_options.add(plugin_cfg_options); add_available_plugin( plug ); + + if (auto_load) + enable_plugin(plug->plugin_name()); + return plug; } std::shared_ptr get_plugin( const string& name )const;