mysql5/mysql-5.7.27/storage/ndb/memcache/include/ClusterConnectionPool.h

103 lines
3.0 KiB
C++

/*
Copyright (c) 2011, Oracle and/or its affiliates. All rights
reserved.
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 NDBMEMCACHE_CLUSTERCONNECTIONPOOL_H
#define NDBMEMCACHE_CLUSTERCONNECTIONPOOL_H
#define MAX_CONNECT_POOL 4
#include <memcached/engine.h>
#include <NdbApi.hpp>
#include "NdbInstance.h"
class ClusterConnectionPool;
/* ClusterConnectionPool.cc keeps a global hash table of
* ClusterConnectionPool instances, keyed by connect string
*/
ClusterConnectionPool * get_connection_pool_for_cluster(const char * connect_string);
class ClusterConnectionPool {
/* public instance variables */
public:
const char * const connect_string; /*< cluster connect string */
unsigned int usec_rtt; /*< estimated newtork latency within cluster */
/* private instance variables */
private:
Ndb_cluster_connection *main_conn;
unsigned int pool_size;
Ndb_cluster_connection * pool_connections[MAX_CONNECT_POOL];
void * custom_data_ptr;
/* public class methods */
public:
static Ndb_cluster_connection * connect(const char *connectstring);
/* public instance methods */
public:
ClusterConnectionPool(const char *s = 0);
~ClusterConnectionPool();
void setMainConnection(Ndb_cluster_connection *); // inlined
Ndb_cluster_connection *getMainConnection() const { return main_conn; };
unsigned int getPoolSize() const { return pool_size; };
/** After startup time, create an additional connection in the pool.
Returns the new connection
*/
Ndb_cluster_connection * addPooledConnection();
/** Get the connection numbered "my_id modulo pool_size" */
Ndb_cluster_connection *getPooledConnection(int my_id) const; // inlined
/** Get aggregated NDB API client statistics */
void add_stats(const char *, ADD_STAT, const void *);
/** Set/get a user-supplied pointer */
void setCustomData(void *p);
void * getCustomData();
};
/* Inline functions */
inline void ClusterConnectionPool::setMainConnection(Ndb_cluster_connection *c) {
main_conn = c;
pool_size = 1;
pool_connections[0] = c;
}
inline Ndb_cluster_connection * ClusterConnectionPool::getPooledConnection(int i) const {
return pool_connections[i % pool_size];
}
inline void ClusterConnectionPool::setCustomData(void *p) {
custom_data_ptr = p;
}
inline void * ClusterConnectionPool::getCustomData(void) {
return custom_data_ptr;
}
#endif