mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 10:56:12 +01:00 
			
		
		
		
	 db0c28eff8
			
		
	
	
	db0c28eff8
	
	
	
		
			
			Find and fix missing virtual override markings. Updates cmake maintainer flags to include -Wsuggest-override and -Winconsistent-missing-override.
		
			
				
	
	
		
			134 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* Copyright 2018 Codership Oy <info@codership.com>
 | |
| 
 | |
|    This program is free software; you can redistribute it and/or modify
 | |
|    it under the terms of the GNU General Public License as published by
 | |
|    the Free Software Foundation; version 2 of the License.
 | |
| 
 | |
|    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 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 WSREP_HIGH_PRIORITY_SERVICE_H
 | |
| #define WSREP_HIGH_PRIORITY_SERVICE_H
 | |
| 
 | |
| #include "wsrep/high_priority_service.hpp"
 | |
| #include "my_global.h"
 | |
| #include "sql_error.h" /* Diagnostics area */
 | |
| #include "sql_class.h" /* rpl_group_info */
 | |
| 
 | |
| class THD;
 | |
| class Relay_log_info;
 | |
| class Wsrep_server_service;
 | |
| 
 | |
| class Wsrep_high_priority_service :
 | |
|   public wsrep::high_priority_service,
 | |
|   public wsrep::high_priority_context
 | |
| {
 | |
| public:
 | |
|   Wsrep_high_priority_service(THD*);
 | |
|   ~Wsrep_high_priority_service();
 | |
|   int start_transaction(const wsrep::ws_handle&,
 | |
|                         const wsrep::ws_meta&) override;
 | |
|   int next_fragment(const wsrep::ws_meta&) override;
 | |
|   const wsrep::transaction& transaction() const override;
 | |
|   int adopt_transaction(const wsrep::transaction&) override;
 | |
|   int apply_write_set(const wsrep::ws_meta&, const wsrep::const_buffer&,
 | |
|                       wsrep::mutable_buffer&) override = 0;
 | |
|   int append_fragment_and_commit(const wsrep::ws_handle&,
 | |
|                                  const wsrep::ws_meta&,
 | |
|                                  const wsrep::const_buffer&,
 | |
|                                  const wsrep::xid&) override;
 | |
|   int remove_fragments(const wsrep::ws_meta&) override;
 | |
|   int commit(const wsrep::ws_handle&, const wsrep::ws_meta&) override;
 | |
|   int rollback(const wsrep::ws_handle&, const wsrep::ws_meta&) override;
 | |
|   int apply_toi(const wsrep::ws_meta&, const wsrep::const_buffer&,
 | |
|                 wsrep::mutable_buffer&) override;
 | |
|   void store_globals() override;
 | |
|   void reset_globals() override;
 | |
|   void switch_execution_context(wsrep::high_priority_service&) override;
 | |
|   int log_dummy_write_set(const wsrep::ws_handle&,
 | |
|                           const wsrep::ws_meta&,
 | |
|                           wsrep::mutable_buffer&) override;
 | |
|   void adopt_apply_error(wsrep::mutable_buffer&) override;
 | |
| 
 | |
|   virtual bool check_exit_status() const = 0;
 | |
|   void debug_crash(const char*) override;
 | |
| protected:
 | |
|   friend Wsrep_server_service;
 | |
|   THD* m_thd;
 | |
|   Relay_log_info*   m_rli;
 | |
|   rpl_group_info*   m_rgi;
 | |
|   struct shadow
 | |
|   {
 | |
|     ulonglong      option_bits;
 | |
|     uint           server_status;
 | |
|     struct st_vio* vio;
 | |
|     ulong          tx_isolation;
 | |
|     char*          db;
 | |
|     size_t         db_length;
 | |
|     //struct timeval user_time;
 | |
|     my_hrtime_t user_time;
 | |
|     longlong       row_count_func;
 | |
|     bool           wsrep_applier;
 | |
|   } m_shadow;
 | |
| };
 | |
| 
 | |
| class Wsrep_applier_service : public Wsrep_high_priority_service
 | |
| {
 | |
| public:
 | |
|   Wsrep_applier_service(THD*);
 | |
|   ~Wsrep_applier_service();
 | |
|   int apply_write_set(const wsrep::ws_meta&, const wsrep::const_buffer&,
 | |
|                       wsrep::mutable_buffer&) override;
 | |
|   int apply_nbo_begin(const wsrep::ws_meta&, const wsrep::const_buffer& data,
 | |
|                       wsrep::mutable_buffer& err) override;
 | |
|   void after_apply() override;
 | |
|   bool is_replaying() const override { return false; }
 | |
|   bool check_exit_status() const override;
 | |
| };
 | |
| 
 | |
| class Wsrep_replayer_service : public Wsrep_high_priority_service
 | |
| {
 | |
| public:
 | |
|   Wsrep_replayer_service(THD* replayer_thd, THD* orig_thd);
 | |
|   ~Wsrep_replayer_service();
 | |
|   int apply_write_set(const wsrep::ws_meta&, const wsrep::const_buffer&,
 | |
|                       wsrep::mutable_buffer&) override;
 | |
|   int apply_nbo_begin(const wsrep::ws_meta&, const wsrep::const_buffer& data,
 | |
|                       wsrep::mutable_buffer& err) override
 | |
|   {
 | |
|     DBUG_ASSERT(0); /* DDL should never cause replaying */
 | |
|     return 0;
 | |
|   }
 | |
|   void after_apply() override { }
 | |
|   bool is_replaying() const override { return true; }
 | |
|   void replay_status(enum wsrep::provider::status status)
 | |
|   { m_replay_status = status; }
 | |
|   enum wsrep::provider::status replay_status() const
 | |
|   { return m_replay_status; }
 | |
|   /* Replayer should never be forced to exit */
 | |
|   bool check_exit_status() const override { return false; }
 | |
| private:
 | |
|   THD* m_orig_thd;
 | |
|   struct da_shadow
 | |
|   {
 | |
|     enum Diagnostics_area::enum_diagnostics_status status;
 | |
|     ulonglong affected_rows;
 | |
|     ulonglong last_insert_id;
 | |
|     char message[MYSQL_ERRMSG_SIZE];
 | |
|     da_shadow()
 | |
|       : status()
 | |
|       , affected_rows()
 | |
|       , last_insert_id()
 | |
|       , message()
 | |
|     { }
 | |
|   } m_da_shadow;
 | |
|   enum wsrep::provider::status m_replay_status;
 | |
| };
 | |
| 
 | |
| #endif /* WSREP_HIGH_PRIORITY_SERVICE_H */
 |