mirror of
https://github.com/fergalmoran/DnsServer.git
synced 2025-12-22 09:29:50 +00:00
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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user