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); }
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); }
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); }
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); }
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; }
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); }
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); }