modules/adminapi/mod_dba.h (163 lines of code) (raw):

/* * Copyright (c) 2016, 2024, Oracle and/or its affiliates. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2.0, * as published by the Free Software Foundation. * * This program is designed to work with certain software (including * but not limited to OpenSSL) that is licensed under separate terms, * as designated in a particular file or component or in included license * documentation. The authors of MySQL hereby grant you an additional * permission to link the program and your derivative works with the * separately licensed software that they have either included with * the program or referenced in the documentation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * the GNU General Public License, version 2.0, for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef MODULES_ADMINAPI_MOD_DBA_H_ #define MODULES_ADMINAPI_MOD_DBA_H_ #include <map> #include <memory> #include <set> #include <string> #include <tuple> #include <utility> #include <vector> #include "modules/adminapi/common/common.h" #include "modules/adminapi/common/instance_pool.h" #include "modules/adminapi/common/provisioning_interface.h" #include "modules/adminapi/dba/api_options.h" #include "modules/adminapi/mod_dba_cluster.h" #include "modules/adminapi/mod_dba_cluster_set.h" #include "modules/adminapi/mod_dba_replica_set.h" #include "modules/adminapi/replica_set/replica_set_impl.h" #include "modules/mod_common.h" #include "mysqlshdk/include/scripting/type_info/custom.h" #include "mysqlshdk/include/scripting/type_info/generic.h" #include "mysqlshdk/libs/db/session.h" #include "shellcore/ishell_core.h" #include "shellcore/shell_options.h" namespace mysqlsh { namespace dba { /** * \ingroup AdminAPI * $(DBA_BRIEF) */ class SHCORE_PUBLIC Dba : public shcore::Cpp_object_bridge, public std::enable_shared_from_this<Dba> { public: #if DOXYGEN_JS Integer verbose; Session session; JSON checkInstanceConfiguration(InstanceDef instance, Dictionary options); Undefined configureReplicaSetInstance(InstanceDef instance, Dictionary options); Undefined configureLocalInstance(InstanceDef instance, Dictionary options); Undefined configureInstance(InstanceDef instance, Dictionary options); Cluster createCluster(String name, Dictionary options); ReplicaSet createReplicaSet(String name, Dictionary options); Undefined deleteSandboxInstance(Integer port, Dictionary options); Instance deploySandboxInstance(Integer port, Dictionary options); Undefined dropMetadataSchema(Dictionary options); Cluster getCluster(String name, Dictionary options); ClusterSet getClusterSet(); ReplicaSet getReplicaSet(); Undefined killSandboxInstance(Integer port, Dictionary options); Cluster rebootClusterFromCompleteOutage(String clusterName, Dictionary options); Undefined startSandboxInstance(Integer port, Dictionary options); Undefined stopSandboxInstance(Integer port, Dictionary options); Undefined upgradeMetadata(Dictionary options); #elif DOXYGEN_PY int verbose; Session session; JSON check_instance_configuration(InstanceDef instance, dict options); None configure_replica_set_instance(InstanceDef instance, dict options); None configure_local_instance(InstanceDef instance, dict options); None configure_instance(InstanceDef instance, dict options); Cluster create_cluster(str name, dict options); ReplicaSet create_replica_set(str name, dict options); None delete_sandbox_instance(int port, dict options); Instance deploy_sandbox_instance(int port, dict options); None drop_metadata_schema(dict options); Cluster get_cluster(str name, dict options); ClusterSet get_cluster_set(); ReplicaSet get_replica_set(); None kill_sandbox_instance(int port, dict options); Cluster reboot_cluster_from_complete_outage(str clusterName, dict options); None start_sandbox_instance(int port, dict options); None stop_sandbox_instance(int port, dict options); None upgrade_metadata(dict options); #endif explicit Dba(shcore::IShell_core *owner); explicit Dba(const std::shared_ptr<ShellBaseSession> &session); virtual ~Dba(); virtual std::string class_name() const { return "Dba"; } virtual bool operator==(const Object_bridge &other) const; virtual void set_member(const std::string &prop, shcore::Value value); virtual shcore::Value get_member(const std::string &prop) const; virtual std::shared_ptr<mysqlshdk::db::ISession> get_active_shell_session() const; virtual void connect_to_target_group( std::shared_ptr<Instance> target_member_session, std::shared_ptr<MetadataStorage> *out_metadata, std::shared_ptr<Instance> *out_group_server, bool connect_to_primary) const; virtual std::shared_ptr<Instance> connect_to_target_member() const; std::shared_ptr<Cluster> get_cluster( const char *name, std::shared_ptr<MetadataStorage> metadata, std::shared_ptr<Instance> group_server, bool reboot_cluster = false, bool allow_invalidated = false) const; void do_configure_instance( const mysqlshdk::db::Connection_options &instance_def_, const Configure_instance_options &options, Cluster_type purpose); public: // Exported public methods shcore::Value check_instance_configuration( const mysqlshdk::utils::nullable<Connection_options> &instance_def = {}, const shcore::Option_pack_ref<Check_instance_configuration_options> &options = {}); // create and start void deploy_sandbox_instance( int port, const shcore::Option_pack_ref<Deploy_sandbox_options> &options = {}); void stop_sandbox_instance( int port, const shcore::Option_pack_ref<Stop_sandbox_options> &options = {}); void delete_sandbox_instance( int port, const shcore::Option_pack_ref<Common_sandbox_options> &options = {}); void kill_sandbox_instance( int port, const shcore::Option_pack_ref<Common_sandbox_options> &options = {}); void start_sandbox_instance( int port, const shcore::Option_pack_ref<Common_sandbox_options> &options = {}); void configure_local_instance( const mysqlshdk::utils::nullable<Connection_options> &instance_def = {}, const shcore::Option_pack_ref<Configure_cluster_local_instance_options> &options = {}); void configure_instance( const mysqlshdk::utils::nullable<Connection_options> &instance_def = {}, const shcore::Option_pack_ref<Configure_cluster_instance_options> &options = {}); void configure_replica_set_instance( const mysqlshdk::utils::nullable<Connection_options> &instance_def = {}, const shcore::Option_pack_ref<Configure_replicaset_instance_options> &options = {}); shcore::Value create_cluster( const std::string &cluster_name, const shcore::Option_pack_ref<Create_cluster_options> &options = {}); void upgrade_metadata( const shcore::Option_pack_ref<Upgrade_metadata_options> &options); std::shared_ptr<Cluster> get_cluster( const mysqlshdk::null_string &cluster_name = {}, const shcore::Dictionary_t &options = {}) const; void drop_metadata_schema( const shcore::Option_pack_ref<Drop_metadata_schema_options> &options); std::shared_ptr<Cluster> reboot_cluster_from_complete_outage( const mysqlshdk::null_string &cluster_name = {}, const shcore::Option_pack_ref<Reboot_cluster_options> &options = {}); // ReplicaSets shcore::Value create_replica_set( const std::string &full_rs_name, const shcore::Option_pack_ref<Create_replicaset_options> &options); std::shared_ptr<ReplicaSet> get_replica_set(); std::shared_ptr<Replica_set_impl> get_replica_set( const std::shared_ptr<MetadataStorage> &metadata, const std::shared_ptr<Instance> &target_server); // ClusterSet std::shared_ptr<ClusterSet> get_cluster_set(); std::shared_ptr<Instance> check_preconditions( const std::string &function_name, const std::shared_ptr<Instance> &group_server, const Function_availability *custom_func_avail = nullptr); protected: shcore::IShell_core *_shell_core = nullptr; std::shared_ptr<ShellBaseSession> m_session; void init(); private: ProvisioningInterface _provisioning_interface; void exec_instance_op(const std::string &function, int port, const std::string &sandbox_dir, const std::string &password = ""); }; } // namespace dba } // namespace mysqlsh #endif // MODULES_ADMINAPI_MOD_DBA_H_