You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ra...@apache.org on 2020/01/31 01:04:16 UTC

[trafficcontrol] branch 4.0.x updated: traffic_ops_ort: fix for syncds having too many header rewrite false … (#4343) (#4362)

This is an automated email from the ASF dual-hosted git repository.

rawlin pushed a commit to branch 4.0.x
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/4.0.x by this push:
     new 9d1261f  traffic_ops_ort: fix for syncds having too many header rewrite false … (#4343) (#4362)
9d1261f is described below

commit 9d1261ffb2dd6335ef160a161c97e6d60197b1b5
Author: Rawlin Peters <ra...@apache.org>
AuthorDate: Thu Jan 30 18:04:08 2020 -0700

    traffic_ops_ort: fix for syncds having too many header rewrite false … (#4343) (#4362)
    
    * traffic_ops_ort: fix for syncds having too many header rewrite false positives
    
    * traffic_ops_ort.pl: allow all files with changes to run through the diff_file_lines function
    
    (cherry picked from commit 7ee3ffa98cb41f727f75fc1d909b71fc2c974340)
    
    Co-authored-by: Brian Olsen <bn...@gmail.com>
---
 CHANGELOG.md                       |  1 +
 traffic_ops/ort/traffic_ops_ort.pl | 69 ++++++++++++++++++++++++--------------
 2 files changed, 45 insertions(+), 25 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7b4cecd..d8dc807 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -96,6 +96,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
 - Traffic Monitor health/stat time now includes full body download (like prior TM <=2.1 version)
 - Modified Traffic Router logging format to include an additional field for DNS log entries, namely `rhi`. This defaults to '-' and is only used when EDNS0 client subnet extensions are enabled and a client subnet is present in the request. When enabled and a subnet is present, the subnet appears in the `chi` field and the resolver address is in the `rhi` field.
 - Changed traffic_ops_ort.pl so that hdr_rw-<ds>.config files are compared with strict ordering and line duplication when detecting configuration changes.
+- Fix to traffic_ops_ort.pl to strip specific comment lines before checking if a file has changed.  Also promoted a changed file message from DEBUG to ERROR for report mode.
 - Traffic Ops (golang), Traffic Monitor, Traffic Stats are now compiled using Go version 1.11. Grove was already being compiled with this version which improves performance for TLS when RSA certificates are used.
 - Fixed issue #3497: TO API clients that don't specify the latest minor version will overwrite/default any fields introduced in later versions
 - Fixed permissions on DELETE /api/$version/deliveryservice_server/{dsid}/{serverid} endpoint
diff --git a/traffic_ops/ort/traffic_ops_ort.pl b/traffic_ops/ort/traffic_ops_ort.pl
index 4b1bd30..ac56b5c 100755
--- a/traffic_ops/ort/traffic_ops_ort.pl
+++ b/traffic_ops/ort/traffic_ops_ort.pl
@@ -246,8 +246,6 @@ else {
 
 ( my $my_profile_name, $cfg_file_tracker, my $my_cdn_name ) = &get_cfg_file_list( $hostname_short, $traffic_ops_host, $script_mode );
 
-
-
 if ( $script_mode == $REVALIDATE ) {
 	( $log_level >> $INFO ) && print "\nINFO: ======== Revalidating, no package processing needed ========\n";
 }
@@ -410,6 +408,7 @@ sub process_cfg_file {
 	}
 
 	my @db_file_lines = @{ &scrape_unencode_text($result) };
+	@db_file_lines = @{ &scrape_canned_comments(\@db_file_lines) };
 
 	my $file = $config_dir . "/" . $cfg_file;
 
@@ -419,26 +418,33 @@ sub process_cfg_file {
 	if ( -e $file ) {
 		return $CFG_FILE_NOT_PROCESSED if ( !&can_read_write_file($cfg_file) );
 		@disk_file_lines = @{ &open_file_get_contents($file) };
+		@disk_file_lines = @{ &scrape_canned_comments(\@disk_file_lines) };
 	}
 
 	# First, check if the file to be generated would be identical including order
 	my $change_needed = ( join( '\0', @disk_file_lines ) ne join( '\0', @db_file_lines ) );
 
-	# if different, look deeper to see if we care about the diffs (e.g. different order)
-	if ( $change_needed && !( $cfg_file eq 'logs_xml.config' || $cfg_file =~ m/\.cer$/ || $cfg_file =~ m/hdr\_rw\_(.*)\.config$/ ) ) {
-		my @return             = &diff_file_lines( $cfg_file, \@db_file_lines, \@disk_file_lines );
-		my @db_lines_missing   = @{ shift(@return) };
-		my @disk_lines_missing = @{ shift(@return) };
+	# if different, look deeper to see if we care about the diffs
+	if ( $change_needed ) {
+		# diff_file_lines has all the debug we want
+		my @return = &diff_file_lines( $cfg_file, \@db_file_lines, \@disk_file_lines );
+		my $order_dependent = ( $cfg_file eq 'logs_xml.config' || $cfg_file =~ m/\.cer$/ || $cfg_file =~ m/hdr\_rw\_(.*)\.config$/ );
+
+		# if the files aren't order dependent then relax the criteria
+		if ( ! $order_dependent ) {
+			my @db_lines_missing   = @{ shift(@return) };
+			my @disk_lines_missing = @{ shift(@return) };
 
-		if ( scalar(@disk_lines_missing) == 0 && scalar(@db_lines_missing) == 0 ) {
-			# all lines accounted for
-			$change_needed = undef;
+			if ( scalar(@disk_lines_missing) == 0 && scalar(@db_lines_missing) == 0 ) {
+				# all lines accounted for
+				$change_needed = undef;
+			}
 		}
 	}
 
-	if ($change_needed) {
+	if ( $change_needed ) {
 		$cfg_file_tracker->{$cfg_file}{'change_needed'}++;
-		( $log_level >> $DEBUG ) && print "DEBUG $file needs updated.\n";
+		( $log_level >> $ERROR ) && print "ERROR $file needs updated.\n";
 		&backup_file( $cfg_file, \$result );
 	}
 	else {
@@ -1755,23 +1761,23 @@ sub check_script_mode {
 	my $script_mode = undef;
 	if ( $ARGV[0] eq "interactive" ) {
 		( $log_level >> $DEBUG ) && print "DEBUG Script running in interactive mode.\n";
-		$script_mode = 0;
+		$script_mode = $INTERACTIVE;
 	}
 	elsif ( $ARGV[0] eq "report" ) {
 		( $log_level >> $DEBUG ) && print "DEBUG Script running in report mode.\n";
-		$script_mode = 1;
+		$script_mode = $REPORT;
 	}
 	elsif ( $ARGV[0] eq "badass" ) {
 		( $log_level >> $DEBUG ) && print "DEBUG Script running in badass mode.\n";
-		$script_mode = 2;
+		$script_mode = $BADASS;
 	}
 	elsif ( $ARGV[0] eq "syncds" ) {
 		( $log_level >> $DEBUG ) && print "DEBUG Script running in syncds mode.\n";
-		$script_mode = 3;
+		$script_mode = $SYNCDS;
 	}
 	elsif ( $ARGV[0] eq "revalidate" ) {
 		( $log_level >> $DEBUG ) && print "DEBUG Script running in revalidate mode.\n";
-		$script_mode = 4;
+		$script_mode = $REVALIDATE;
 	}
 	else {
 		( $log_level >> $FATAL ) && print "FATAL You did not specify a valid mode. Exiting.\n";
@@ -2652,6 +2658,23 @@ sub scrape_unencode_text {
 	return \@lines;
 }
 
+sub scrape_canned_comments {
+	my $linesin = $_[0];
+
+	my @linesout;
+
+	foreach my $line (@$linesin) {
+		if ( $line =~ m/^\#/ ) {
+			if ( $line =~ m/DO NOT EDIT - Generated for / || $line =~ m/$header_comment/ || $line =~ m/TRAFFIC OPS NOTE\:/ || $line =~ m/^##OVERRID.*##/ ) {
+				next;
+			}
+		}
+		push( @linesout, $line );
+	}
+
+	return \@linesout;
+}
+
 sub can_read_write_file {
 
 	my $filename = shift;
@@ -2709,10 +2732,10 @@ sub open_file_get_contents {
 		$line =~ s/(^\s+|\s+$)//g;
 		chomp($line);
 		( $log_level >> $TRACE ) && print "TRACE Line from cfg file on disk:\t$line.\n";
-		if ( $line =~ m/^\#/ || $line =~ m/^$/ ) {
-			if ( ( $line !~ m/DO NOT EDIT - Generated for / && $line !~ m/$header_comment/ ) && ( $line !~ m/TRAFFIC OPS NOTE\:/ ) && ( $line !~ m/^##OVERRID.*##/ ) ) {
-				next;
-			}
+
+		# strip empty lines
+		if ( $line =~ m/^$/ ) {
+			next;
 		}
 		push( @disk_file_lines, $line );
 	}
@@ -2818,7 +2841,6 @@ sub diff_file_lines {
 		foreach my $line (@db_lines_missing) {
 			( $log_level >> $ERROR ) && print "ERROR Config file $cfg_file line only on disk :\t$line\n";
 		}
-
 	}
 
 	if ( scalar(@disk_lines_missing) ) {
@@ -2827,11 +2849,9 @@ sub diff_file_lines {
 		foreach my $line (@disk_lines_missing) {
 			( $log_level >> $ERROR ) && print "ERROR Config file $cfg_file line only in TrOps:\t$line\n";
 		}
-
 	}
 
 	return ( \@db_lines_missing, \@disk_lines_missing );
-
 }
 
 sub validate_filename {
@@ -2884,7 +2904,6 @@ sub backup_file {
 		close $fh;
 	}
 	return 0;
-
 }
 
 sub adv_preprocessing_remap {