aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2012-07-30 16:05:10 +0000
committerRob Austein <sra@hactrn.net>2012-07-30 16:05:10 +0000
commitf771425307207a6c2e855c457e81f8d47c166e50 (patch)
treec0b7bfd6d5b1981ef44972b89eb13b3b11357250
parent06bedea032594f3eae92f3502dfe76195108d19a (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.py9
-rw-r--r--rpkid/rpki/irdbd.py7
-rw-r--r--rpkid/rpki/left_right.py3
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.