Ejemplo n.º 1
0
ngx_int_t hustdb_ha_post_peer(
    hustdb_ha_check_parameter_t check_parameter,
    ngx_str_t * backend_uri,
    ngx_http_request_t *r)
{
    hustdb_ha_peer_ctx_t * ctx = ngx_http_get_addon_module_ctx(r);
    if (!ctx)
    {
        if (check_parameter && !check_parameter(backend_uri, r))
        {
            return NGX_ERROR;
        }
        return __post_peer(backend_uri, r);
    }

    if (ctx->keys)
    {
        if (!hustdb_ha_add_keys_to_header(ctx->keys, r))
        {
            return ngx_http_send_response_imp(NGX_HTTP_NOT_FOUND, NULL, r);
        }
    }
    return (NGX_HTTP_OK == r->headers_out.status) ? ngx_http_send_response_imp(
        r->headers_out.status, &ctx->base.response, r) : ngx_http_send_response_imp(
            NGX_HTTP_NOT_FOUND, NULL, r);
}
Ejemplo n.º 2
0
ngx_int_t hustdb_ha_loop_handler(
    hustdb_ha_check_parameter_t check_parameter,
    ngx_str_t * backend_uri,
    ngx_http_request_t *r)
{
    hustdb_ha_loop_ctx_t * ctx = ngx_http_get_addon_module_ctx(r);
    if (!ctx)
    {
        return __first_loop(check_parameter, backend_uri, r);
    }
    if (NGX_HTTP_OK != r->headers_out.status)
    {
        return ngx_http_send_response_imp(NGX_HTTP_NOT_FOUND, NULL, r);
    }
    ctx->peer = ngx_http_next_peer(ctx->peer);
    if (ctx->peer)
    {
        return ngx_http_run_subrequest(r, &ctx->base, ctx->peer);
    }
    return ngx_http_send_response_imp(NGX_HTTP_OK, &ctx->base.response, r);
}
Ejemplo n.º 3
0
ngx_int_t hustdb_ha_send_response(
    ngx_uint_t status,
    const ngx_str_t * version,
    const ngx_str_t * response,
    ngx_http_request_t *r)
{
    const ngx_str_t * ver = (NGX_HTTP_OK == status) ? version : &VERSION_VAL;
    if (!hustdb_ha_add_version(ver, r))
    {
        return NGX_ERROR;
    }
    return ngx_http_send_response_imp(status, response, r);
}
Ejemplo n.º 4
0
ngx_int_t hustmq_ha_put_handler(ngx_str_t * backend_uri, ngx_http_request_t *r)
{
	hustmq_ha_put_ctx_t * ctx = ngx_http_get_addon_module_ctx(r);
	if (!ctx)
	{
		return __first_put_handler(backend_uri, r);
	}
	if (NGX_HTTP_OK != r->headers_out.status)
	{
		return (++ctx->count < ctx->peer_count) ? ngx_http_run_subrequest(r, &ctx->base, NULL) : NGX_ERROR;
	}
	return ngx_http_send_response_imp(NGX_HTTP_OK, &ctx->base.response, r);
}
Ejemplo n.º 5
0
ngx_int_t hustdb_ha_sync_status_handler(ngx_str_t * backend_uri, ngx_http_request_t *r)
{
    ngx_http_hustdb_ha_main_conf_t * mcf = hustdb_ha_get_module_main_conf(r);
    if (!mcf)
    {
        return NGX_ERROR;
    }
    ngx_int_t rc = hustdb_ha_fetch_sync_data(&mcf->sync_status_uri, &mcf->sync_status_args,
        &mcf->sync_user, &mcf->sync_passwd, mcf->sync_peer, r);
    if (NGX_ERROR == rc)
    {
        return ngx_http_send_response_imp(NGX_HTTP_NOT_FOUND, NULL, r);
    }
    return NGX_DONE;
}
Ejemplo n.º 6
0
ngx_int_t __first_put_handler(ngx_str_t * backend_uri, ngx_http_request_t *r)
{
    ngx_str_t queue = hustmq_ha_get_queue(r);
    if (!queue.data)
    {
        return NGX_ERROR;
    }

    hustmq_ha_queue_dict_t * queue_dict = hustmq_ha_get_queue_dict();
    if (!queue_dict)
    {
        return NGX_ERROR;
    }

	if (queue_dict->dict.ref && !hustmq_ha_put_queue_item_check(queue_dict, &queue))
    {
        return ngx_http_send_response_imp(NGX_HTTP_NOT_FOUND, NULL, r);
    }
    size_t peer_count = ngx_http_get_backend_count();
    if (peer_count < 1)
    {
        return NGX_ERROR;
    }
    hustmq_ha_put_ctx_t * ctx = ngx_palloc(r->pool, sizeof(hustmq_ha_put_ctx_t));
    if (!ctx)
    {
        return NGX_ERROR;
    }
    memset(ctx, 0, sizeof(hustmq_ha_put_ctx_t));
    ngx_http_set_addon_module_ctx(r, ctx);

    ctx->base.backend_uri = backend_uri;

    ctx->peer_count = peer_count;
    ctx->count = 0;

    ngx_int_t rc = ngx_http_read_client_request_body(r, __post_body_handler);
    if ( rc >= NGX_HTTP_SPECIAL_RESPONSE )
    {
        return rc;
    }
    return NGX_DONE;
}
ngx_int_t hustdb_ha_get_table_handler(ngx_str_t * backend_uri, ngx_http_request_t *r)
{
    return ngx_http_send_response_imp(NGX_HTTP_OK, &g_table_str, r);
}
Ejemplo n.º 8
0
ngx_int_t hustdb_ha_peer_count_handler(ngx_str_t * backend_uri, ngx_http_request_t *r)
{
    return ngx_http_send_response_imp(NGX_HTTP_OK, &g_peer_count, r);
}