static bool
cache_sharable(dns_view_t *originview, dns_view_t *view,
bool new_zero_no_soattl, uint64_t new_max_cache_size,
- uint32_t new_stale_ttl) {
+ uint32_t new_stale_ttl, uint32_t new_stale_refresh_time) {
/*
* If the cache cannot even reused for the same view, it cannot be
* shared with other views.
* the sharing views.
*/
if (dns_cache_getservestalettl(originview->cache) != new_stale_ttl ||
+ dns_cache_getservestalerefresh(originview->cache) != new_stale_refresh_time ||
dns_cache_getcachesize(originview->cache) != new_max_cache_size)
{
return (false);
nsc = cachelist_find(cachelist, cachename, view->rdclass);
if (nsc != NULL) {
if (!cache_sharable(nsc->primaryview, view, zero_no_soattl,
- max_cache_size, max_stale_ttl))
+ max_cache_size, max_stale_ttl, stale_refresh_time))
{
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
NAMED_LOGMODULE_SERVER, ISC_LOG_ERROR,
char **db_argv;
size_t size;
dns_ttl_t serve_stale_ttl;
+ dns_ttl_t serve_stale_refresh;
isc_stats_t *stats;
/* Locked by 'filelock'. */
}
void
-dns_cache_setservestalerefresh(dns_cache_t *cache, uint32_t interval) {
+dns_cache_setservestalerefresh(dns_cache_t *cache, dns_ttl_t interval) {
REQUIRE(VALID_CACHE(cache));
+ LOCK(&cache->lock);
+ cache->serve_stale_refresh = interval;
+ UNLOCK(&cache->lock);
+
(void)dns_db_setservestalerefresh(cache->db, interval);
}
+dns_ttl_t
+dns_cache_getservestalerefresh(dns_cache_t *cache) {
+ isc_result_t result;
+ dns_ttl_t interval;
+
+ REQUIRE(VALID_CACHE(cache));
+
+ result = dns_db_getservestalerefresh(cache->db, &interval);
+ return (result == ISC_R_SUCCESS ? interval : 0);
+}
+
/*
* The cleaner task is shutting down; do the necessary cleanup.
*/
*/
void
-dns_cache_setservestalerefresh(dns_cache_t *cache, uint32_t interval);
+dns_cache_setservestalerefresh(dns_cache_t *cache, dns_ttl_t interval);
/*%<
* Sets the length of time to wait before attempting to refresh a rrset
* if a previous attempt in doing so has failed.
*\li 'cache' to be valid.
*/
+dns_ttl_t
+dns_cache_getservestalerefresh(dns_cache_t *cache);
+/*%<
+ * Gets the 'stale-refresh-time' value, set by a previous call to
+ * 'dns_cache_setservestalerefresh'.
+ *
+ * Requires:
+ *\li 'cache' to be valid.
+ */
+
isc_result_t
dns_cache_flush(dns_cache_t *cache);
/*%<