135 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| /*
 | |
|  * Copyright (c) 2016 MariaDB Corporation Ab
 | |
|  *
 | |
|  * Use of this software is governed by the Business Source License included
 | |
|  * in the LICENSE.TXT file and at www.mariadb.com/bsl11.
 | |
|  *
 | |
|  * Change Date: 2020-01-01
 | |
|  *
 | |
|  * On the date above, in accordance with the Business Source License, use
 | |
|  * of this software will be governed by version 2 or later of the General
 | |
|  * Public License.
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * @file schemarouter.hh - Common schemarouter definitions
 | |
|  */
 | |
| 
 | |
| #define MXS_MODULE_NAME "schemarouter"
 | |
| 
 | |
| #include <maxscale/cdefs.h>
 | |
| 
 | |
| #include <limits>
 | |
| #include <list>
 | |
| #include <set>
 | |
| #include <string>
 | |
| #include <tr1/memory>
 | |
| 
 | |
| #include <maxscale/buffer.hh>
 | |
| #include <maxscale/pcre2.h>
 | |
| #include <maxscale/service.h>
 | |
| #include <maxscale/backend.hh>
 | |
| 
 | |
| namespace schemarouter
 | |
| {
 | |
| /**
 | |
|  * Configuration values
 | |
|  */
 | |
| struct Config
 | |
| {
 | |
|     double            refresh_min_interval; /**< Minimum required interval between
 | |
|                                              * refreshes of databases */
 | |
|     bool              refresh_databases;    /**< Are databases refreshed when
 | |
|                                              * they are not found in the hashtable */
 | |
|     bool              debug;                /**< Enable verbose debug messages to clients */
 | |
|     pcre2_code*       ignore_regex;         /**< Regular expression used to ignore databases */
 | |
|     pcre2_match_data* ignore_match_data;    /**< Match data for @c ignore_regex */
 | |
|     std::set<std::string> ignored_dbs;      /**< Set of ignored databases */
 | |
|     SERVER*           preferred_server;     /**< Server to prefer in conflict situations */
 | |
| 
 | |
|     Config():
 | |
|         refresh_min_interval(0.0),
 | |
|         refresh_databases(false),
 | |
|         debug(false),
 | |
|         ignore_regex(NULL),
 | |
|         ignore_match_data(NULL),
 | |
|         preferred_server(NULL)
 | |
|     {
 | |
|     }
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Router statistics
 | |
|  */
 | |
| struct Stats
 | |
| {
 | |
|     int    n_queries;        /*< Number of queries forwarded    */
 | |
|     int    n_sescmd;         /*< Number of session commands */
 | |
|     int    longest_sescmd;   /*< Longest chain of stored session commands */
 | |
|     int    n_hist_exceeded;  /*< Number of sessions that exceeded session
 | |
|                               * command history limit */
 | |
|     int    sessions;         /*< Number of sessions */
 | |
|     int    shmap_cache_hit;  /*< Shard map was found from the cache */
 | |
|     int    shmap_cache_miss; /*< No shard map found from the cache */
 | |
|     double ses_longest;      /*< Longest session */
 | |
|     double ses_shortest;     /*< Shortest session */
 | |
|     double ses_average;      /*< Average session length */
 | |
| 
 | |
|     Stats():
 | |
|         n_queries(0),
 | |
|         n_sescmd(0),
 | |
|         longest_sescmd(0),
 | |
|         n_hist_exceeded(0),
 | |
|         sessions(0),
 | |
|         shmap_cache_hit(0),
 | |
|         shmap_cache_miss(0),
 | |
|         ses_longest(0.0),
 | |
|         ses_shortest(std::numeric_limits<double>::max()),
 | |
|         ses_average(0.0)
 | |
|     {
 | |
|     }
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Reference to a backend
 | |
|  *
 | |
|  * Owned by router client session.
 | |
|  */
 | |
| class SRBackend: public mxs::Backend
 | |
| {
 | |
| public:
 | |
| 
 | |
|     SRBackend(SERVER_REF *ref):
 | |
|         mxs::Backend(ref),
 | |
|         m_mapped(false)
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     ~SRBackend()
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @brief Set the mapping state of the backend
 | |
|      *
 | |
|      * @param value Value to set
 | |
|      */
 | |
|     void set_mapped(bool value);
 | |
| 
 | |
|     /**
 | |
|      * @brief Check if the backend has been mapped
 | |
|      *
 | |
|      * @return True if the backend has been mapped
 | |
|      */
 | |
|     bool is_mapped() const;
 | |
| 
 | |
| private:
 | |
|     bool               m_mapped; /**< Whether the backend has been mapped */
 | |
| };
 | |
| 
 | |
| typedef std::tr1::shared_ptr<SRBackend> SSRBackend;
 | |
| typedef std::list<SSRBackend> SSRBackendList;
 | |
| 
 | |
| }
 | 
