From 4616d085c41455c0ec54077d9dcdd955fb9de5fd Mon Sep 17 00:00:00 2001 From: neonknight Date: Fri, 4 May 2018 13:28:38 +0200 Subject: [PATCH 1/5] code style update --- pdns_redis.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pdns_redis.py b/pdns_redis.py index 3653116..1e56b0e 100755 --- a/pdns_redis.py +++ b/pdns_redis.py @@ -522,7 +522,7 @@ def Run(self): self.FlushLogBuffer() self.reply("LOG\tPowerDNS sent bad request: %s" % query) self.reply("FAIL") - except Exception, err: + except Exception as err: self.redis_pdns.Disconnect() self.FlushLogBuffer() self.reply("LOG\tInternal Error: %s" % err) @@ -666,8 +666,8 @@ def RunTasks(self): if __name__ == '__main__': try: pr = PdnsRedis().ParseArgs(sys.argv[1:]).RunTasks() - except ArgumentError, e: - print DOC - print 'Error: %s' % e + except ArgumentError as e: + print(DOC) + print('Error: %s' % e) sys.exit(1) From d7189e315899fd8edd4a7c93e738cc246a0547ea Mon Sep 17 00:00:00 2001 From: neonknight Date: Fri, 4 May 2018 13:33:24 +0200 Subject: [PATCH 2/5] only update query count if write backend has been specified. fixes #4 --- pdns_redis.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pdns_redis.py b/pdns_redis.py index 1e56b0e..05da76b 100755 --- a/pdns_redis.py +++ b/pdns_redis.py @@ -224,6 +224,9 @@ def __init__(self, redis_pdns, domain, record=None, data=None): def BE(self): return self.redis_pdns.BE() + + def readonly(self): + return self.redis_pdns.redis_write_host is None def DSplit(self, domain, count=1024): return domain.split('.', count) @@ -245,7 +248,8 @@ def _Query(self, domain=None, wildcards=False): key = "\t".join([self.record, self.data]) ttl = pdns_be.hget(pdns_key, key) if ttl is not None: - pdns_be.hincrby(pdns_key, 'TXT\tQC', 1) + if not self.readonly(): + pdns_be.hincrby(pdns_key, 'TXT\tQC', 1) return [(self.domain, self.record, ttl, self.data)] elif wildcards: return self.WildQuery(domain or self.domain) @@ -273,7 +277,8 @@ def _Query(self, domain=None, wildcards=False): rv.append((self.domain, record, ddata[entry], data)) if rv: - pdns_be.hincrby(pdns_key, 'TXT\tQC', 1) + if not self.readonly(): + pdns_be.hincrby(pdns_key, 'TXT\tQC', 1) return rv elif wildcards: return self.WildQuery(domain or self.domain) From d73ee26009a3d89753be31b99039d9a025fca8d4 Mon Sep 17 00:00:00 2001 From: neonknight Date: Fri, 4 May 2018 13:38:13 +0200 Subject: [PATCH 3/5] only update query count if write backend has been specified. fixes #4 --- pdns_redis.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/pdns_redis.py b/pdns_redis.py index 05da76b..952f499 100755 --- a/pdns_redis.py +++ b/pdns_redis.py @@ -221,13 +221,16 @@ def __init__(self, redis_pdns, domain, record=None, data=None): self.domain = domain and domain.lower() or None self.record = record and record.upper() or None self.data = data - - def BE(self): - return self.redis_pdns.BE() - def readonly(self): + def _readonly(self): return self.redis_pdns.redis_write_host is None + def BE(self): + if self._readonly(): + return self.redis_pdns.BE() + else: + return self.redis_pdns.WBE() + def DSplit(self, domain, count=1024): return domain.split('.', count) @@ -248,7 +251,7 @@ def _Query(self, domain=None, wildcards=False): key = "\t".join([self.record, self.data]) ttl = pdns_be.hget(pdns_key, key) if ttl is not None: - if not self.readonly(): + if not self._readonly(): pdns_be.hincrby(pdns_key, 'TXT\tQC', 1) return [(self.domain, self.record, ttl, self.data)] elif wildcards: @@ -277,7 +280,7 @@ def _Query(self, domain=None, wildcards=False): rv.append((self.domain, record, ddata[entry], data)) if rv: - if not self.readonly(): + if not self._readonly(): pdns_be.hincrby(pdns_key, 'TXT\tQC', 1) return rv elif wildcards: From a0abc115f2c703d8985ff221e960ecf5b4f6610d Mon Sep 17 00:00:00 2001 From: neonknight Date: Fri, 4 May 2018 13:57:00 +0200 Subject: [PATCH 4/5] read from slave, write to master --- pdns_redis.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/pdns_redis.py b/pdns_redis.py index 952f499..882fb6e 100755 --- a/pdns_redis.py +++ b/pdns_redis.py @@ -226,10 +226,10 @@ def _readonly(self): return self.redis_pdns.redis_write_host is None def BE(self): - if self._readonly(): - return self.redis_pdns.BE() - else: - return self.redis_pdns.WBE() + return self.redis_pdns.BE() + + def WBE(self): + return self.redis_pdns.WBE() def DSplit(self, domain, count=1024): return domain.split('.', count) @@ -245,14 +245,15 @@ def WildQuery(self, domain): def _Query(self, domain=None, wildcards=False): pdns_be = self.BE() + pdns_wbe = self.WBE() if not self._readonly() else None pdns_key = REDIS_PREFIX+(domain or self.domain) if self.record and self.data: key = "\t".join([self.record, self.data]) ttl = pdns_be.hget(pdns_key, key) if ttl is not None: - if not self._readonly(): - pdns_be.hincrby(pdns_key, 'TXT\tQC', 1) + if pdns_wbe is not None: + pdns_wbe.hincrby(pdns_key, 'TXT\tQC', 1) return [(self.domain, self.record, ttl, self.data)] elif wildcards: return self.WildQuery(domain or self.domain) @@ -280,8 +281,8 @@ def _Query(self, domain=None, wildcards=False): rv.append((self.domain, record, ddata[entry], data)) if rv: - if not self._readonly(): - pdns_be.hincrby(pdns_key, 'TXT\tQC', 1) + if pdns_wbe is not None: + pdns_wbe.hincrby(pdns_key, 'TXT\tQC', 1) return rv elif wildcards: return self.WildQuery(domain or self.domain) From 7d6ee78fd34ada67308b8ba4ebb0af598a2c53b4 Mon Sep 17 00:00:00 2001 From: neonknight Date: Fri, 4 May 2018 14:28:29 +0200 Subject: [PATCH 5/5] update documentation --- pdns_redis.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pdns_redis.py b/pdns_redis.py index 882fb6e..f62bc7f 100755 --- a/pdns_redis.py +++ b/pdns_redis.py @@ -31,8 +31,8 @@ Flags: - -R Set the Redis back-end. - -W Set the Redis back-end for writes. + -R Set the Redis back-end (read only). + -W Set the Redis back-end for writes (query count updates and record alterations). -i Set the Redis DB ID (defaults to 0) -A Read a Redis password from the named file. -P Run as a PowerDNS pipe-backend.