169 lines
6.0 KiB
C
169 lines
6.0 KiB
C
/***********************************************************************
|
|
|
|
Copyright (c) 2011, 2015, 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 Street, Suite 500, Boston, MA 02110-1335 USA
|
|
|
|
***********************************************************************/
|
|
/**************************************************//**
|
|
@file innodb_engine.h
|
|
|
|
Created 03/15/2011 Jimmy Yang
|
|
*******************************************************/
|
|
|
|
#ifndef INNODB_ENGINE_H
|
|
#define INNODB_ENGINE_H
|
|
|
|
#include "config.h"
|
|
|
|
#include <pthread.h>
|
|
|
|
#include <memcached/engine.h>
|
|
#include <memcached/util.h>
|
|
#include <memcached/visibility.h>
|
|
#include <innodb_utility.h>
|
|
#include <innodb_config.h>
|
|
|
|
/** Default settings that determine the number of write operation for
|
|
a connection before committing the transaction */
|
|
#define CONN_NUM_WRITE_COMMIT 1
|
|
|
|
/** Default settings that determine the number of read operation for
|
|
a connection before committing the transaction */
|
|
#define CONN_NUM_READ_COMMIT 1048510
|
|
|
|
/** Structure contains the cursor information for each connection */
|
|
typedef struct innodb_conn_data_struct innodb_conn_data_t;
|
|
|
|
/** Connection specific data */
|
|
struct innodb_conn_data_struct {
|
|
ib_crsr_t read_crsr; /*!< read only cursor for the
|
|
connection */
|
|
ib_crsr_t idx_read_crsr; /*!< index cursor for read */
|
|
ib_trx_t crsr_trx; /*!< transaction for write cursor */
|
|
ib_crsr_t crsr; /*!< data cursor */
|
|
ib_crsr_t idx_crsr; /*!< index cursor */
|
|
ib_tpl_t read_tpl; /*!< read tuple */
|
|
ib_tpl_t sel_tpl; /*!< read tuple */
|
|
ib_tpl_t tpl; /*!< read tuple */
|
|
ib_tpl_t idx_tpl; /*!< read tuple */
|
|
void* result; /*!< result info */
|
|
void* row_buf; /*!< row buffer to cache row read */
|
|
ib_ulint_t row_buf_len; /*!< row buffer len */
|
|
void* cmd_buf; /*!< buffer for incoming command */
|
|
ib_ulint_t cmd_buf_len; /*!< cmd buffer len */
|
|
bool result_in_use; /*!< result set or above row_buf
|
|
contain active result set */
|
|
bool use_default_mem;/*!< whether to use default engine
|
|
(memcached) memory */
|
|
void* mul_col_buf; /*!< buffer to construct final result
|
|
from multiple mapped column */
|
|
ib_ulint_t mul_col_buf_len;/*!< mul_col_buf len */
|
|
bool in_use; /*!< whether the connection
|
|
is processing a request */
|
|
bool is_stale; /*!< connection closed, this is
|
|
stale */
|
|
bool is_flushing; /*!< if flush is running. */
|
|
bool is_waiting_for_mdl;
|
|
/*!< Used to detrmine if the connection is
|
|
locked and waiting on MDL */
|
|
void* conn_cookie; /*!< connection cookie */
|
|
uint64_t n_total_reads; /*!< number of reads */
|
|
uint64_t n_reads_since_commit;
|
|
/*!< number of reads since
|
|
last commit */
|
|
uint64_t n_total_writes; /*!< number of updates, including
|
|
write/update/delete */
|
|
uint64_t n_writes_since_commit;
|
|
/*!< number of updates since
|
|
last commit */
|
|
void* thd; /*!< MySQL THD, used for binlog */
|
|
void* mysql_tbl; /*!< MySQL TABLE, used for binlog */
|
|
meta_cfg_info_t*conn_meta; /*!< metadata info for this
|
|
connection */
|
|
pthread_mutex_t curr_conn_mutex;/*!< mutex protect current connection */
|
|
UT_LIST_NODE_T(innodb_conn_data_t)
|
|
conn_list; /*!< list ptr */
|
|
};
|
|
|
|
typedef UT_LIST_BASE_NODE_T(innodb_conn_data_t) conn_list_t;
|
|
|
|
/** The InnoDB engine global data. Some layout are common to NDB memcached
|
|
engine and InnoDB memcached engine */
|
|
typedef struct innodb_engine {
|
|
/* members all common to Memcached Engines */
|
|
ENGINE_HANDLE_V1 engine; /*!< this InnoDB Memcached
|
|
engine */
|
|
SERVER_HANDLE_V1 server; /*!< Memcached server */
|
|
GET_SERVER_API get_server_api; /*!< call back to get Memcached
|
|
server common functions */
|
|
ENGINE_HANDLE* default_engine; /*!< default memcached engine */
|
|
|
|
struct {
|
|
size_t nthreads; /*!< number of threads handling
|
|
connections */
|
|
bool cas_enabled; /*!< whether cas is enabled */
|
|
} server_options;
|
|
|
|
union {
|
|
engine_info info; /*!< engine specific info */
|
|
char buffer[sizeof(engine_info)
|
|
* (LAST_REGISTERED_ENGINE_FEATURE + 1)];
|
|
/*!< buffer to store customized
|
|
engine info */
|
|
} info;
|
|
|
|
bool initialized; /*!< whether engine data
|
|
initialized */
|
|
bool connected; /*!< whether connection
|
|
established */
|
|
bool clean_stale_conn;
|
|
/*!< whether bk thread is
|
|
cleaning stale connections. */
|
|
|
|
/* following are InnoDB specific variables */
|
|
bool enable_binlog; /*!< whether binlog is enabled
|
|
for InnoDB Memcached */
|
|
bool enable_mdl; /*!< whether MDL is enabled
|
|
for InnoDB Memcached */
|
|
ib_trx_level_t trx_level; /*!< transaction isolation
|
|
level */
|
|
ib_ulint_t bk_commit_interval;
|
|
/*!< background commit
|
|
interval in seconds */
|
|
int cfg_status; /*!< configure status */
|
|
meta_cfg_info_t* meta_info; /*!< default metadata info from
|
|
configuration */
|
|
conn_list_t conn_data; /*!< list of data specific for
|
|
connections */
|
|
pthread_mutex_t conn_mutex; /*!< mutex synchronizes
|
|
connection specific data */
|
|
pthread_mutex_t cas_mutex; /*!< mutex synchronizes
|
|
CAS */
|
|
pthread_mutex_t flush_mutex; /*!< mutex synchronizes
|
|
flush and DMLs. */
|
|
pthread_t bk_thd_for_commit;/*!< background thread for
|
|
committing long running
|
|
transactions */
|
|
ib_cb_t* innodb_cb; /*!< pointer to callback
|
|
functions */
|
|
uint64_t read_batch_size;/*!< configured read batch
|
|
size */
|
|
uint64_t write_batch_size;/*!< configured write batch
|
|
size */
|
|
hash_table_t* meta_hash; /*!< hash table for metadata */
|
|
} innodb_engine_t;
|
|
|
|
#endif /* INNODB_ENGINE_H */
|