Skip to content
Snippets Groups Projects
Verified Commit d5531016 authored by Vladimír Čunát's avatar Vladimír Čunát
Browse files

lib: tweak selection errors when consuming cached answer

Forwarding-related changes uncovered this case
in integration.iter_limits test.  Errors can happen also
when consuming data produced by cache, in which case there's
no suitable server to blame for the error.
parent 449a0bab
Branches
Tags
1 merge request!1407new policy engine
......@@ -646,6 +646,7 @@ int kr_resolve_produce(struct kr_request *request, struct kr_transport **transpo
ITERATE_LAYERS(request, qry, produce, packet);
if (!(request->state & KR_STATE_FAIL) && knot_wire_get_qr(packet->wire)) {
/* Produced an answer from cache, consume it. */
kr_server_selection_cached(qry);
qry->secret = 0;
request->state = KR_STATE_CONSUME;
ITERATE_LAYERS(request, qry, consume, packet);
......
......@@ -772,6 +772,15 @@ void kr_server_selection_init(struct kr_query *qry)
mempool, &qry->server_selection.local_state->private);
}
}
void kr_server_selection_cached(struct kr_query *qry)
{
qry->server_selection = (struct kr_server_selection){
.initialized = false,
// we reuse iter_error, as it's no-op if (!initialized)
.error = iter_error,
// everything else is NULL
};
}
int kr_forward_add_target(struct kr_request *req, const struct sockaddr *sock)
{
......
......@@ -131,6 +131,12 @@ struct kr_server_selection {
*/
KR_EXPORT
void kr_server_selection_init(struct kr_query *qry);
/**
* @brief Ensure server selection state suitable for processing "reply from cache".
*
* In particular, qry->server_selection.error() calls shouldn't crash.
*/
void kr_server_selection_cached(struct kr_query *qry);
/**
* @brief Add forwarding target to request.
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment