[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [ascension] 21/45: fixed serial fetching and added serializ
From: |
gnunet |
Subject: |
[GNUnet-SVN] [ascension] 21/45: fixed serial fetching and added serialization of zone |
Date: |
Fri, 25 Jan 2019 10:02:21 +0100 |
This is an automated email from the git hooks/post-receive script.
rexxnor pushed a commit to branch master
in repository ascension.
commit 666f93fac2cece64606f66d1b457ae0a009cd59a
Author: rexxnor <address@hidden>
AuthorDate: Fri Oct 12 11:42:14 2018 +0200
fixed serial fetching and added serialization of zone
---
gnsmigrator/gnsmigrator.py | 91 ++++++++++++++++++++++++++++++----------------
1 file changed, 60 insertions(+), 31 deletions(-)
diff --git a/gnsmigrator/gnsmigrator.py b/gnsmigrator/gnsmigrator.py
index f11c211..ba3819e 100644
--- a/gnsmigrator/gnsmigrator.py
+++ b/gnsmigrator/gnsmigrator.py
@@ -23,6 +23,8 @@ from ctypes import c_void_p
from enum import Enum
from dataclasses import dataclass
import multiprocessing
+import gzip
+import pickle
import queue
import re
import sys
@@ -395,12 +397,15 @@ class BaseMigrator():
"""
Extracts the current serial from a given zone
"""
+ if zonename[-1] == '.':
+ zonename = zonename[:-1]
serial = sp.check_output([GNUNET_GNS_COMMAND,
'-t', 'SOA',
'-u', '@.%s' % zonename])
- soapattern = re.compile(r'.+\s(\d+,)\d+,+\d+,\d+,\d+')
- if re.match(soapattern, serial):
- soa_serial = re.match(soapattern, serial)
+ serial = serial.decode()
+ soapattern = re.compile(r'.+\s(\d+),\d+,+\d+,\d+,\d+', re.M)
+ if re.findall(soapattern, serial):
+ soa_serial = re.findall(soapattern, serial)[0]
else:
soa_serial = 0
return soa_serial
@@ -427,11 +432,17 @@ class TLDMigrator(BaseMigrator):
cls.zonegenerator = {}
@classmethod
- def initial_zone_transfer(cls):
+ def initial_zone_transfer(cls, serial):
"""
Transfer and initialize the zone
"""
- cls.zonegenerator = dns.query.xfr(cls.transferns, cls.tld)
+ if serial:
+ cls.zonegenerator = dns.query.xfr(cls.transferns,
+ cls.tld,
+ rdtype=dns.rdatatype.IXFR,
+ serial=serial)
+ else:
+ cls.zonegenerator = dns.query.xfr(cls.transferns, cls.tld,)
@classmethod
def bootstrap_zone(cls):
@@ -455,33 +466,49 @@ class TLDMigrator(BaseMigrator):
Extract necessary information from Generator
"""
zone = None
+ # And to unzip and unpickle:
try:
- for message in cls.zonegenerator:
- origin = message.origin
- rdclass = message.answer[0].rdclass
- if zone is None:
- if relativize:
- origin = message.origin
- else:
- origin = message.answer[0].name
+ with gzip.open('%s.zone.gz' % cls.tld[:-1], 'rb') as zonefile:
+ zone = pickle.load(zonefile)
+ except Exception:
+ pass
+
+ currentserial = cls.get_current_serial(cls.tld)
+ zoneserial = None
+ if zone:
+ zoneserial = zone[0][2].split(' ')[2].split(',')[0]
+ if currentserial != zoneserial:
+ try:
+ for message in cls.zonegenerator:
+ origin = message.origin
rdclass = message.answer[0].rdclass
- zone = zone_factory(origin, rdclass, relativize=relativize)
- for rrset in message.answer:
- znode = zone.nodes.get(rrset.name)
- if not znode:
- znode = zone.node_factory()
- zone.nodes[rrset.name] = znode
- zrds = znode.find_rdataset(rrset.rdclass, rrset.rdtype,
- rrset.covers, True)
- zrds.update_ttl(rrset.ttl)
- for record in rrset:
- record.choose_relativity(zone.origin, relativize)
- zrds.add(record)
- if check_origin:
- zone.check_origin()
- cls.zone = zone
- except Exception as transferexception:
- print("Error occured during Zone transfer: %s" % transferexception)
+ if zone is None:
+ if relativize:
+ origin = message.origin
+ else:
+ origin = message.answer[0].name
+ rdclass = message.answer[0].rdclass
+ zone = zone_factory(origin, rdclass,
relativize=relativize)
+ for rrset in message.answer:
+ znode = zone.nodes.get(rrset.name)
+ if not znode:
+ znode = zone.node_factory()
+ zone.nodes[rrset.name] = znode
+ zrds = znode.find_rdataset(rrset.rdclass, rrset.rdtype,
+ rrset.covers, True)
+ zrds.update_ttl(rrset.ttl)
+ for record in rrset:
+ record.choose_relativity(zone.origin, relativize)
+ zrds.add(record)
+ if check_origin:
+ zone.check_origin()
+ cls.zone = zone
+ except Exception as transferexception:
+ print("Error occured during Zone transfer: %s" %
transferexception)
+
+ # To zip and pickle:
+ with gzip.open('%s.zone.gz' % cls.tld[:-1], 'wb') as zonefile:
+ pickle.dump(zone, zonefile)
@classmethod
def multithreaded_add_records_to_gns(cls):
@@ -539,6 +566,7 @@ class TLDMigrator(BaseMigrator):
for thread in threads:
thread.join()
+
def main():
"""
Initializes object and handles arguments
@@ -560,7 +588,8 @@ def main():
if tld and transferns:
migrator = TLDMigrator(tld, transferns)
- migrator.initial_zone_transfer()
+ serial = migrator.get_current_serial(tld)
+ migrator.initial_zone_transfer(serial)
migrator.bootstrap_zone()
migrator.mirror_zone()
migrator.multithreaded_add_records_to_gns()
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [ascension] 39/45: added daemonization, bumped version, (continued)
- [GNUnet-SVN] [ascension] 39/45: added daemonization, bumped version, gnunet, 2019/01/25
- [GNUnet-SVN] [ascension] 31/45: added testing for gnunet -K option and more, gnunet, 2019/01/25
- [GNUnet-SVN] [ascension] 29/45: added warnings to logging if records failed to be added, gnunet, 2019/01/25
- [GNUnet-SVN] [ascension] 37/45: updated README, gnunet, 2019/01/25
- [GNUnet-SVN] [ascension] 41/45: added logic for subzones with zone cut, gnunet, 2019/01/25
- [GNUnet-SVN] [ascension] 32/45: testing and added logging of executed commands to debug, gnunet, 2019/01/25
- [GNUnet-SVN] [ascension] 38/45: renamed project to ascension, gnunet, 2019/01/25
- [GNUnet-SVN] [ascension] 18/45: refactored adding of records, gnunet, 2019/01/25
- [GNUnet-SVN] [ascension] 24/45: fixed zone serialisation, gnunet, 2019/01/25
- [GNUnet-SVN] [ascension] 33/45: added needed return statement; add glue records first, then NS, gnunet, 2019/01/25
- [GNUnet-SVN] [ascension] 21/45: fixed serial fetching and added serialization of zone,
gnunet <=
- [GNUnet-SVN] [ascension] 42/45: added dnscurve detection and log it, fix ttl bug with hierarchy, gnunet, 2019/01/25