You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by mi...@apache.org on 2017/03/14 19:03:24 UTC

[2/3] incubator-trafficcontrol git commit: update with recent UI::ConfigFiles.pm changes

update with recent UI::ConfigFiles.pm changes


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/bd4cc2cd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/bd4cc2cd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/bd4cc2cd

Branch: refs/heads/master
Commit: bd4cc2cd375ddbeec3752aab654020fc180b5a5c
Parents: 0172d27
Author: Derek Gelinas <de...@cable.comcast.com>
Authored: Tue Mar 14 14:45:26 2017 -0400
Committer: Jeremy Mitchell <mi...@gmail.com>
Committed: Tue Mar 14 13:02:39 2017 -0600

----------------------------------------------------------------------
 .../app/lib/API/Configs/ApacheTrafficServer.pm  | 148 ++++++++++---------
 1 file changed, 80 insertions(+), 68 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/bd4cc2cd/traffic_ops/app/lib/API/Configs/ApacheTrafficServer.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/API/Configs/ApacheTrafficServer.pm b/traffic_ops/app/lib/API/Configs/ApacheTrafficServer.pm
index 44086e0..e7a8a89 100644
--- a/traffic_ops/app/lib/API/Configs/ApacheTrafficServer.pm
+++ b/traffic_ops/app/lib/API/Configs/ApacheTrafficServer.pm
@@ -326,10 +326,10 @@ sub server_data {
 
 	#if an ID is passed, look up by ID.  Otherwise, look up by hostname.
 	if ( $id =~ /^\d+$/ ) {
-		$server_obj = $self->db->resultset('Server')->search( { id => $id } )->first;
+		$server_obj = $self->db->resultset('Server')->search( { 'me.id' => $id }, { prefetch => [ 'profile', 'type', 'cachegroup', 'cdn' ] } )->single;
 	}
 	else {
-		$server_obj = $self->db->resultset('Server')->search( { host_name => $id } )->first;
+		$server_obj = $self->db->resultset('Server')->search( { host_name => $id }, { prefetch => [ 'profile', 'type', 'cachegroup', 'cdn' ] } )->single;
 	}
 
 	return $server_obj;
@@ -490,14 +490,14 @@ sub cdn_ds_data {
 				my $hname    = $ds_type =~ /^DNS/ ? "edge" : "ccr";
 				my $portstr  = ":" . "SERVER_TCP_PORT";
 				my $map_from = "http://" . $hname . $re . $ds_domain . $portstr . "/";
-				if ( $protocol == HTTP ) {
+				if ( $protocol == 0 ) {
 					$dsinfo->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
 				}
-				elsif ( $protocol == HTTPS || $protocol == HTTP_TO_HTTPS ) {
+				elsif ( $protocol == 1 || $protocol == 3 ) {
 					$map_from = "https://" . $hname . $re . $ds_domain . "/";
 					$dsinfo->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
 				}
-				elsif ( $protocol == HTTP_AND_HTTPS ) {
+				elsif ( $protocol == 2 ) {
 
 					#add the first one with http
 					$dsinfo->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
@@ -509,14 +509,14 @@ sub cdn_ds_data {
 			}
 			else {
 				my $map_from = "http://" . $host_re . "/";
-				if ( $protocol == HTTP ) {
+				if ( $protocol == 0 ) {
 					$dsinfo->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
 				}
-				elsif ( $protocol == HTTPS || $protocol == HTTP_TO_HTTPS ) {
+				elsif ( $protocol == 1 || $protocol == 3 ) {
 					$map_from = "https://" . $host_re . "/";
 					$dsinfo->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
 				}
-				elsif ( $protocol == HTTP_AND_HTTPS ) {
+				elsif ( $protocol == 2 ) {
 
 					#add the first with http
 					$dsinfo->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
@@ -557,6 +557,12 @@ sub cdn_ds_data {
 			my $fname = "cacheurl_" . $ds_xml_id . ".config";
 			$dsinfo->{dslist}->[$j]->{"cacheurl_file"} = $fname;
 		}
+		if ( defined( $row->profile ) ) {
+			my $dsparamrs = $self->db->resultset('ProfileParameter')->search( { profile => $row->profile }, { prefetch => [ 'profile', 'parameter' ] } );
+			while ( my $prow = $dsparamrs->next ) {
+				$dsinfo->{dslist}->[$j]->{'param'}->{ $prow->parameter->config_file }->{ $prow->parameter->name } = $prow->parameter->value;
+			}
+		}
 
 		$j++;
 	}
@@ -578,7 +584,7 @@ sub ds_data {
 	if ( $server_obj->type->name =~ m/^MID/ ) {
 
 		# the mids will do all deliveryservices in this CDN
-		my $domain = $self->profile_param_value( $server_obj->profile->id, 'CRConfig.json', 'domain_name', '' );
+		my $domain = $self->get_cdn_domain_by_profile_id( $server_obj->profile->id );
 		$rs_dsinfo = $self->db->resultset('DeliveryServiceInfoForDomainList')->search( {}, { bind => [$domain] } );
 	}
 	else {
@@ -604,7 +610,7 @@ sub ds_data {
 		my $cacheurl                    = $dsinfo->cacheurl;
 		my $remap_text                  = $dsinfo->remap_text;
 		my $multi_site_origin           = $dsinfo->multi_site_origin;
-		my $multi_site_origin_algorithm = $dsinfo->multi_site_origin_algorithm;
+		my $multi_site_origin_algorithm = 0;
 
 		if ( $re_type eq 'HOST_REGEXP' ) {
 			my $host_re = $dsinfo->pattern;
@@ -619,14 +625,14 @@ sub ds_data {
 					$portstr = ":" . $server_obj->tcp_port;
 				}
 				my $map_from = "http://" . $hname . $re . $ds_domain . $portstr . "/";
-				if ( $protocol == HTTP ) {
+				if ( $protocol == 0 ) {
 					$response_obj->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
 				}
-				elsif ( $protocol == HTTPS || $protocol == HTTP_TO_HTTPS ) {
+				elsif ( $protocol == 1 || $protocol == 3 ) {
 					$map_from = "https://" . $hname . $re . $ds_domain . "/";
 					$response_obj->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
 				}
-				elsif ( $protocol == HTTP_AND_HTTPS ) {
+				elsif ( $protocol == 2 ) {
 
 					#add the first one with http
 					$response_obj->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
@@ -638,14 +644,14 @@ sub ds_data {
 			}
 			else {
 				my $map_from = "http://" . $host_re . "/";
-				if ( $protocol == HTTP ) {
+				if ( $protocol == 0 ) {
 					$response_obj->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
 				}
-				elsif ( $protocol == HTTPS || $protocol == HTTP_TO_HTTPS ) {
+				elsif ( $protocol == 1 || $protocol == 3 ) {
 					$map_from = "https://" . $host_re . "/";
 					$response_obj->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
 				}
-				elsif ( $protocol == HTTP_AND_HTTPS ) {
+				elsif ( $protocol == 2 ) {
 
 					#add the first with http
 					$response_obj->{dslist}->[$j]->{"remap_line"}->{$map_from} = $map_to;
@@ -685,6 +691,12 @@ sub ds_data {
 			my $fname = "cacheurl_" . $ds_xml_id . ".config";
 			$response_obj->{dslist}->[$j]->{"cacheurl_file"} = $fname;
 		}
+		if ( defined( $dsinfo->profile ) ) {
+			my $dsparamrs = $self->db->resultset('ProfileParameter')->search( { profile => $dsinfo->profile }, { prefetch => [ 'profile', 'parameter' ] } );
+			while ( my $prow = $dsparamrs->next ) {
+				$response_obj->{dslist}->[$j]->{'param'}->{ $prow->parameter->config_file }->{ $prow->parameter->name } = $prow->parameter->value;
+			}
+		}
 
 		$j++;
 	}
@@ -990,13 +1002,13 @@ sub header_rewrite_dot_config {
 	my $ds_xml_id = undef;
 	if ( $filename =~ /^hdr_rw_mid_(.*)\.config$/ ) {
 		$ds_xml_id = $1;
-		my $ds = $self->db->resultset('Deliveryservice')->search( { xml_id => $ds_xml_id }, { prefetch => [ 'type', 'profile' ] } )->first();
+		my $ds = $self->db->resultset('Deliveryservice')->search( { xml_id => $ds_xml_id } )->single();
 		my $actions = $ds->mid_header_rewrite;
 		$text .= $actions . "\n";
 	}
 	elsif ( $filename =~ /^hdr_rw_(.*)\.config$/ ) {
 		$ds_xml_id = $1;
-		my $ds = $self->db->resultset('Deliveryservice')->search( { xml_id => $ds_xml_id }, { prefetch => [ 'type', 'profile' ] } )->first();
+		my $ds = $self->db->resultset('Deliveryservice')->search( { xml_id => $ds_xml_id } )->single();
 		my $actions = $ds->edge_header_rewrite;
 		$text .= $actions . "\n";
 	}
@@ -1053,7 +1065,7 @@ sub regex_remap_dot_config {
 
 	if ( $filename =~ /^regex_remap_(.*)\.config$/ ) {
 		my $ds_xml_id = $1;
-		my $ds = $self->db->resultset('Deliveryservice')->search( { xml_id => $ds_xml_id }, { prefetch => [ 'type', 'profile' ] } )->first();
+		my $ds = $self->db->resultset('Deliveryservice')->search( { xml_id => $ds_xml_id } )->single();
 		$text .= $ds->regex_remap . "\n";
 	}
 
@@ -1167,9 +1179,9 @@ sub ssl_multicert_dot_config {
 	foreach my $ds (@ds_list) {
 		my $ds_id        = $ds->id;
 		my $xml_id       = $ds->xml_id;
-		my $rs_ds        = $self->db->resultset('Deliveryservice')->search( { 'me.id' => $ds_id } );
+		my $rs_ds        = $self->db->resultset('Deliveryservice')->search( { 'me.id' => $ds_id }, { prefetch => ['type'] } );
 		my $data         = $rs_ds->first;
-		my $domain_name  = UI::DeliveryService::get_cdn_domain( $self, $ds_id );
+		my $domain_name  = $ds->cdn->domain_name,
 		my $ds_regexes   = UI::DeliveryService::get_regexp_set( $self, $ds_id );
 		my @example_urls = UI::DeliveryService::get_example_urls( $self, $ds_id, $ds_regexes, $data, $domain_name, $data->protocol );
 
@@ -1296,9 +1308,9 @@ sub ip_allow_data {
 
 	# default for coalesce_ipv4 = 24, 5 and for ipv6 48, 5; override with the parameters in the server profile.
 	my $coalesce_masklen_v4 = 24;
-	my $coalesce_number_v4 = 5;
+	my $coalesce_number_v4  = 5;
 	my $coalesce_masklen_v6 = 48;
-	my $coalesce_number_v6 = 5;
+	my $coalesce_number_v6  = 5;
 	my $rs_parameter =
 		$self->db->resultset('ProfileParameter')->search( { profile => $server_obj->profile->id }, { prefetch => [ "parameter", "profile" ] } );
 
@@ -1309,16 +1321,16 @@ sub ip_allow_data {
 			$ipallow->[$i]->{method} = "ALL";
 			$i++;
 		}
-		elsif ($row->parameter->name eq 'coalesce_masklen_v4' && $row->parameter->config_file eq 'ip_allow.config' ) {
+		elsif ( $row->parameter->name eq 'coalesce_masklen_v4' && $row->parameter->config_file eq 'ip_allow.config' ) {
 			$coalesce_masklen_v4 = $row->parameter->value;
 		}
-		elsif ($row->parameter->name eq 'coalesce_number_v4' && $row->parameter->config_file eq 'ip_allow.config' ) {
+		elsif ( $row->parameter->name eq 'coalesce_number_v4' && $row->parameter->config_file eq 'ip_allow.config' ) {
 			$coalesce_number_v4 = $row->parameter->value;
 		}
-		elsif ($row->parameter->name eq 'coalesce_masklen_v6' && $row->parameter->config_file eq 'ip_allow.config' ) {
+		elsif ( $row->parameter->name eq 'coalesce_masklen_v6' && $row->parameter->config_file eq 'ip_allow.config' ) {
 			$coalesce_masklen_v6 = $row->parameter->value;
 		}
-		elsif ($row->parameter->name eq 'coalesce_number_v6' && $row->parameter->config_file eq 'ip_allow.config' ) {
+		elsif ( $row->parameter->name eq 'coalesce_number_v6' && $row->parameter->config_file eq 'ip_allow.config' ) {
 			$coalesce_number_v6 = $row->parameter->value;
 		}
 	}
@@ -1370,7 +1382,7 @@ sub ip_allow_data {
 
 		# compact, coalesce and compact combined list again
 		my @compacted_list = NetAddr::IP::Compact(@allowed_netaddrips);
-		my $coalesced_list = NetAddr::IP::Coalesce( $coalesce_masklen_v4 , $coalesce_number_v4, @allowed_netaddrips );
+		my $coalesced_list = NetAddr::IP::Coalesce( $coalesce_masklen_v4, $coalesce_number_v4, @allowed_netaddrips );
 		my @combined_list  = NetAddr::IP::Compact( @allowed_netaddrips, @{$coalesced_list} );
 		foreach my $net (@combined_list) {
 			my $range = $net->range();
@@ -1383,7 +1395,7 @@ sub ip_allow_data {
 
 		# now add IPv6. TODO JvD: paremeterize support enabled on/ofd and /48 and number 5
 		my @compacted__ipv6_list = NetAddr::IP::Compact(@allowed_ipv6_netaddrips);
-		my $coalesced_ipv6_list  = NetAddr::IP::Coalesce( $coalesce_masklen_v6 , $coalesce_number_v6, @allowed_ipv6_netaddrips );
+		my $coalesced_ipv6_list  = NetAddr::IP::Coalesce( $coalesce_masklen_v6, $coalesce_number_v6, @allowed_ipv6_netaddrips );
 		my @combined_ipv6_list   = NetAddr::IP::Compact( @allowed_ipv6_netaddrips, @{$coalesced_ipv6_list} );
 		foreach my $net (@combined_ipv6_list) {
 			my $range = $net->range();
@@ -1474,7 +1486,7 @@ sub cachegroup_profiles {
 		cachegroup => { -in => $ids }
 	);
 
-	my $rs_parent = $self->db->resultset('Server')->search( \%condition, { prefetch => [ 'cachegroup', 'status', 'type', 'profile' ] } );
+	my $rs_parent = $self->db->resultset('Server')->search( \%condition, { prefetch => [ 'cachegroup', 'status', 'type', 'profile', 'cdn' ] } );
 
 	while ( my $row = $rs_parent->next ) {
 
@@ -1497,11 +1509,11 @@ sub cachegroup_profiles {
 
 			# assign $ds_domain, $weight and $port, and cache the results %profile_cache
 			$profile_cache->{$pid} = {
-				domain_name    => $self->profile_param_value( $pid, 'CRConfig.json', 'domain_name',    undef ),
-				weight         => $self->profile_param_value( $pid, 'parent.config', 'weight',         '0.999' ),
-				port           => $self->profile_param_value( $pid, 'parent.config', 'port',           undef ),
+				domain_name    => $row->cdn->domain_name,
+				weight         => $self->profile_param_value( $pid, 'parent.config', 'weight', '0.999' ),
+				port           => $self->profile_param_value( $pid, 'parent.config', 'port', undef ),
 				use_ip_address => $self->profile_param_value( $pid, 'parent.config', 'use_ip_address', 0 ),
-				rank           => $self->profile_param_value( $pid, 'parent.config', 'rank',           1 ),
+				rank           => $self->profile_param_value( $pid, 'parent.config', 'rank', 1 ),
 			};
 		}
 	}
@@ -1528,7 +1540,7 @@ sub parent_data {
 	}
 
 	# get the server's cdn domain
-	my $server_domain = $self->profile_param_value( $server_obj->profile->id, 'CRConfig.json', 'domain_name' );
+	my $server_domain = $self->get_cdn_domain_by_profile_id( $server_obj->profile->id );
 
 	my %profile_cache;
 	my %deliveryservices;
@@ -1588,7 +1600,13 @@ sub parent_dot_config {
 	my $data;
 
 	my $server_type = $server_obj->type->name;
-	my $parent_qstring;
+
+	my $ats_ver =
+		$self->db->resultset('ProfileParameter')
+		->search( { 'parameter.name' => 'trafficserver', 'parameter.config_file' => 'package', 'profile.id' => $server_obj->profile->id },
+		{ prefetch => [ 'profile', 'parameter' ] } )->get_column('parameter.value')->single();
+	my $ats_major_version = substr( $ats_ver, 0, 1 );
+
 	my $parent_info;
 	my $text = $self->header_comment( $server_obj->host_name );
 	if ( !defined($data) ) {
@@ -1598,10 +1616,20 @@ sub parent_dot_config {
 	if ( $server_type =~ m/^MID/ ) {
 		my @unique_origins;
 		foreach my $ds ( @{ $data->{dslist} } ) {
-			my $origin_shield     = $ds->{origin_shield};
-			$parent_qstring = "ignore";
-			my $multi_site_origin           = defined( $ds->{multi_site_origin} )           ? $ds->{multi_site_origin}           : 0;
-			my $multi_site_origin_algorithm = defined( $ds->{multi_site_origin_algorithm} ) ? $ds->{multi_site_origin_algorithm} : 0;
+			my $xml_id                             = $ds->{ds_xml_id};
+			my $origin_shield                      = $ds->{origin_shield};
+			my $multi_site_origin                  = $ds->{multi_site_origin} || 0;
+			my $mso_algorithm                      = $ds->{'param'}->{'parent.config'}->{'mso.algorithm'} || 0;
+			my $parent_retry                       = $ds->{'param'}->{'parent.config'}->{'mso.parent_retry'};
+			my $unavailable_server_retry_responses = $ds->{'param'}->{'parent.config'}->{'mso.unavailable_server_retry_responses'};
+			my $max_simple_retries                 = $ds->{'param'}->{'parent.config'}->{'mso.max_simple_retries'} || 1;
+			my $max_unavailable_server_retries     = $ds->{'param'}->{'parent.config'}->{'mso.max_unavailable_server_retries'} || 1;
+
+			my $qsh            = $ds->{'param'}->{'parent.config'}->{'mso.qstring_handling'};
+			my $parent_qstring = "ignore";                                                      # default is ignore, unless for alg consistent_hash
+			if ( !defined($qsh) && $mso_algorithm eq 'consistent_hash' && $ds->{qstring_ignore} == 0 ) {
+				$parent_qstring = 'consider';
+			}
 
 			my $org_uri = URI->new( $ds->{org} );
 
@@ -1660,47 +1688,29 @@ sub parent_dot_config {
 				}
 
 				my $parents = 'parent="' . join( '', @parent_info ) . '' . join( '', @secondary_parent_info ) . '' . join( '', @null_parent_info ) . '"';
-				my $mso_algorithm = "";
-				if ( $multi_site_origin_algorithm == CONSISTENT_HASH ) {
-					$mso_algorithm = "consistent_hash";
-					if ( $ds->{qstring_ignore} == 0 ) {
-						$parent_qstring = "consider";
-					}
-				}
-				elsif ( $multi_site_origin_algorithm == PRIMARY_BACKUP ) {
-					$mso_algorithm = "false";
-				}
-				elsif ( $multi_site_origin_algorithm == STRICT_ROUND_ROBIN ) {
-					$mso_algorithm = "strict";
-				}
-				elsif ( $multi_site_origin_algorithm == IP_ROUND_ROBIN ) {
-					$mso_algorithm = "true";
-				}
-				elsif ( $multi_site_origin_algorithm == LATCH_ON_FAILOVER ) {
-					$mso_algorithm = "latched";
-				}
-				else {
-					$mso_algorithm = "consistent_hash";
+
+				$text .= "$parents round_robin=$mso_algorithm qstring=$parent_qstring go_direct=false parent_is_proxy=false";
+
+				if ( $ats_major_version >= 6 && $parent_retry ne "" ) {
+					$text .= " parent_retry=$parent_retry unavailable_server_retry_responses=$unavailable_server_retry_responses";
+					$text .= " max_simple_retries=$max_simple_retries max_unavailable_server_retries=$max_unavailable_server_retries";
 				}
-				$text .= "$parents round_robin=$mso_algorithm qstring=$parent_qstring go_direct=false parent_is_proxy=false\n";
+				$text .= "\n";
 			}
 		}
 
 		#$text .= "dest_domain=. go_direct=true\n"; # this is implicit.
-		$self->app->log->debug( "MID PARENT.CONFIG:\n" . $text . "\n" );
+		#$self->app->log->debug( "MID PARENT.CONFIG:\n" . $text . "\n" );
 
 		return $text;
 	}
-	else {
+	else {    #"True" Parent - we are genning a EDGE config that points to a parent proxy.
 
-		#"True" Parent
 		$parent_info = $self->parent_data($server_obj);
-
 		my %done = ();
 
 		foreach my $ds ( @{ $data->{dslist} } ) {
 			my $org = $ds->{org};
-			$parent_qstring = "ignore";
 			next if !defined $org || $org eq "";
 			next if $done{$org};
 			my $org_uri = URI->new($org);
@@ -1708,7 +1718,9 @@ sub parent_dot_config {
 				$text .= "dest_domain=" . $org_uri->host . " port=" . $org_uri->port . " go_direct=true\n";
 			}
 			else {
-				if ( $ds->{qstring_ignore} == 0 ) {
+				my $qsh = $ds->{'param'}->{'parent.config'}->{'psel.qstring_handling'};
+				my $parent_qstring = defined($qsh) ? $qsh : "ignore";
+				if ( $ds->{qstring_ignore} == 0 && !defined($qsh) ) {
 					$parent_qstring = "consider";
 				}