From 8a45147d44817f751b6f73cbd496bf862322f5ea Mon Sep 17 00:00:00 2001 From: vfedosevich Date: Fri, 19 Dec 2014 02:46:23 -0800 Subject: [PATCH] MX and NS - DNS timeout fix --- .../SchedulerTasks/DomainLookupViewTask.cs | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs index d21a92a7..d5e042c1 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/SchedulerTasks/DomainLookupViewTask.cs @@ -26,7 +26,9 @@ namespace WebsitePanel.EnterpriseServer private const string MxRecordPattern = @"mail exchanger = (.+)"; private const string NsRecordPattern = @"nameserver = (.+)"; - + private const string DnsTimeOutMessage = @"dns request timed out"; + private const int DnsTimeOutRetryCount = 3; + public override void DoWork() { BackgroundTask topTask = TaskManager.TopTask; @@ -100,8 +102,8 @@ namespace WebsitePanel.EnterpriseServer //execute server foreach (var dnsServer in dnsServers) { - var dnsMxRecords = GetDomainDnsRecords(winServer, domain.DomainName, dnsServer, DnsRecordType.MX); - var dnsNsRecords = GetDomainDnsRecords(winServer, domain.DomainName, dnsServer, DnsRecordType.NS); + var dnsMxRecords = GetDomainDnsRecords(winServer, domain.DomainName, dnsServer, DnsRecordType.MX) ?? dbDnsRecords.Where(x => x.RecordType == DnsRecordType.MX).ToList(); + var dnsNsRecords = GetDomainDnsRecords(winServer, domain.DomainName, dnsServer, DnsRecordType.NS) ?? dbDnsRecords.Where(x => x.RecordType == DnsRecordType.NS).ToList(); FillRecordData(dnsMxRecords, domain, dnsServer); FillRecordData(dnsNsRecords, domain, dnsServer); @@ -311,7 +313,20 @@ namespace WebsitePanel.EnterpriseServer var args = string.Format("-type={0} {1} {2}", recordType, domain, dnsServer); // execute system command - var raw = winServer.ExecuteSystemCommand(command, args); + var raw = string.Empty; + int triesCount = 0; + + do + { + raw = winServer.ExecuteSystemCommand(command, args); + } + while (raw.ToLowerInvariant().Contains(DnsTimeOutMessage) && ++triesCount < DnsTimeOutRetryCount); + + //timeout check + if (raw.ToLowerInvariant().Contains(DnsTimeOutMessage)) + { + return null; + } var records = ParseNsLookupResult(raw, dnsServer, recordType);