MXS-1156: Disable heartbeat if value is set to 0
MXS-1156: Disable heartbeat if value is set to 0. A warning log is written in maxscale log file when heartbeat is not set.
This commit is contained in:
		| @ -647,7 +647,7 @@ createInstance(SERVICE *service, char **options) | ||||
|                 { | ||||
|                     int h_val = (int)strtol(value, NULL, 10); | ||||
|  | ||||
|                     if (h_val <= 0 || | ||||
|                     if (h_val < 0 || | ||||
|                         (errno == ERANGE) || | ||||
|                         h_val > BLR_HEARTBEAT_MAX_INTERVAL) | ||||
|                     { | ||||
| @ -658,6 +658,13 @@ createInstance(SERVICE *service, char **options) | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         if (h_val == 0) | ||||
|                         { | ||||
|                             MXS_WARNING("%s: %s", | ||||
|                                         inst->service->name, | ||||
|                                         "MASTER_HEARTBEAT_PERIOD has been set to 0 (disabled): " | ||||
|                                         "a master network inactivity will not be handled."); | ||||
|                         } | ||||
|                         inst->heartbeat = h_val; | ||||
|                     } | ||||
|                 } | ||||
| @ -1570,8 +1577,9 @@ diagnostics(MXS_ROUTER *router, DCB *dcb) | ||||
|  | ||||
|     dcb_printf(dcb, "\tBinlog directory:                            %s\n", | ||||
|                router_inst->binlogdir); | ||||
|     dcb_printf(dcb, "\tHeartbeat period (seconds):                  %lu\n", | ||||
|                router_inst->heartbeat); | ||||
|     dcb_printf(dcb, "\tHeartbeat period (seconds):                  %lu%s\n", | ||||
|                router_inst->heartbeat, | ||||
|                router_inst->heartbeat ? "" : "(disabled)"); | ||||
|     dcb_printf(dcb, "\tNumber of master connects:                   %d\n", | ||||
|                router_inst->stats.n_masterstarts); | ||||
|     dcb_printf(dcb, "\tNumber of delayed reconnects:                %d\n", | ||||
|  | ||||
| @ -103,7 +103,7 @@ void blr_notify_all_slaves(ROUTER_INSTANCE *router); | ||||
| extern bool blr_notify_waiting_slave(ROUTER_SLAVE *slave); | ||||
| extern bool blr_save_mariadb_gtid(ROUTER_INSTANCE *inst); | ||||
| static void blr_register_serverid(ROUTER_INSTANCE *router, GWBUF *buf); | ||||
| static void blr_register_heartbeat(ROUTER_INSTANCE *router, GWBUF *buf); | ||||
| static bool blr_register_heartbeat(ROUTER_INSTANCE *router, GWBUF *buf); | ||||
| static void blr_register_setchecksum(ROUTER_INSTANCE *router, GWBUF *buf); | ||||
| static void blr_register_getchecksum(ROUTER_INSTANCE *router, GWBUF *buf); | ||||
| static void blr_register_handle_checksum(ROUTER_INSTANCE *router, GWBUF *buf); | ||||
| @ -2328,11 +2328,15 @@ void blr_notify_all_slaves(ROUTER_INSTANCE *router) | ||||
|  * Handles previous reply from Master and sends | ||||
|  * SET @master_heartbeat_period to master | ||||
|  * | ||||
|  * The statement is sent only if router->heartbeat > 0 | ||||
|  * | ||||
|  * @param router    Current router instance | ||||
|  * @param buf       GWBUF with server reply to previous | ||||
|  *                  registration command | ||||
|  * @return          True if hearbeat request has been sent | ||||
|  *                  false otherwise (router->heartbeat = 0) | ||||
|  */ | ||||
| static void blr_register_heartbeat(ROUTER_INSTANCE *router, GWBUF *buf) | ||||
| static bool blr_register_heartbeat(ROUTER_INSTANCE *router, GWBUF *buf) | ||||
| { | ||||
|     char query[BLRM_SET_HEARTBEAT_QUERY_LEN]; | ||||
|     char *val = blr_extract_column(buf, 2); | ||||
| @ -2359,11 +2363,17 @@ static void blr_register_heartbeat(ROUTER_INSTANCE *router, GWBUF *buf) | ||||
|     } | ||||
|     MXS_FREE(val); | ||||
|  | ||||
|     // Prepare new registration message | ||||
|     sprintf(query, | ||||
|             "SET @master_heartbeat_period = %lu000000000", | ||||
|             router->heartbeat); | ||||
|     blr_register_send_command(router, query, BLRM_HBPERIOD); | ||||
|     /* Send Heartbeat request ony if router->heartbeat is set */ | ||||
|     if (router->heartbeat > 0) | ||||
|     { | ||||
|         // Prepare new registration message | ||||
|         sprintf(query, | ||||
|                 "SET @master_heartbeat_period = %lu000000000", | ||||
|                 router->heartbeat); | ||||
|         blr_register_send_command(router, query, BLRM_HBPERIOD); | ||||
|     } | ||||
|  | ||||
|     return router->heartbeat != 0; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @ -2378,11 +2388,18 @@ static void blr_register_heartbeat(ROUTER_INSTANCE *router, GWBUF *buf) | ||||
|  */ | ||||
| static void blr_register_setchecksum(ROUTER_INSTANCE *router, GWBUF *buf) | ||||
| { | ||||
|     // Response from master should be stored | ||||
|     blr_register_cache_response(router, | ||||
|                                 &router->saved_master.heartbeat, | ||||
|                                 "heartbeat", | ||||
|                                 buf); | ||||
|     /** | ||||
|      * Response from master (set heartbeat reply) should be stored | ||||
|      * only if router->heartbeat is set | ||||
|      */ | ||||
|     if (router->heartbeat > 0) | ||||
|     { | ||||
|         blr_register_cache_response(router, | ||||
|                                     &router->saved_master.heartbeat, | ||||
|                                     "heartbeat", | ||||
|                                     buf); | ||||
|     } | ||||
|  | ||||
|     // New registration message | ||||
|     blr_register_send_command(router, | ||||
|                               "SET @master_binlog_checksum =" | ||||
| @ -2858,8 +2875,11 @@ static void blr_start_master_registration(ROUTER_INSTANCE *router, GWBUF *buf) | ||||
|         router->retry_backoff = 1; | ||||
|         break; | ||||
|     case BLRM_SERVERID: | ||||
|         blr_register_heartbeat(router, buf); | ||||
|         break; | ||||
|         // If set heartbeat is not being sent, next state is BLRM_HBPERIOD | ||||
|         if (blr_register_heartbeat(router, buf)) | ||||
|         { | ||||
|             break; | ||||
|         } | ||||
|     case BLRM_HBPERIOD: | ||||
|         blr_register_setchecksum(router, buf); | ||||
|         break; | ||||
| @ -3146,14 +3166,17 @@ static void blr_start_master_registration(ROUTER_INSTANCE *router, GWBUF *buf) | ||||
|         /** | ||||
|          * Set heartbeat check task | ||||
|          */ | ||||
|         snprintf(task_name, | ||||
|                  BLRM_TASK_NAME_LEN, | ||||
|                  "%s heartbeat", | ||||
|                  router->service->name); | ||||
|         hktask_add(task_name, | ||||
|                    blr_check_last_master_event, | ||||
|                    router, | ||||
|                    router->heartbeat); | ||||
|         if (router->heartbeat > 0) | ||||
|         { | ||||
|             snprintf(task_name, | ||||
|                      BLRM_TASK_NAME_LEN, | ||||
|                      "%s heartbeat", | ||||
|                      router->service->name); | ||||
|             hktask_add(task_name, | ||||
|                        blr_check_last_master_event, | ||||
|                        router, | ||||
|                        router->heartbeat); | ||||
|         } | ||||
|  | ||||
|         break; | ||||
|     } | ||||
|  | ||||
| @ -3949,7 +3949,7 @@ int blr_handle_change_master(ROUTER_INSTANCE* router, | ||||
|     { | ||||
|         int h_val = (int)strtol(master_heartbeat, NULL, 10); | ||||
|  | ||||
|         if (h_val <= 0 || | ||||
|         if (h_val < 0 || | ||||
|             (errno == ERANGE) || | ||||
|             h_val > BLR_HEARTBEAT_MAX_INTERVAL) | ||||
|         { | ||||
| @ -3973,6 +3973,13 @@ int blr_handle_change_master(ROUTER_INSTANCE* router, | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             if (h_val == 0) | ||||
|             { | ||||
|                 MXS_WARNING("%s: %s", | ||||
|                             router->service->name, | ||||
|                            "MASTER_HEARTBEAT_PERIOD has been set to 0 (disabled): " | ||||
|                            "a master network inactivity will not be handled."); | ||||
|             } | ||||
|             router->heartbeat = h_val; | ||||
|         } | ||||
|     } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 MassimilianoPinto
					MassimilianoPinto