/** Update the configuration from a server. */ lcb_error_t lcb_cccp_update(clconfig_provider *provider, const char *host, lcb_string *data) { VBUCKET_CONFIG_HANDLE vbc; clconfig_info *new_config; cccp_provider *cccp = (cccp_provider *)provider; vbc = vbucket_config_create(); if (!vbc) { return LCB_CLIENT_ENOMEM; } if (vbucket_config_parse2(vbc, LIBVBUCKET_SOURCE_MEMORY, data->base, host)) { vbucket_config_destroy(vbc); return LCB_PROTOCOL_ERROR; } new_config = lcb_clconfig_create(vbc, data, LCB_CLCONFIG_CCCP); if (!new_config) { vbucket_config_destroy(vbc); return LCB_CLIENT_ENOMEM; } if (cccp->config) { lcb_clconfig_decref(cccp->config); } /** TODO: Figure out the comparison vector */ new_config->cmpclock = gethrtime(); cccp->config = new_config; lcb_confmon_provider_success(provider, new_config); return LCB_SUCCESS; }
static void async_update(void *arg) { bc_MCRAW *mcr = arg; if (!mcr->config) { lcb_log(LOGARGS(mcr, WARN), "No current config set. Not setting configuration"); return; } lcb_confmon_provider_success(&mcr->base, mcr->config); }
/** * Call this if the configuration generation has changed. */ static void set_new_config(http_provider *http) { if (http->current_config) { lcb_clconfig_decref(http->current_config); } http->current_config = http->stream.config; lcb_clconfig_incref(http->current_config); lcb_confmon_provider_success(&http->base, http->current_config); lcb_timer_disarm(http->io_timer); }
static void async_callback(void *cookie) { time_t last_mtime; file_provider *provider = (file_provider *)cookie; last_mtime = provider->last_mtime; if (load_cache(provider) == 0) { if (last_mtime != provider->last_mtime) { lcb_confmon_provider_success(&provider->base, provider->config); return; } } lcb_confmon_provider_failed(&provider->base, LCB_ERROR); }
static void async_callback(lcb_timer_t timer, lcb_t notused, const void *cookie) { file_provider *provider = (file_provider *)cookie; lcb_async_destroy(NULL, timer); provider->async = NULL; LOG(provider, TRACE, "Got async callback. Will load"); if (load_cache(provider) == 0) { lcb_confmon_provider_success(&provider->base, provider->config); } else { lcb_confmon_provider_failed(&provider->base, LCB_ERROR); } (void)notused; }