RECTYPE_NORMAL,
RECTYPE_PREFETCH,
RECTYPE_RPZ,
+ RECTYPE_STALE_REFRESH,
RECTYPE_HOOK,
RECTYPE_COUNT,
} ns_query_rectype_t;
((client)->query.recursions[RECTYPE_PREFETCH].handle)
#define HANDLE_RECTYPE_RPZ(client) \
((client)->query.recursions[RECTYPE_RPZ].handle)
+#define HANDLE_RECTYPE_STALE_REFRESH(client) \
+ ((client)->query.recursions[RECTYPE_STALE_REFRESH].handle)
#define HANDLE_RECTYPE_HOOK(client) \
((client)->query.recursions[RECTYPE_HOOK].handle)
((client)->query.recursions[RECTYPE_PREFETCH].fetch)
#define FETCH_RECTYPE_RPZ(client) \
((client)->query.recursions[RECTYPE_RPZ].fetch)
+#define FETCH_RECTYPE_STALE_REFRESH(client) \
+ ((client)->query.recursions[RECTYPE_STALE_REFRESH].fetch)
#define FETCH_RECTYPE_HOOK(client) \
((client)->query.recursions[RECTYPE_HOOK].fetch)
((client)->query.recursions[RECTYPE_PREFETCH].quota)
#define QUOTA_RECTYPE_RPZ(client) \
((client)->query.recursions[RECTYPE_RPZ].quota)
+#define QUOTA_RECTYPE_STALE_REFRESH(client) \
+ ((client)->query.recursions[RECTYPE_STALE_REFRESH].quota)
#define QUOTA_RECTYPE_HOOK(client) \
((client)->query.recursions[RECTYPE_HOOK].quota)
}
static void
-cleanup_after_fetch(isc_task_t *task, isc_event_t *event,
+cleanup_after_fetch(isc_task_t *task, isc_event_t *event, const char *ctracestr,
ns_query_rectype_t recursion_type) {
dns_fetchevent_t *devent = (dns_fetchevent_t *)event;
isc_nmhandle_t **handlep;
REQUIRE(NS_CLIENT_VALID(client));
REQUIRE(task == client->manager->task);
- CTRACE(ISC_LOG_DEBUG(3), "prefetch_done");
+ CTRACE(ISC_LOG_DEBUG(3), ctracestr);
handlep = &client->query.recursions[recursion_type].handle;
fetchp = &client->query.recursions[recursion_type].fetch;
static void
prefetch_done(isc_task_t *task, isc_event_t *event) {
- cleanup_after_fetch(task, event, RECTYPE_PREFETCH);
+ cleanup_after_fetch(task, event, "prefetch_done", RECTYPE_PREFETCH);
}
static void
rpzfetch_done(isc_task_t *task, isc_event_t *event) {
- cleanup_after_fetch(task, event, RECTYPE_RPZ);
+ cleanup_after_fetch(task, event, "rpzfetch_done", RECTYPE_RPZ);
+}
+
+static void
+refresh_done(isc_task_t *task, isc_event_t *event) {
+ cleanup_after_fetch(task, event, "refresh_done", RECTYPE_REFRESH);
}
/*
options = client->query.fetchoptions;
action = rpzfetch_done;
break;
+ case RECTYPE_REFRESH:
+ options = client->query.fetchoptions;
+ action = refresh_done;
+ break;
default:
UNREACHABLE();
}
ns_statscounter_prefetch);
}
+/*
+static void
+query_refresh(ns_client_t *client, dns_name_t *qname,
+ dns_rdataset_t *rdataset) {
+ CTRACE(ISC_LOG_DEBUG(3), "query_refresh");
+
+ if (FETCH_RECTYPE_REFRESH(client) != NULL) {
+ return;
+ }
+
+ fetch_and_forget(client, qname, rdataset->type, RECTYPE_REFRESH);
+}
+*/
+
static void
rpz_clean(dns_zone_t **zonep, dns_db_t **dbp, dns_dbnode_t **nodep,
dns_rdataset_t **rdatasetp) {