167 lines
6.2 KiB
C
167 lines
6.2 KiB
C
/*
|
|
Copyright (C) 2013, SkySQL Ab
|
|
|
|
|
|
This file is distributed as part of the SkySQL Gateway. It 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.
|
|
|
|
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, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
Author: Jan Lindström jan.lindstrom@skysql.com
|
|
|
|
Created: 20-06-2013
|
|
Updated:
|
|
|
|
*/
|
|
|
|
#ifndef TABLE_REPLICATION_CONSISTENCY_H
|
|
#define TABLE_REPLICATION_CONSISTENCY_H
|
|
|
|
#include <skygw_debug.h>
|
|
|
|
/* Global trace variables */
|
|
extern bool tbr_trace;
|
|
extern bool tbr_debug;
|
|
|
|
/* Structure definition for replication listener */
|
|
typedef struct {
|
|
char *server_url; /*!< in: Server address e.g.
|
|
mysql://root:pw@127.0.0.1:3308 */
|
|
unsigned long binlog_pos; /*!< in: Binlog position where to start
|
|
listening. */
|
|
int use_mariadb_gtid; /*!< in: 1 if MariaDB global
|
|
transaction id should be used for
|
|
binlog start position. */
|
|
int use_mysql_gtid; /*!< in: 1 if MySQL global
|
|
transaction id should be used for
|
|
binlog start position. */
|
|
int use_binlog_pos; /*!< in: 1 if binlog position
|
|
should be used for binlog start
|
|
position. */
|
|
unsigned char *gtid; /*!< in: Global transaction identifier
|
|
or NULL */
|
|
size_t gtid_length; /*!< in: Real size of GTID */
|
|
int is_master; /*!< in: Is this server a master 1 =
|
|
yes, 0 = no. */
|
|
int gateway_slave_server_id; /*!< in: replication listener slave
|
|
server id. */
|
|
int listener_id; /*!< in: listener id */
|
|
int connection_suggesfull; /*!< out: 0 if connection successfull
|
|
or error number. */
|
|
char *error_message; /*!< out: error message in case of
|
|
error. */
|
|
} replication_listener_t;
|
|
|
|
/* Structure definition for table consistency query */
|
|
typedef struct table_consistency_query {
|
|
unsigned char *db_dot_table; /*!< in: Fully qualified database and
|
|
table, e.g. Production.Orders. */
|
|
} table_consistency_query_t;
|
|
|
|
/* Structure definition for table consistency result */
|
|
typedef struct table_consistency {
|
|
unsigned char *db_dot_table;/*!< out: Fully qualified database and
|
|
table, e.g. Production.Orders. */
|
|
unsigned int server_id; /*!< out: Server id where the consitency
|
|
information is from. */
|
|
int mariadb_gtid_known; /*!< out: 1 if MariaDB global
|
|
transaction id is known. */
|
|
int mysql_gtid_known; /*!< out: 1 if MySQL global
|
|
transaction id is known. */
|
|
unsigned long binlog_pos; /*!< out: Last seen binlog position
|
|
on this server. */
|
|
unsigned char *gtid; /*!< out: If global transacition id
|
|
is known, will contain the id or NULL. */
|
|
size_t gtid_length; /*!< out: Real length of GTID */
|
|
int error_code; /*!< out: 0 if table consistency query
|
|
for this server succesfull or error
|
|
code. */
|
|
char *error_message; /*!< out: Error message if table
|
|
consistency query failed for this
|
|
server failed. */
|
|
} table_consistency_t;
|
|
|
|
/* Definitions for trace level */
|
|
#define TBR_TRACE_TRACE (1UL << 1) /* Trace only important events and
|
|
periodical consistency information */
|
|
|
|
/* Full trace of selected events and consistency information */
|
|
#define TBR_TRACE_DEBUG ((1UL << 2) | TBR_TRACE_TRACE)
|
|
|
|
extern bool listener_shutdown; /* This flag will be true
|
|
at shutdown */
|
|
|
|
|
|
EXTERN_C_BLOCK_BEGIN
|
|
|
|
/* Interface functions */
|
|
|
|
/***********************************************************************//**
|
|
This function will register replication listener for every server
|
|
provided and initialize all internal data structures and starts listening
|
|
the replication stream.
|
|
@return 0 on success, error code at failure. */
|
|
int
|
|
tb_replication_consistency_init(
|
|
/*============================*/
|
|
replication_listener_t *rpl, /*!< in: Server
|
|
definition. */
|
|
size_t n_servers, /*!< in: Number of servers */
|
|
unsigned int gateway_server_id, /*!< in: Gateway slave
|
|
server id. */
|
|
int trace_level); /*!< in: trace level */
|
|
|
|
/***********************************************************************//**
|
|
With this fuction client can request table consistency status for a
|
|
single table. As a return client will receive a number of consistency
|
|
status structures. Client must allocate memory for consistency result
|
|
array and provide the maximum number of values returned. At return
|
|
there is information how many results where available.
|
|
@return 0 on success, error code at failure. */
|
|
int
|
|
tb_replication_consistency_query(
|
|
/*=============================*/
|
|
table_consistency_query_t *tb_query, /*!< in: Table consistency
|
|
query. */
|
|
table_consistency_t *tb_consistency, /*!< in: Table consistency
|
|
status structure.*/
|
|
size_t *n_servers); /*!< inout: Number of
|
|
servers where to get table
|
|
consistency status. Out: Number
|
|
of successfull consistency
|
|
query results. */
|
|
|
|
/***********************************************************************//**
|
|
This function will reconnect replication listener to a server
|
|
provided.
|
|
@return 0 on success, error code at failure. */
|
|
int
|
|
tb_replication_consistency_reconnect(
|
|
/*=================================*/
|
|
replication_listener_t* rpl, /*!< in: Server definition.*/
|
|
unsigned int gateway_server_id); /*!< in: Gateway slave
|
|
server id. */
|
|
|
|
/***********************************************************************//**
|
|
This function is to shutdown the replication listener and free all
|
|
resources on table consistency. This function will store
|
|
the current status on metadata to MySQL server.
|
|
@return 0 on success, error code at failure. */
|
|
int
|
|
tb_replication_consistency_shutdown(
|
|
/*================================*/
|
|
char ** error_message); /*!< out: error_message*/
|
|
|
|
EXTERN_C_BLOCK_END
|
|
|
|
#endif
|