ngx_http_subrequest_peer_t * __get_peer_by_args(ngx_http_request_t *r) { char * key = ngx_http_get_param_val(&r->args, "key", r->pool); if (!key) { return NULL; } return ngx_http_get_first_peer(hustdb_ha_get_readlist(key)); }
static ngx_http_subrequest_peer_t * __get_readable_peer(ngx_bool_t key_in_body, ngx_http_request_t *r) { if (key_in_body) { char * key = hustdb_ha_get_key_from_body(r); if (!key) { return NULL; } return ngx_http_get_first_peer(hustdb_ha_get_readlist(key)); } return __get_peer_by_args(r); }
ngx_bool_t hustdb_ha_get_readable_peer(size_t buckets, size_t bucket, hustdb_ha_bucket_buf_t * result) { for (result->bucket = bucket; result->bucket < buckets; ++result->bucket) { hustdb_ha_bucket_t * bk = hustdb_ha_get_bucket(result->bucket); if (bk) { result->peer = ngx_http_get_first_peer(bk->readlist); if (result->peer) { return true; } } ++result->bad_buckets; } return false; }