aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrexxnor <rexxnor+gnunet@brief.li>2019-06-30 20:31:09 +0200
committerrexxnor <rexxnor+gnunet@brief.li>2019-06-30 20:31:09 +0200
commit1990ea7518d7ef0de3a8743ede70f7d3a3efdb0a (patch)
tree4843cb540392880c90999602743939ec1d776bfd
parent7623c3bd29f73afc7aaac07192e2f497736f5602 (diff)
downloadascension-1990ea7518d7ef0de3a8743ede70f7d3a3efdb0a.tar.gz
ascension-1990ea7518d7ef0de3a8743ede70f7d3a3efdb0a.zip
added some performance metrics and prevented transferring zone twice
-rw-r--r--ascension/ascension.py30
1 files changed, 24 insertions, 6 deletions
diff --git a/ascension/ascension.py b/ascension/ascension.py
index 36fdfbf..bb65b13 100644
--- a/ascension/ascension.py
+++ b/ascension/ascension.py
@@ -180,6 +180,9 @@ class Ascender():
180 domain) 180 domain)
181 return None 181 return None
182 182
183 # This prevents transferring the zone a second time
184 self.zone = zone
185
183 for soa_record in zone.iterate_rdatas(rdtype=dns.rdatatype.SOA): 186 for soa_record in zone.iterate_rdatas(rdtype=dns.rdatatype.SOA):
184 if not self.transferns: 187 if not self.transferns:
185 mname = soa_record[2].mname 188 mname = soa_record[2].mname
@@ -197,7 +200,7 @@ class Ascender():
197 logging.info("Starting to add records into GNS...") 200 logging.info("Starting to add records into GNS...")
198 201
199 # Defining FIFO Queue 202 # Defining FIFO Queue
200 taskqueue = queue.Queue(maxsize=5) 203 taskqueue = queue.Queue(maxsize=10)
201 204
202 # Defining worker 205 # Defining worker
203 def worker(): 206 def worker():
@@ -300,19 +303,27 @@ class Ascender():
300 taskqueue.task_done() 303 taskqueue.task_done()
301 # End of worker 304 # End of worker
302 305
306 #import cProfile
307 start = time.time()
308 #cProfile.runctx('self.create_zone_hierarchy()', globals(), locals())
303 self.create_zone_hierarchy() 309 self.create_zone_hierarchy()
310 end = time.time()
311 print("Zone hierarchy in %s seconds" % str(end - start))
304 312
305 # Create one thread 313 # Create one thread
306 thread = threading.Thread(target=worker) 314 thread = threading.Thread(target=worker)
307 thread.start() 315 thread.start()
308 316
309 # add records 317 # add records
318 start = time.time()
310 for name, rdatasets in self.zone.nodes.items(): 319 for name, rdatasets in self.zone.nodes.items():
311 # log if the rdataset is empty for some reason 320 # log if the rdataset is empty for some reason
312 if not rdatasets: 321 if not rdatasets:
313 logging.warning("Empty Rdataset!") 322 logging.warning("Empty Rdataset!")
314 continue 323 continue
315 taskqueue.put((name, rdatasets)) 324 taskqueue.put((name, rdatasets))
325 end = time.time()
326 print("Records added in %s seconds" % str(end - start))
316 327
317 # Block until all tasks are done 328 # Block until all tasks are done
318 taskqueue.join() 329 taskqueue.join()
@@ -698,11 +709,11 @@ class Ascender():
698 # Create missing zones (and add to dict) for GNS zones that are NOT DNS 709 # Create missing zones (and add to dict) for GNS zones that are NOT DNS
699 # zones ("." is not a zone-cut in DNS, but always in GNS). Only add the 710 # zones ("." is not a zone-cut in DNS, but always in GNS). Only add the
700 # records that there are no NS records for 711 # records that there are no NS records for
701 remaining_nsrecords = list(filter(lambda name: not name.is_absolute(), 712 remaining_nsrecords = set(filter(lambda name: not name.is_absolute(),
702 nameserverlist)) 713 nameserverlist))
703 remaining = list(filter(lambda name: name not in remaining_nsrecords, 714 remaining = set(filter(lambda name: name not in remaining_nsrecords,
704 self.zone.nodes.keys())) 715 self.zone.nodes.keys()))
705 final = list(filter(lambda name: len(str(name).split('.')) > 1, 716 final = set(filter(lambda name: len(str(name).split('.')) > 1,
706 remaining)) 717 remaining))
707 718
708 for name in final: 719 for name in final:
@@ -772,6 +783,9 @@ def main():
772 retry = 300 783 retry = 300
773 refresh = 300 784 refresh = 300
774 785
786 # variable to keep state
787 needsupdate = False
788
775 # Main loop for actual daemon 789 # Main loop for actual daemon
776 while True: 790 while True:
777 gns_zone_serial = ascender.get_gns_zone_serial() 791 gns_zone_serial = ascender.get_gns_zone_serial()
@@ -814,15 +828,18 @@ def main():
814 continue 828 continue
815 else: 829 else:
816 logging.info("GNS zone is out of date, performing incremental transfer.") 830 logging.info("GNS zone is out of date, performing incremental transfer.")
831 needsupdate = True
817 if standalone: 832 if standalone:
818 return 1 833 return 1
819 print("GNS zone is out of date, performing incremental transfer.") 834 print("GNS zone is out of date, performing incremental transfer.")
820 835
821 try: 836 try:
822 start = time.time() 837 start = time.time()
823 ascender.zone = dns.zone.from_xfr(ascender.zonegenerator, 838 if not ascender.zone or needsupdate:
824 check_origin=False) 839 ascender.zone = dns.zone.from_xfr(ascender.zonegenerator,
840 check_origin=False)
825 end = time.time() 841 end = time.time()
842 needsupdate = False
826 print("Zone transferrred in %s seconds" % str(end - start)) 843 print("Zone transferrred in %s seconds" % str(end - start))
827 ascender.soa = ascender.get_zone_soa(ascender.zone) 844 ascender.soa = ascender.get_zone_soa(ascender.zone)
828 refresh = int(str(ascender.soa[2]).split(" ")[3]) 845 refresh = int(str(ascender.soa[2]).split(" ")[3])
@@ -835,6 +852,7 @@ def main():
835 continue 852 continue
836 853
837 ascender.add_records_to_gns() 854 ascender.add_records_to_gns()
855
838 logging.info("Added %d RRSets", ascender.rrsetcount) 856 logging.info("Added %d RRSets", ascender.rrsetcount)
839 logging.info("Finished migration of the zone %s", ascender.domain) 857 logging.info("Finished migration of the zone %s", ascender.domain)
840 858