diff --git a/server/core/dcb.c b/server/core/dcb.c index deccdb0a5..c632afe50 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -1219,7 +1219,7 @@ printDCB(DCB *dcb) static void spin_reporter(void *dcb, char *desc, int value) { - dcb_printf((DCB *)dcb, "\t\t%-35s %d\n", desc, value); + dcb_printf((DCB *)dcb, "\t\t%-40s %d\n", desc, value); } diff --git a/server/include/gw.h b/server/include/gw.h index 822884f9b..14adfb1a0 100644 --- a/server/include/gw.h +++ b/server/include/gw.h @@ -28,10 +28,10 @@ * Configuration for send and receive socket buffer sizes for * backend and cleint connections. */ -#define GW_BACKEND_SO_SNDBUF 32768 -#define GW_BACKEND_SO_RCVBUF 32768 -#define GW_CLIENT_SO_SNDBUF 32768 -#define GW_CLIENT_SO_RCVBUF 32768 +#define GW_BACKEND_SO_SNDBUF (128 * 1024) +#define GW_BACKEND_SO_RCVBUF (128 * 1024) +#define GW_CLIENT_SO_SNDBUF (128 * 1024) +#define GW_CLIENT_SO_RCVBUF (128 * 1024) #define GW_NOINTR_CALL(A) do { errno = 0; A; } while (errno == EINTR) #define GW_MYSQL_LOOP_TIMEOUT 300000000 diff --git a/server/modules/protocol/mysql_client.c b/server/modules/protocol/mysql_client.c index bace1eef5..42958fc2d 100644 --- a/server/modules/protocol/mysql_client.c +++ b/server/modules/protocol/mysql_client.c @@ -1180,9 +1180,9 @@ int gw_MySQLAccept(DCB *listener) conn_open[c_sock] = true; #endif /* set nonblocking */ - sendbuf = GW_BACKEND_SO_SNDBUF; + sendbuf = GW_CLIENT_SO_SNDBUF; setsockopt(c_sock, SOL_SOCKET, SO_SNDBUF, &sendbuf, optlen); - sendbuf = GW_BACKEND_SO_RCVBUF; + sendbuf = GW_CLIENT_SO_RCVBUF; setsockopt(c_sock, SOL_SOCKET, SO_RCVBUF, &sendbuf, optlen); setnonblocking(c_sock); diff --git a/server/modules/protocol/mysql_common.c b/server/modules/protocol/mysql_common.c index 78e82cb86..2f845f268 100644 --- a/server/modules/protocol/mysql_common.c +++ b/server/modules/protocol/mysql_common.c @@ -766,9 +766,9 @@ int gw_do_connect_to_backend( /* prepare for connect */ setipaddress(&serv_addr.sin_addr, host); serv_addr.sin_port = htons(port); - bufsize = GW_CLIENT_SO_SNDBUF; + bufsize = GW_BACKEND_SO_SNDBUF; setsockopt(so, SOL_SOCKET, SO_SNDBUF, &bufsize, sizeof(bufsize)); - bufsize = GW_CLIENT_SO_RCVBUF; + bufsize = GW_BACKEND_SO_RCVBUF; setsockopt(so, SOL_SOCKET, SO_RCVBUF, &bufsize, sizeof(bufsize)); /* set socket to as non-blocking here */ setnonblocking(so); diff --git a/server/modules/routing/binlog/blr.c b/server/modules/routing/binlog/blr.c index dec20f8b4..d92f03c10 100644 --- a/server/modules/routing/binlog/blr.c +++ b/server/modules/routing/binlog/blr.c @@ -172,6 +172,7 @@ int i; inst->low_water = DEF_LOW_WATER; inst->high_water = DEF_HIGH_WATER; + inst->initbinlog = 0; /* * We only support one server behind this router, since the server is @@ -244,6 +245,10 @@ int i; { inst->fileroot = strdup(value); } + else if (strcmp(options[i], "initialfile") == 0) + { + inst->initbinlog = atoi(value); + } else if (strcmp(options[i], "lowwater") == 0) { inst->low_water = atoi(value); @@ -450,11 +455,14 @@ ROUTER_SLAVE *slave = (ROUTER_SLAVE *)router_session; * TODO: Handle closure of master session */ LOGIF(LE, (skygw_log_write_flush( - LOGFILE_ERROR, "Binlog router close session with master"))); + LOGFILE_ERROR, + "Binlog router close session with master server %s", + router->service->databases->unique_name))); blr_master_reconnect(router); return; } CHK_CLIENT_RSES(slave); + /** * Lock router client session for secure read and update. */ diff --git a/server/modules/routing/binlog/blr_file.c b/server/modules/routing/binlog/blr_file.c index 4f7232e64..7a44033fe 100644 --- a/server/modules/routing/binlog/blr_file.c +++ b/server/modules/routing/binlog/blr_file.c @@ -115,7 +115,11 @@ struct dirent *dp; if (n == 0) // No binlog files found { - sprintf(filename, BINLOG_NAMEFMT, router->fileroot, 1); + if (router->initbinlog) + sprintf(filename, BINLOG_NAMEFMT, router->fileroot, + router->initbinlog); + else + sprintf(filename, BINLOG_NAMEFMT, router->fileroot, 1); blr_file_create(router, filename); } else diff --git a/server/modules/routing/binlog/blr_master.c b/server/modules/routing/binlog/blr_master.c index 412276e48..ca7ec605b 100644 --- a/server/modules/routing/binlog/blr_master.c +++ b/server/modules/routing/binlog/blr_master.c @@ -105,7 +105,8 @@ GWBUF *buf; if ((router->master = dcb_connect(router->service->databases, router->session, BLR_PROTOCOL)) == NULL) { LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR, - "Binlog router: failed to connect to master\n"))); + "Binlog router: failed to connect to master server '%s'\n", + router->service->databases->unique_name))); return; } @@ -828,7 +829,7 @@ char file[BINLOG_FNAMELEN+1]; pos = extract_field(ptr+4, 32); pos <<= 32; pos |= extract_field(ptr, 32); - slen = len - 8; + slen = len - (8 + 4); // Allow for position and CRC if (slen > BINLOG_FNAMELEN) slen = BINLOG_FNAMELEN; memcpy(file, ptr + 8, slen); diff --git a/server/modules/routing/binlog/blr_slave.c b/server/modules/routing/binlog/blr_slave.c index 176efbe4c..5d7a16475 100644 --- a/server/modules/routing/binlog/blr_slave.c +++ b/server/modules/routing/binlog/blr_slave.c @@ -95,7 +95,7 @@ blr_slave_request(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *queue) return 0; } - atomic_add(&slave->stats.n_requests, 1); + slave->stats.n_requests++; switch (MYSQL_COMMAND(queue)) { case COM_QUERY: @@ -796,7 +796,7 @@ doitagain: slave->binlogfile))); return 0; } - atomic_add(&slave->stats.n_bursts, 1); + slave->stats.n_bursts++; spinlock_acquire(&slave->catch_lock); slave->cstate |= CS_INNERLOOP; spinlock_release(&slave->catch_lock); @@ -830,7 +830,7 @@ if (hdr.event_size > DEF_HIGH_WATER) slave->stats.n_above++; slave->binlog_pos = hdr.next_pos; } rval = written; - atomic_add(&slave->stats.n_events, 1); + slave->stats.n_events++; burst++; } if (record == NULL) @@ -843,7 +843,7 @@ if (hdr.event_size > DEF_HIGH_WATER) slave->stats.n_above++; } while (record && DCB_BELOW_LOW_WATER(slave->dcb)); if (record) { - atomic_add(&slave->stats.n_flows, 1); + slave->stats.n_flows++; spinlock_acquire(&slave->catch_lock); slave->cstate |= CS_EXPECTCB; spinlock_release(&slave->catch_lock); @@ -854,7 +854,7 @@ if (hdr.event_size > DEF_HIGH_WATER) slave->stats.n_above++; spinlock_acquire(&slave->catch_lock); if ((slave->cstate & CS_UPTODATE) == 0) { - atomic_add(&slave->stats.n_upd, 1); + slave->stats.n_upd++; slave->cstate |= CS_UPTODATE; state_change = 1; } @@ -907,7 +907,7 @@ ROUTER_INSTANCE *router = slave->router; if (slave->state == BLRS_DUMPING && slave->binlog_pos != router->binlog_position) { - atomic_add(&slave->stats.n_dcb, 1); + slave->stats.n_dcb++; blr_slave_catchup(router, slave); } } @@ -916,12 +916,12 @@ ROUTER_INSTANCE *router = slave->router; { if (slave->state == BLRS_DUMPING) { - atomic_add(&slave->stats.n_cb, 1); + slave->stats.n_cb++; blr_slave_catchup(router, slave); } else { - atomic_add(&slave->stats.n_cbna, 1); + slave->stats.n_cbna++; } } return 0;