diff options
author | rexxnor <rexxnor+gnunet@brief.li> | 2019-06-30 20:31:09 +0200 |
---|---|---|
committer | rexxnor <rexxnor+gnunet@brief.li> | 2019-06-30 20:31:09 +0200 |
commit | 1990ea7518d7ef0de3a8743ede70f7d3a3efdb0a (patch) | |
tree | 4843cb540392880c90999602743939ec1d776bfd | |
parent | 7623c3bd29f73afc7aaac07192e2f497736f5602 (diff) | |
download | ascension-1990ea7518d7ef0de3a8743ede70f7d3a3efdb0a.tar.gz ascension-1990ea7518d7ef0de3a8743ede70f7d3a3efdb0a.zip |
added some performance metrics and prevented transferring zone twice
-rw-r--r-- | ascension/ascension.py | 30 |
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 | ||