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
 |