void lcb_timeout_server(lcb_server_t *server) { hrtime_t now, min_valid, next_ns = 0; lcb_uint32_t next_us; LOG(server, ERR, "Server timed out"); lcb_bootstrap_errcount_incr(server->instance); if (!server->connection_ready) { lcb_failout_server(server, LCB_ETIMEDOUT); return; } now = gethrtime(); /** The oldest valid command timestamp */ min_valid = now - ((hrtime_t)MCSERVER_TIMEOUT(server)) * 1000; purge_single_server(server, LCB_ETIMEDOUT, min_valid, &next_ns); if (next_ns) { next_us = (lcb_uint32_t) (next_ns / 1000); } else { next_us = MCSERVER_TIMEOUT(server); } lcb_log(LOGARGS(server, INFO), "%p, Scheduling next timeout for %d ms", server, next_us / 1000); lcb_timer_rearm(server->io_timer, next_us); lcb_maybe_breakout(server->instance); }
static void event_complete_common(lcb_server_t *c, lcb_error_t rc) { lcb_t instance = c->instance; if (rc != LCB_SUCCESS) { lcb_failout_server(c, rc); } else { if (instance->bootstrap.type == LCB_CONFIG_TRANSPORT_HTTP && c->is_config_node) { c->instance->bootstrap.via.http.weird_things = 0; } lcb_sockrw_apply_want(&c->connection); c->inside_handler = 0; } if (instance->compat.type == LCB_CACHED_CONFIG && instance->compat.value.cached.needs_update) { lcb_refresh_config_cache(instance); } else if (instance->bootstrap.type == LCB_CONFIG_TRANSPORT_CCCP && instance->bootstrap.via.cccp.next_config) { lcb_update_vbconfig(instance, instance->bootstrap.via.cccp.next_config); instance->bootstrap.via.cccp.next_config = NULL; } lcb_maybe_breakout(instance); lcb_error_handler(instance, rc, NULL); }
static void connection_error(lcb_server_t *server, lcb_error_t err) { lcb_failout_server(server, err); if (server->instance->compat.type == LCB_CACHED_CONFIG) { /* Try to update the cache :S */ lcb_schedule_config_cache_refresh(server->instance); return; } }
static void event_complete_common(lcb_server_t *c, lcb_error_t rc) { lcb_t instance = c->instance; if (rc != LCB_SUCCESS) { lcb_failout_server(c, rc); } else { if (c->is_config_node) { c->instance->weird_things = 0; } lcb_sockrw_apply_want(&c->connection); c->inside_handler = 0; } if (instance->compat.type == LCB_CACHED_CONFIG && instance->compat.value.cached.needs_update) { lcb_refresh_config_cache(instance); } lcb_maybe_breakout(instance); lcb_error_handler(instance, rc, NULL); }