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 (!ngx_http_add_field_to_headers_out(&VERSION_KEY, ver, r))
    {
        return NGX_ERROR;
    }

    return ngx_http_send_response_imp(status, response, r);
}
static ngx_int_t __write_sync_data(
    uint8_t method,
    ngx_bool_t has_tb,
    ngx_http_request_t *r,
    ngx_http_hustdb_ha_write_ctx_t * ctx)
{
    do
    {
        time_t now = time(NULL);
        uint32_t ttl = (0 == ctx->ttl) ? 0 : (uint32_t) (now + ctx->ttl);

        ngx_buf_t * value = NULL;
        ngx_buf_t * head = __encode_head(method, ctx->proto, has_tb, ctx->base.version, ctx->base.key, ctx->base.tb, ttl, r->pool);
        if (r->request_body)
        {
            if (!ngx_http_insert_head_to_body(head, r))
            {
                break;
            }
            value = ngx_http_get_request_body(r);
        }
        else
        {
            value = head;
        }

        if (!value)
        {
            break;
        }

        ngx_http_hustdb_ha_main_conf_t * mcf = hustdb_ha_get_module_main_conf(r);
        ngx_str_t * server = &ctx->error_peer->peer->server;
        if (!hustdb_ha_write_log(&mcf->zlog_mdc, server, value, r->pool))
        {
            break;
        }

        static ngx_str_t SYNC_KEY = ngx_string("Sync");
        if (!ngx_http_add_field_to_headers_out(&SYNC_KEY, server, r))
        {
            break;
        }

        return hustdb_ha_send_response(NGX_HTTP_OK, ctx->base.version, NULL, r);
    } while (0);

    return hustdb_ha_send_response(NGX_HTTP_NOT_FOUND, NULL, NULL, r);
}
ngx_bool_t hustdb_ha_add_keys_to_header(const ngx_str_t * keys, ngx_http_request_t * r)
{
    return ngx_http_add_field_to_headers_out(&KEYS_KEY, keys, r);
}
ngx_bool_t hustdb_ha_add_version(const ngx_str_t * version, ngx_http_request_t * r)
{
    return ngx_http_add_field_to_headers_out(&VERSION_KEY, version, r);
}