StubZone: updated zone refresh feature to use dns server's resolver task pool. Implemented min refresh & min retry options. Code refactoring changes done.

This commit is contained in:
Shreyas Zare
2024-12-21 15:37:56 +05:30
parent 8da0e3728a
commit 9a2062ac14

View File

@@ -185,7 +185,10 @@ namespace DnsServerCore.Dns.Zones
#region private
private async void RefreshTimerCallback(object state)
private void RefreshTimerCallback(object state)
{
//refresh zone in DNS server's resolver thread pool
if (!_dnsServer.TryQueueResolverTask(async delegate (object state)
{
try
{
@@ -202,8 +205,7 @@ namespace DnsServerCore.Dns.Zones
_dnsServer.LogManager?.Write("DNS Server could not find primary name server IP addresses for Stub zone: " + ToString());
//set timer for retry
DnsSOARecordData soa1 = _entries[DnsResourceRecordType.SOA][0].RDATA as DnsSOARecordData;
ResetRefreshTimer(soa1.Retry * 1000);
ResetRefreshTimer(Math.Max(GetZoneSoaRetry(), _dnsServer.AuthZoneManager.MinSoaRetry) * 1000);
_syncFailed = true;
return;
}
@@ -213,7 +215,7 @@ namespace DnsServerCore.Dns.Zones
{
//zone refreshed; set timer for refresh
DnsSOARecordData latestSoa = _entries[DnsResourceRecordType.SOA][0].RDATA as DnsSOARecordData;
ResetRefreshTimer(latestSoa.Refresh * 1000);
ResetRefreshTimer(Math.Max(latestSoa.Refresh, _dnsServer.AuthZoneManager.MinSoaRefresh) * 1000);
_syncFailed = false;
_expiry = DateTime.UtcNow.AddSeconds(latestSoa.Expire);
_isExpired = false;
@@ -223,8 +225,7 @@ namespace DnsServerCore.Dns.Zones
}
//no response from any of the name servers; set timer for retry
DnsSOARecordData soa = _entries[DnsResourceRecordType.SOA][0].RDATA as DnsSOARecordData;
ResetRefreshTimer(soa.Retry * 1000);
ResetRefreshTimer(Math.Max(GetZoneSoaRetry(), _dnsServer.AuthZoneManager.MinSoaRetry) * 1000);
_syncFailed = true;
}
catch (Exception ex)
@@ -232,14 +233,19 @@ namespace DnsServerCore.Dns.Zones
_dnsServer.LogManager?.Write(ex);
//set timer for retry
DnsSOARecordData soa = _entries[DnsResourceRecordType.SOA][0].RDATA as DnsSOARecordData;
ResetRefreshTimer(soa.Retry * 1000);
ResetRefreshTimer(Math.Max(GetZoneSoaRetry(), _dnsServer.AuthZoneManager.MinSoaRetry) * 1000);
_syncFailed = true;
}
finally
{
_refreshTimerTriggered = false;
}
})
)
{
//failed to queue refresh zone task; try again in some time
_refreshTimer?.Change(REFRESH_TIMER_INTERVAL, Timeout.Infinite);
}
}
private void ResetRefreshTimer(long dueTime)