Fix for bug 447 - Error log flooded with same warnings if there are no slaves present
This commit is contained in:
@ -71,6 +71,7 @@ typedef enum backend_type_t {
|
|||||||
BE_COUNT
|
BE_COUNT
|
||||||
} backend_type_t;
|
} backend_type_t;
|
||||||
|
|
||||||
|
struct router_instance;
|
||||||
typedef struct rses_property_st rses_property_t;
|
typedef struct rses_property_st rses_property_t;
|
||||||
typedef struct router_client_session ROUTER_CLIENT_SES;
|
typedef struct router_client_session ROUTER_CLIENT_SES;
|
||||||
|
|
||||||
@ -261,6 +262,7 @@ struct router_client_session {
|
|||||||
#if defined(PREP_STMT_CACHING)
|
#if defined(PREP_STMT_CACHING)
|
||||||
HASHTABLE* rses_prep_stmt[2];
|
HASHTABLE* rses_prep_stmt[2];
|
||||||
#endif
|
#endif
|
||||||
|
struct router_instance *router; /*< The router instance */
|
||||||
struct router_client_session* next;
|
struct router_client_session* next;
|
||||||
#if defined(SS_DEBUG)
|
#if defined(SS_DEBUG)
|
||||||
skygw_chk_t rses_chk_tail;
|
skygw_chk_t rses_chk_tail;
|
||||||
@ -294,6 +296,8 @@ typedef struct router_instance {
|
|||||||
unsigned int bitvalue; /*< Required value of server->status */
|
unsigned int bitvalue; /*< Required value of server->status */
|
||||||
ROUTER_STATS stats; /*< Statistics for this router */
|
ROUTER_STATS stats; /*< Statistics for this router */
|
||||||
struct router_instance* next; /*< Next router on the list */
|
struct router_instance* next; /*< Next router on the list */
|
||||||
|
bool available_slaves;
|
||||||
|
/*< The router has some slaves avialable */
|
||||||
} ROUTER_INSTANCE;
|
} ROUTER_INSTANCE;
|
||||||
|
|
||||||
#define BACKEND_TYPE(b) (SERVER_IS_MASTER((b)->backend_server) ? BE_MASTER : \
|
#define BACKEND_TYPE(b) (SERVER_IS_MASTER((b)->backend_server) ? BE_MASTER : \
|
||||||
|
|||||||
@ -484,6 +484,11 @@ createInstance(SERVICE *service, char **options)
|
|||||||
}
|
}
|
||||||
router->servers[nservers] = NULL;
|
router->servers[nservers] = NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Until we know otherwise assume we have some available slaves.
|
||||||
|
*/
|
||||||
|
router->available_slaves = true;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If server weighting has been defined calculate the percentage
|
* If server weighting has been defined calculate the percentage
|
||||||
* of load that will be sent to each server. This is only used for
|
* of load that will be sent to each server. This is only used for
|
||||||
@ -636,6 +641,8 @@ static void* newSession(
|
|||||||
client_rses->rses_chk_top = CHK_NUM_ROUTER_SES;
|
client_rses->rses_chk_top = CHK_NUM_ROUTER_SES;
|
||||||
client_rses->rses_chk_tail = CHK_NUM_ROUTER_SES;
|
client_rses->rses_chk_tail = CHK_NUM_ROUTER_SES;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
client_rses->router = router;
|
||||||
/**
|
/**
|
||||||
* If service config has been changed, reload config from service to
|
* If service config has been changed, reload config from service to
|
||||||
* router instance first.
|
* router instance first.
|
||||||
@ -972,15 +979,30 @@ static bool get_dcb(
|
|||||||
(master_host && (backend_ref->bref_backend->backend_server == master_host->backend_server)) &&
|
(master_host && (backend_ref->bref_backend->backend_server == master_host->backend_server)) &&
|
||||||
smallest_nconn == -1);
|
smallest_nconn == -1);
|
||||||
|
|
||||||
LOGIF(LE, (skygw_log_write_flush(
|
if (rses->router->available_slaves)
|
||||||
LOGFILE_ERROR,
|
{
|
||||||
"Warning : No slaves connected nor "
|
rses->router->available_slaves = false;
|
||||||
"available. Choosing master %s:%d "
|
LOGIF(LE, (skygw_log_write_flush(
|
||||||
"instead.",
|
LOGFILE_ERROR,
|
||||||
|
"Warning : No slaves avialable "
|
||||||
|
"for the service %s. "
|
||||||
|
"Using master %s:%d "
|
||||||
|
"instead.",
|
||||||
|
rses->router->service->name,
|
||||||
backend_ref->bref_backend->backend_server->name,
|
backend_ref->bref_backend->backend_server->name,
|
||||||
backend_ref->bref_backend->backend_server->port)));
|
backend_ref->bref_backend->backend_server->port)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (rses->router->available_slaves == false)
|
||||||
|
{
|
||||||
|
rses->router->available_slaves = true;
|
||||||
|
LOGIF(LE, (skygw_log_write_flush(
|
||||||
|
LOGFILE_ERROR,
|
||||||
|
"At least one slave has become avilable for "
|
||||||
|
"the service %s.",
|
||||||
|
rses->router->service->name)));
|
||||||
|
}
|
||||||
ss_dassert(succp);
|
ss_dassert(succp);
|
||||||
}
|
}
|
||||||
else if (btype == BE_MASTER)
|
else if (btype == BE_MASTER)
|
||||||
|
|||||||
Reference in New Issue
Block a user