コード例 #1
0
ファイル: bc_cccp.c プロジェクト: subalakr/libcouchbase
/** 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;
}
コード例 #2
0
ファイル: bc_mcraw.c プロジェクト: Sweebr/couchnode
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);
}
コード例 #3
0
/**
 * 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);
}
コード例 #4
0
ファイル: bc_file.c プロジェクト: Akshayvs/Solr-Search
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);
}
コード例 #5
0
ファイル: bc_file.c プロジェクト: subalakr/libcouchbase
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;
}