Added error handling in BINLOG_DUMP phase

Added error handling in BINLOG_DUMP phase: router goes into
BLRM_SLAVE_STOPPED state

Removed blr_file_add_magic called twice
This commit is contained in:
MassimilianoPinto
2015-06-22 10:35:02 +02:00
parent 64bb68c12c
commit 5bc07c5100
3 changed files with 13 additions and 5 deletions

View File

@ -37,6 +37,7 @@
#include <pthread.h> #include <pthread.h>
#include <memlog.h> #include <memlog.h>
#include <zlib.h>
#define BINLOG_FNAMELEN 16 #define BINLOG_FNAMELEN 16
#define BLR_PROTOCOL "MySQLBackend" #define BLR_PROTOCOL "MySQLBackend"

View File

@ -218,9 +218,8 @@ int fd;
close(router->binlog_fd); close(router->binlog_fd);
spinlock_acquire(&router->binlog_lock); spinlock_acquire(&router->binlog_lock);
strncpy(router->binlog_name, file,BINLOG_FNAMELEN); strncpy(router->binlog_name, file,BINLOG_FNAMELEN);
blr_file_add_magic(router, fd);
spinlock_release(&router->binlog_lock);
router->binlog_fd = fd; router->binlog_fd = fd;
spinlock_release(&router->binlog_lock);
return 1; return 1;
} }
@ -262,12 +261,13 @@ int fd;
LOGIF(LE, (skygw_log_write(LOGFILE_ERROR, LOGIF(LE, (skygw_log_write(LOGFILE_ERROR,
"%s: binlog file %s has an invalid length %d.", "%s: binlog file %s has an invalid length %d.",
router->service->name, path, router->binlog_position))); router->service->name, path, router->binlog_position)));
close(fd); close(fd);
spinlock_release(&router->binlog_lock);
return; return;
} }
} }
spinlock_release(&router->binlog_lock);
router->binlog_fd = fd; router->binlog_fd = fd;
spinlock_release(&router->binlog_lock);
} }
/** /**

View File

@ -246,6 +246,9 @@ blr_master_reconnect(ROUTER_INSTANCE *router)
{ {
int do_reconnect = 0; int do_reconnect = 0;
if (router->master_state == BLRM_SLAVE_STOPPED)
return;
spinlock_acquire(&router->lock); spinlock_acquire(&router->lock);
if (router->active_logs) if (router->active_logs)
{ {
@ -914,7 +917,8 @@ static REP_HEADER phdr;
blr_extract_header(ptr, &hdr); blr_extract_header(ptr, &hdr);
if (hdr.event_size != len - 5) /* Sanity check */ /* Sanity check */
if (hdr.ok == 0 && hdr.event_size != len - 5)
{ {
LOGIF(LE,(skygw_log_write( LOGIF(LE,(skygw_log_write(
LOGFILE_ERROR, LOGFILE_ERROR,
@ -1146,6 +1150,9 @@ static REP_HEADER phdr;
free(router->m_errmsg); free(router->m_errmsg);
router->m_errmsg = msg_err; router->m_errmsg = msg_err;
/* Force stopped state */
router->master_state = BLRM_SLAVE_STOPPED;
spinlock_release(&router->lock); spinlock_release(&router->lock);
LOGIF(LE,(skygw_log_write(LOGFILE_ERROR, LOGIF(LE,(skygw_log_write(LOGFILE_ERROR,