diff options
author | Rob Austein <sra@hactrn.net> | 2012-07-30 16:05:10 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2012-07-30 16:05:10 +0000 |
commit | f771425307207a6c2e855c457e81f8d47c166e50 (patch) | |
tree | c0b7bfd6d5b1981ef44972b89eb13b3b11357250 | |
parent | 06bedea032594f3eae92f3502dfe76195108d19a (diff) |
Switch to Django ORM .raw() query interface for a few queries which
were showing .deepcopy() hot spots under profiling. See #274.
svn path=/trunk/; revision=4610
-rw-r--r-- | rpkid/rpki/irdb/models.py | 9 | ||||
-rw-r--r-- | rpkid/rpki/irdbd.py | 7 | ||||
-rw-r--r-- | rpkid/rpki/left_right.py | 3 |
3 files changed, 16 insertions, 3 deletions
diff --git a/rpkid/rpki/irdb/models.py b/rpkid/rpki/irdb/models.py index 0be33543..8235a33e 100644 --- a/rpkid/rpki/irdb/models.py +++ b/rpkid/rpki/irdb/models.py @@ -532,10 +532,15 @@ class ROARequest(django.db.models.Model): @property def roa_prefix_bag(self): + prefixes = list(rpki.irdb.ROARequestPrefix.objects.raw(""" + SELECT * + FROM irdb_roarequestprefix + WHERE roa_request_id = %s + """, [self.id])) v4 = rpki.resource_set.roa_prefix_set_ipv4.from_django( - (p.prefix, p.prefixlen, p.max_prefixlen) for p in self.prefixes.filter(version = 'IPv4')) + (p.prefix, p.prefixlen, p.max_prefixlen) for p in prefixes if p.version == "IPv4") v6 = rpki.resource_set.roa_prefix_set_ipv6.from_django( - (p.prefix, p.prefixlen, p.max_prefixlen) for p in self.prefixes.filter(version = 'IPv6')) + (p.prefix, p.prefixlen, p.max_prefixlen) for p in prefixes if p.version == "IPv6") return rpki.resource_set.roa_prefix_bag(v4 = v4, v6 = v6) # Writing of .setter method deferred until something needs it. diff --git a/rpkid/rpki/irdbd.py b/rpkid/rpki/irdbd.py index a0fc0ec1..592ad799 100644 --- a/rpkid/rpki/irdbd.py +++ b/rpkid/rpki/irdbd.py @@ -70,7 +70,12 @@ class main(object): r_msg.append(r_pdu) def handle_list_roa_requests(self, q_pdu, r_msg): - for request in rpki.irdb.ROARequest.objects.filter(issuer__handle__exact = q_pdu.self_handle): + for request in rpki.irdb.ROARequest.objects.raw(""" + SELECT irdb_roarequest.* + FROM irdb_roarequest, irdb_resourceholderca + WHERE irdb_roarequest.issuer_id = irdb_resourceholderca.id + AND irdb_resourceholderca.handle = %s + """, [q_pdu.self_handle]): prefix_bag = request.roa_prefix_bag r_pdu = rpki.left_right.list_roa_requests_elt() r_pdu.tag = q_pdu.tag diff --git a/rpkid/rpki/left_right.py b/rpkid/rpki/left_right.py index 122da9d3..87256a6e 100644 --- a/rpkid/rpki/left_right.py +++ b/rpkid/rpki/left_right.py @@ -1352,6 +1352,9 @@ class list_roa_requests_elt(rpki.xml_utils.base_elt, left_right_namespace): if self.ipv6 is not None: self.ipv6 = rpki.resource_set.roa_prefix_set_ipv6(self.ipv6) + def __repr__(self): + return rpki.log.log_repr(self, self.asn, self.ipv4, self.ipv6) + class list_ghostbuster_requests_elt(rpki.xml_utils.text_elt, left_right_namespace): """ <list_ghostbuster_requests/> element. |