From a2f3b9ec1f1cba1146ccf9294a1d15f5590e4975 Mon Sep 17 00:00:00 2001 From: Bert Hubert Date: Tue, 6 Nov 2012 10:58:58 +0000 Subject: [PATCH] dedup our AXFR signing, closing ticket 611 (plus remove duplicate ; in dnssecsigner.cc) git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@2856 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- pdns/dnssecsigner.cc | 2 +- pdns/signingpipe.cc | 30 +++++++++++++++++++++++++++++- pdns/signingpipe.hh | 2 +- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/pdns/dnssecsigner.cc b/pdns/dnssecsigner.cc index 846020504..08c618d75 100644 --- a/pdns/dnssecsigner.cc +++ b/pdns/dnssecsigner.cc @@ -35,7 +35,7 @@ int getRRSIGsForRRSET(DNSSECKeeper& dk, const std::string& signer, const std::st rrc.d_labels=countLabels(signQName); rrc.d_originalttl=signTTL; - rrc.d_siginception=getCurrentInception();; + rrc.d_siginception=getCurrentInception(); rrc.d_sigexpire = rrc.d_siginception + 14*86400; // XXX should come from zone metadata rrc.d_signer = toLower(signer); rrc.d_tag = 0; diff --git a/pdns/signingpipe.cc b/pdns/signingpipe.cc index 384ac3bfb..7e0c1eae0 100644 --- a/pdns/signingpipe.cc +++ b/pdns/signingpipe.cc @@ -106,16 +106,44 @@ ChunkedSigningPipe::~ChunkedSigningPipe() //cout<<"Did: "<begin(), d_rrsetToSign->end(), dedupLessThan); + d_rrsetToSign->erase(unique(d_rrsetToSign->begin(), d_rrsetToSign->end(), dedupEqual), d_rrsetToSign->end()); +} + bool ChunkedSigningPipe::submit(const DNSResourceRecord& rr) { ++d_submitted; // check if we have a full RRSET to sign if(!d_rrsetToSign->empty() && (d_rrsetToSign->begin()->qtype.getCode() != rr.qtype.getCode() || !pdns_iequals(d_rrsetToSign->begin()->qname, rr.qname))) { + dedupRRSet(); sendRRSetToWorker(); } d_rrsetToSign->push_back(rr); - return !d_chunks.empty() && d_chunks.front().size() >= d_maxchunkrecords; + return !d_chunks.empty() && d_chunks.front().size() >= d_maxchunkrecords; // "you can send more" } pair, vector > ChunkedSigningPipe::waitForRW(bool rd, bool wr, int seconds) diff --git a/pdns/signingpipe.hh b/pdns/signingpipe.hh index 043f0c72f..0a7ae49fb 100644 --- a/pdns/signingpipe.hh +++ b/pdns/signingpipe.hh @@ -31,7 +31,7 @@ public: unsigned int getReady(); private: void flushToSign(); - + void dedupRRSet(); void sendRRSetToWorker(); // dispatch RRSET to worker void addSignedToChunks(chunk_t* signedChunk); pair, vector > waitForRW(bool rd, bool wr, int seconds); -- 2.40.0