Fixed bug on memory allocation for string types and fixed linker problem on example main program
This commit is contained in:
@ -12,7 +12,7 @@ IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
|
|||||||
STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
|
STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
|
||||||
CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
|
CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
|
||||||
ELSE(BUILD_TYPE)
|
ELSE(BUILD_TYPE)
|
||||||
SET(CMAKE_INSTALL_CONFIG_NAME "")
|
SET(CMAKE_INSTALL_CONFIG_NAME "Debug")
|
||||||
ENDIF(BUILD_TYPE)
|
ENDIF(BUILD_TYPE)
|
||||||
MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
|
MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
|
||||||
ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
|
ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
|
||||||
|
|||||||
@ -48,10 +48,10 @@ namespace table_replication_listener {
|
|||||||
|
|
||||||
/* Table Consistency data structure */
|
/* Table Consistency data structure */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
std::string database_dot_table; /* Fully qualified db.table name,
|
char* database_dot_table; /* Fully qualified db.table name,
|
||||||
primary key. */
|
primary key. */
|
||||||
boost::uint32_t server_id; /* Server id */
|
boost::uint32_t server_id; /* Server id */
|
||||||
std::string gtid; /* Global transaction id */
|
char* gtid; /* Global transaction id */
|
||||||
boost::uint64_t binlog_pos; /* Binlog position */
|
boost::uint64_t binlog_pos; /* Binlog position */
|
||||||
bool gtid_known; /* Is gtid known ? */
|
bool gtid_known; /* Is gtid known ? */
|
||||||
} table_listener_consistency_t;
|
} table_listener_consistency_t;
|
||||||
@ -75,7 +75,8 @@ boost::mutex table_replication_mutex; /* This mutex is used protect
|
|||||||
/***********************************************************************//**
|
/***********************************************************************//**
|
||||||
This is the function that is executed by replication listeners.
|
This is the function that is executed by replication listeners.
|
||||||
At startup it will try to connect the server and start listening
|
At startup it will try to connect the server and start listening
|
||||||
the actual replication stream.
|
the actual replication stream. Stream is listened and events
|
||||||
|
are handled until a shutdown message is send from the user.
|
||||||
@return Pointer to error message. */
|
@return Pointer to error message. */
|
||||||
void* tb_replication_listener_reader(
|
void* tb_replication_listener_reader(
|
||||||
/*=================================*/
|
/*=================================*/
|
||||||
@ -109,9 +110,11 @@ void* tb_replication_listener_reader(
|
|||||||
|
|
||||||
Binary_log_event *event;
|
Binary_log_event *event;
|
||||||
|
|
||||||
|
// While we have events
|
||||||
while (true) {
|
while (true) {
|
||||||
Log_event_header *lheader;
|
Log_event_header *lheader;
|
||||||
|
|
||||||
|
// Wait for the next event
|
||||||
int result = binlog.wait_for_next_event(&event);
|
int result = binlog.wait_for_next_event(&event);
|
||||||
|
|
||||||
if (result == ERR_EOF)
|
if (result == ERR_EOF)
|
||||||
@ -132,10 +135,15 @@ void* tb_replication_listener_reader(
|
|||||||
<< event->get_event_type()
|
<< event->get_event_type()
|
||||||
<< " txt " << get_event_type_str(event->get_event_type())
|
<< " txt " << get_event_type_str(event->get_event_type())
|
||||||
<< " query " << qevent->query << " db " << qevent->db_name
|
<< " query " << qevent->query << " db " << qevent->db_name
|
||||||
|
<< " gtid " << gtid.get_string()
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Event is global transaction identifier. We need to store
|
||||||
|
value of this and handle actual state later.
|
||||||
|
*/
|
||||||
case GTID_EVENT_MARIADB:
|
case GTID_EVENT_MARIADB:
|
||||||
case GTID_EVENT_MYSQL:
|
case GTID_EVENT_MYSQL:
|
||||||
{
|
{
|
||||||
@ -145,15 +153,17 @@ void* tb_replication_listener_reader(
|
|||||||
gtid_known = true;
|
gtid_known = true;
|
||||||
gtid = Gtid(gevent->domain_id, gevent->server_id, gevent->sequence_number);
|
gtid = Gtid(gevent->domain_id, gevent->server_id, gevent->sequence_number);
|
||||||
} else {
|
} else {
|
||||||
|
// TODO MYSQL
|
||||||
std::cout << "Thread: " << id << " server_id " << lheader->server_id
|
|
||||||
<< " position " << lheader->next_position << " : Found event of type "
|
|
||||||
<< event->get_event_type()
|
|
||||||
<< " txt " << get_event_type_str(event->get_event_type())
|
|
||||||
<< " GTID " << gevent->domain_id << "-" << gevent->server_id << "-" << gevent->sequence_number
|
|
||||||
<< std::endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::cout << "Thread: " << id << " server_id " << lheader->server_id
|
||||||
|
<< " position " << lheader->next_position << " : Found event of type "
|
||||||
|
<< event->get_event_type()
|
||||||
|
<< " txt " << get_event_type_str(event->get_event_type())
|
||||||
|
<< " gtid " << gtid.get_string()
|
||||||
|
<< std::endl;
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -209,11 +219,13 @@ void* tb_replication_listener_reader(
|
|||||||
if(not_found) {
|
if(not_found) {
|
||||||
// Consistency for this table and server not found, insert a record
|
// Consistency for this table and server not found, insert a record
|
||||||
table_listener_consistency_t* tb_c = (table_listener_consistency_t*) malloc(sizeof(table_listener_consistency_t));
|
table_listener_consistency_t* tb_c = (table_listener_consistency_t*) malloc(sizeof(table_listener_consistency_t));
|
||||||
tb_c->database_dot_table = database_dot_table;
|
tb_c->database_dot_table = (char *)malloc(database_dot_table.size()+1);
|
||||||
|
strcpy(tb_c->database_dot_table, database_dot_table.c_str());
|
||||||
tb_c->server_id = lheader->server_id;
|
tb_c->server_id = lheader->server_id;
|
||||||
tb_c->binlog_pos = lheader->next_position;
|
tb_c->binlog_pos = lheader->next_position;
|
||||||
tb_c->gtid_known = gtid_known;
|
tb_c->gtid_known = gtid_known;
|
||||||
tb_c->gtid = gtid.get_string();
|
tb_c->gtid = (char *)malloc(gtid.get_string().size()+1);
|
||||||
|
strcpy(tb_c->gtid, gtid.get_string().c_str());
|
||||||
|
|
||||||
table_consistency_map.insert(pair<std::string, table_listener_consistency_t*>(database_dot_table,tb_c));
|
table_consistency_map.insert(pair<std::string, table_listener_consistency_t*>(database_dot_table,tb_c));
|
||||||
} else {
|
} else {
|
||||||
@ -221,7 +233,9 @@ void* tb_replication_listener_reader(
|
|||||||
// consistency values
|
// consistency values
|
||||||
|
|
||||||
tc->binlog_pos = lheader->next_position;
|
tc->binlog_pos = lheader->next_position;
|
||||||
tc->gtid = gtid.get_string();
|
free(tc->gtid);
|
||||||
|
tc->gtid = (char *)malloc(gtid.get_string().size()+1);
|
||||||
|
strcpy(tc->gtid, gtid.get_string().c_str());
|
||||||
tc->gtid_known = gtid_known;
|
tc->gtid_known = gtid_known;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,10 +246,12 @@ void* tb_replication_listener_reader(
|
|||||||
<< " txt " << get_event_type_str(event->get_event_type())
|
<< " txt " << get_event_type_str(event->get_event_type())
|
||||||
<< " table " << revent->table_id
|
<< " table " << revent->table_id
|
||||||
<< " tb " << database_dot_table
|
<< " tb " << database_dot_table
|
||||||
|
<< " gtid " << gtid.get_string()
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
// Default event handler, do nothing
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
} // switch
|
} // switch
|
||||||
|
|||||||
@ -23,7 +23,7 @@ CMAKE_BACKWARDS_COMPATIBILITY:STRING=2.4
|
|||||||
|
|
||||||
//Choose the type of build, options are: None(CMAKE_CXX_FLAGS or
|
//Choose the type of build, options are: None(CMAKE_CXX_FLAGS or
|
||||||
// CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.
|
// CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.
|
||||||
CMAKE_BUILD_TYPE:STRING=
|
CMAKE_BUILD_TYPE:STRING=Debug
|
||||||
|
|
||||||
//Enable/Disable color output during build.
|
//Enable/Disable color output during build.
|
||||||
CMAKE_COLOR_MAKEFILE:BOOL=ON
|
CMAKE_COLOR_MAKEFILE:BOOL=ON
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
|
# Generated by "Unix Makefiles" Generator, CMake Version 2.8
|
||||||
|
|
||||||
# compile C with /usr/bin/gcc
|
# compile C with /usr/bin/gcc
|
||||||
C_FLAGS = -I/usr/local/include -I/home/jan/skysql/skygateway/skygateway/utils
|
C_FLAGS = -g -I/usr/local/include -I/home/jan/skysql/skygateway/skygateway/utils
|
||||||
|
|
||||||
C_DEFINES =
|
C_DEFINES =
|
||||||
|
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
/usr/bin/gcc CMakeFiles/Example.dir/Example.c.o -o Example -rdynamic -Wl,-Bstatic -ltable_replication_consistency -Wl,-Bdynamic -lreplication -lboost_system -lpthread
|
/usr/bin/gcc -g CMakeFiles/Example.dir/Example.c.o -o Example -rdynamic -Wl,-Bstatic -ltable_replication_consistency -Wl,-Bdynamic -lreplication -lboost_system -lpthread
|
||||||
|
|||||||
Binary file not shown.
@ -3,6 +3,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
@ -24,7 +25,8 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
if ( strncmp("mysql://", uri, 8) == 0) {
|
if ( strncmp("mysql://", uri, 8) == 0) {
|
||||||
|
|
||||||
mrl[i].server_url = uri;
|
mrl[k].server_url = malloc(strlen(uri)+1);
|
||||||
|
strcpy(mrl[k].server_url, uri);
|
||||||
k++;
|
k++;
|
||||||
|
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
|
|||||||
@ -12,7 +12,7 @@ IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
|
|||||||
STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
|
STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
|
||||||
CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
|
CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
|
||||||
ELSE(BUILD_TYPE)
|
ELSE(BUILD_TYPE)
|
||||||
SET(CMAKE_INSTALL_CONFIG_NAME "")
|
SET(CMAKE_INSTALL_CONFIG_NAME "Debug")
|
||||||
ENDIF(BUILD_TYPE)
|
ENDIF(BUILD_TYPE)
|
||||||
MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
|
MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
|
||||||
ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
|
ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
|
||||||
|
|||||||
Reference in New Issue
Block a user