You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by de...@apache.org on 2017/04/17 17:13:06 UTC
[2/2] incubator-trafficcontrol git commit: optimizes
api/version/deliveryservices and api/version/deliveryservices/:id by joining
tables and avoiding n+1 queries. also fixes a couple of tests.
optimizes api/version/deliveryservices and api/version/deliveryservices/:id by joining tables and avoiding n+1 queries. also fixes a couple of tests.
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/6a767fa7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/6a767fa7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/6a767fa7
Branch: refs/heads/master
Commit: 6a767fa7c6cc373938e95180d25df8e8807efd10
Parents: 2a98227
Author: Jeremy Mitchell <mi...@gmail.com>
Authored: Mon Apr 17 11:03:52 2017 -0600
Committer: Dewayne Richardson <de...@apache.org>
Committed: Mon Apr 17 11:12:55 2017 -0600
----------------------------------------------------------------------
traffic_ops/app/lib/API/Deliveryservice.pm | 41 +++++++++++++---
.../app/lib/Fixtures/DeliveryserviceRegex.pm | 51 +++++++++++++++++++-
traffic_ops/app/lib/Fixtures/Regex.pm | 48 ++++++++++++++++++
.../app/t/api/1.1/deliveryserviceserver.t | 2 +-
.../app/t/api/1.2/deliveryservice_matches.t | 4 +-
5 files changed, 134 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/6a767fa7/traffic_ops/app/lib/API/Deliveryservice.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/API/Deliveryservice.pm b/traffic_ops/app/lib/API/Deliveryservice.pm
index 1d41fbd..4297bd5 100644
--- a/traffic_ops/app/lib/API/Deliveryservice.pm
+++ b/traffic_ops/app/lib/API/Deliveryservice.pm
@@ -59,13 +59,17 @@ sub index {
$criteria{'me.id'} = { -in => \@ds_ids },;
}
- my $rs_data = $self->db->resultset("Deliveryservice")->search( \%criteria, { prefetch => [ 'cdn', 'profile', 'type' ], order_by => 'me.' . $orderby } );
+ my $rs_data = $self->db->resultset("Deliveryservice")->search(
+ \%criteria,
+ { prefetch => [ 'cdn', { 'deliveryservice_regexes' => { 'regex' => 'type' } }, 'profile', 'type' ], order_by => 'me.' . $orderby }
+ );
+
while ( my $row = $rs_data->next ) {
# build example urls for each delivery service
my @example_urls = ();
- my $cdn_domain = $self->get_cdn_domain_by_ds_id( $row->id );
- my $regexp_set = &UI::DeliveryService::get_regexp_set( $self, $row->id );
+ my $cdn_domain = $row->cdn->domain_name;
+ my $regexp_set = $self->get_regexp_set( $row->deliveryservice_regexes );
@example_urls = &UI::DeliveryService::get_example_urls( $self, $row->id, $regexp_set, $row, $cdn_domain, $row->protocol );
push(
@@ -144,7 +148,10 @@ sub show {
return $self->forbidden() if ( !exists( $map{$id} ) );
}
- my $rs = $self->db->resultset("Deliveryservice")->search( { id => $id } );
+ my $rs = $self->db->resultset("Deliveryservice")->search(
+ { 'me.id' => $id },
+ { prefetch => [ 'cdn', { 'deliveryservice_regexes' => { 'regex' => 'type' } }, 'profile', 'type' ] }
+ );
while ( my $row = $rs->next ) {
# build the matchlist (the list of ds regexes and their type)
@@ -163,8 +170,8 @@ sub show {
# build example urls for the delivery service
my @example_urls = ();
- my $cdn_domain = $self->get_cdn_domain_by_ds_id( $row->id );
- my $regexp_set = &UI::DeliveryService::get_regexp_set( $self, $row->id );
+ my $cdn_domain = $row->cdn->domain_name;
+ my $regexp_set = $self->get_regexp_set( $row->deliveryservice_regexes );
@example_urls = &UI::DeliveryService::get_example_urls( $self, $row->id, $regexp_set, $row, $cdn_domain, $row->protocol );
push(
@@ -316,7 +323,7 @@ sub update {
# build example urls
my @example_urls = ();
- my $cdn_domain = $self->get_cdn_domain_by_ds_id( $rs->id );
+ my $cdn_domain = $rs->cdn->domain_name;
my $regexp_set = &UI::DeliveryService::get_regexp_set( $self, $rs->id );
@example_urls = &UI::DeliveryService::get_example_urls( $self, $rs->id, $regexp_set, $rs, $cdn_domain, $rs->protocol );
@@ -495,7 +502,7 @@ sub create {
# build example urls
my @example_urls = ();
- my $cdn_domain = $self->get_cdn_domain_by_ds_id( $insert->id );
+ my $cdn_domain = $insert->cdn->domain_name;
my $regexp_set = &UI::DeliveryService::get_regexp_set( $self, $insert->id );
@example_urls = &UI::DeliveryService::get_example_urls( $self, $insert->id, $regexp_set, $insert, $cdn_domain, $insert->protocol );
@@ -1107,4 +1114,22 @@ sub create_default_ds_regex {
}
+sub get_regexp_set {
+ my $self = shift;
+ my @ds_regexes = shift;
+
+ my $regexp_set;
+ my $i = 0;
+
+ foreach my $ds_regex (@ds_regexes) {
+ $regexp_set->[$i]->{id} = $ds_regex->id;
+ $regexp_set->[$i]->{pattern} = $ds_regex->regex->pattern;
+ $regexp_set->[$i]->{type} = $ds_regex->regex->type->name;
+ $regexp_set->[$i]->{set_number} = $ds_regex->set_number;
+ $i++;
+ }
+
+ return $regexp_set;
+}
+
1;
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/6a767fa7/traffic_ops/app/lib/Fixtures/DeliveryserviceRegex.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/Fixtures/DeliveryserviceRegex.pm b/traffic_ops/app/lib/Fixtures/DeliveryserviceRegex.pm
index 7b25146..7aa3b9d 100644
--- a/traffic_ops/app/lib/Fixtures/DeliveryserviceRegex.pm
+++ b/traffic_ops/app/lib/Fixtures/DeliveryserviceRegex.pm
@@ -114,7 +114,7 @@ my %definition_for = (
set_number => 0,
},
},
- target_4 => {
+ target_4 => {
new => 'DeliveryserviceRegex',
using => {
deliveryservice => 700,
@@ -122,6 +122,55 @@ my %definition_for = (
set_number => 0,
},
},
+ target_5 => {
+ new => 'DeliveryserviceRegex',
+ using => {
+ deliveryservice => 800,
+ regex => 1400,
+ set_number => 0,
+ },
+ },
+ target_6 => {
+ new => 'DeliveryserviceRegex',
+ using => {
+ deliveryservice => 900,
+ regex => 1500,
+ set_number => 0,
+ },
+ },
+ target_7 => {
+ new => 'DeliveryserviceRegex',
+ using => {
+ deliveryservice => 1000,
+ regex => 1600,
+ set_number => 0,
+ },
+ },
+ target_8 => {
+ new => 'DeliveryserviceRegex',
+ using => {
+ deliveryservice => 1100,
+ regex => 1700,
+ set_number => 0,
+ },
+ },
+ target_9 => {
+ new => 'DeliveryserviceRegex',
+ using => {
+ deliveryservice => 1200,
+ regex => 1800,
+ set_number => 0,
+ },
+ },
+ target_10 => {
+ new => 'DeliveryserviceRegex',
+ using => {
+ deliveryservice => 1300,
+ regex => 1900,
+ set_number => 0,
+ },
+ },
+
);
sub get_definition {
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/6a767fa7/traffic_ops/app/lib/Fixtures/Regex.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/Fixtures/Regex.pm b/traffic_ops/app/lib/Fixtures/Regex.pm
index b48b48e..090fa7b 100644
--- a/traffic_ops/app/lib/Fixtures/Regex.pm
+++ b/traffic_ops/app/lib/Fixtures/Regex.pm
@@ -122,6 +122,54 @@ my %definition_for = (
type => 19,
},
},
+ hr_target_5 => {
+ new => 'Regex',
+ using => {
+ id => 1400,
+ pattern => '.*\.target-ds5\..*',
+ type => 19,
+ },
+ },
+ hr_target_6 => {
+ new => 'Regex',
+ using => {
+ id => 1500,
+ pattern => '.*\.target-ds6\..*',
+ type => 19,
+ },
+ },
+ hr_target_7 => {
+ new => 'Regex',
+ using => {
+ id => 1600,
+ pattern => '.*\.target-ds7\..*',
+ type => 19,
+ },
+ },
+ hr_target_8 => {
+ new => 'Regex',
+ using => {
+ id => 1700,
+ pattern => '.*\.target-ds8\..*',
+ type => 19,
+ },
+ },
+ hr_target_9 => {
+ new => 'Regex',
+ using => {
+ id => 1800,
+ pattern => '.*\.target-ds9\..*',
+ type => 19,
+ },
+ },
+ hr_target_10 => {
+ new => 'Regex',
+ using => {
+ id => 1900,
+ pattern => '.*\.target-ds10\..*',
+ type => 19,
+ },
+ },
);
sub get_definition {
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/6a767fa7/traffic_ops/app/t/api/1.1/deliveryserviceserver.t
----------------------------------------------------------------------
diff --git a/traffic_ops/app/t/api/1.1/deliveryserviceserver.t b/traffic_ops/app/t/api/1.1/deliveryserviceserver.t
index c798d2d..a7124c8 100644
--- a/traffic_ops/app/t/api/1.1/deliveryserviceserver.t
+++ b/traffic_ops/app/t/api/1.1/deliveryserviceserver.t
@@ -42,7 +42,7 @@ ok $t->post_ok( '/login', => form => { u => 'portal', p => Test::TestHelper::ADM
->or( sub { diag $t->tx->res->content->asset->{content}; } );
$t->get_ok("/api/1.1/deliveryserviceserver.json")->status_is(200)->or( sub { diag $t->tx->res->content->asset->{content}; } )
- ->json_is( "/response/0/server", "100" )->json_is( "/response/0/deliveryService", "100" )->json_is( "/limit", "20" )
+ ->json_is( "/response/0/server", 100 )->json_is( "/response/0/deliveryService", 100 )->json_is( "/limit", 20 )
->json_is( "/orderby", "deliveryservice" );
ok $t->get_ok('/logout')->status_is(302)->or( sub { diag $t->tx->res->content->asset->{content}; } );
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/6a767fa7/traffic_ops/app/t/api/1.2/deliveryservice_matches.t
----------------------------------------------------------------------
diff --git a/traffic_ops/app/t/api/1.2/deliveryservice_matches.t b/traffic_ops/app/t/api/1.2/deliveryservice_matches.t
index a03adad..e4f2ab9 100644
--- a/traffic_ops/app/t/api/1.2/deliveryservice_matches.t
+++ b/traffic_ops/app/t/api/1.2/deliveryservice_matches.t
@@ -42,11 +42,11 @@ ok $t->post_ok( '/api/1.1/user/login', json => { u => Test::TestHelper::ADMIN_US
ok $t->get_ok("/api/1.2/deliveryservice_matches.json")->status_is(200)->or( sub { diag $t->tx->res->content->asset->{content}; } )
->json_has( '/response', 'has a response' )->json_is( '/response/0/dsName', 'steering_ds1' )->json_has( '/response/0/patterns', 'has a first match' )
- ->json_is( '/response/1/dsName', 'test_ds1' )->json_has( '/response/1/patterns', 'has a second match' ), 'Query matches';
+ ->json_is( '/response/1/dsName', 'steering_ds2' )->json_has( '/response/1/patterns', 'has a second match' ), 'Query matches';
ok $t->get_ok("/api/1.2/deliveryservice_matches.json?format=file")->status_is(200)->or( sub { diag $t->tx->res->content->asset->{content}; } )
->json_hasnt( '/response', 'should not have a response' )->json_is( '/0/dsName', 'steering_ds1' )->json_has( '/0/patterns', 'has a first match' )
- ->json_is( '/1/dsName', 'test_ds1' )->json_has( '/1/patterns', 'has a second match' ), 'Query matches';
+ ->json_is( '/1/dsName', 'steering_ds2' )->json_has( '/1/patterns', 'has a second match' ), 'Query matches';
ok $t->get_ok('/logout')->status_is(302)->or( sub { diag $t->tx->res->content->asset->{content}; } );