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/16 21:09:16 UTC
[18/29] incubator-trafficcontrol git commit: Clarify output,
fix api compatibility, minor adjustments
Clarify output, fix api compatibility, minor adjustments
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/6f0dbc01
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/6f0dbc01
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/6f0dbc01
Branch: refs/heads/master
Commit: 6f0dbc0162d4665d53f9dcc3061fade54fe84970
Parents: 16b4aeb
Author: Derek Gelinas <mr...@gmail.com>
Authored: Fri Mar 3 22:04:13 2017 +0000
Committer: Jeremy Mitchell <mi...@gmail.com>
Committed: Thu Mar 16 15:08:24 2017 -0600
----------------------------------------------------------------------
traffic_ops/bin/traffic_ops_ort.pl | 168 +++++++++++++++++---------------
1 file changed, 92 insertions(+), 76 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/6f0dbc01/traffic_ops/bin/traffic_ops_ort.pl
----------------------------------------------------------------------
diff --git a/traffic_ops/bin/traffic_ops_ort.pl b/traffic_ops/bin/traffic_ops_ort.pl
index a8089c2..d8e8895 100755
--- a/traffic_ops/bin/traffic_ops_ort.pl
+++ b/traffic_ops/bin/traffic_ops_ort.pl
@@ -24,6 +24,7 @@ use MIME::Base64;
use LWP::UserAgent;
use Crypt::SSLeay;
use Getopt::Long;
+use Data::Dumper;
$| = 1;
my $date = `/bin/date`;
@@ -36,6 +37,7 @@ my %supported_el_release = ( "EL6" => 1, "EL7" => 1);
my $dispersion = 300;
my $retries = 5;
my $wait_for_parents = 1;
+my $reval_wait_time = 60;
my $reval_in_use = 0;
GetOptions( "dispersion=i" => \$dispersion, # dispersion (in seconds)
@@ -134,6 +136,7 @@ my $CFG_FILE_PREREQ_FAILED = 3;
my $CFG_FILE_ALREADY_PROCESSED = 4;
#### LWP globals
+my $api_in_use = 1;
my $lwp_conn = &setup_lwp();
my $unixtime = time();
my $hostname_short = `/bin/hostname -s`;
@@ -191,7 +194,7 @@ my $header_comment = &get_header_comment($traffic_ops_host);
my $ats_uid = getpwnam("ats");
#### If this is a syncds run, check to see if we can bail.
-my $syncds_update = undef;
+my $syncds_update = '0';
if ( $script_mode == $REVALIDATE ) {
if ( defined $traffic_ops_host ) {
($syncds_update) = &check_revalidate_state();
@@ -279,6 +282,22 @@ if ( $script_mode != $REPORT ) {
#### Subroutines
####-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-####
+sub revalidate_while_sleeping {
+ $syncds_update = &check_revalidate_state(1);
+ if ( $syncds_update > 0 ) {
+ $script_mode = $REVALIDATE;
+ ( my $my_profile_name, $cfg_file_tracker, my $my_cdn_name ) = &get_cfg_file_list( $hostname_short, $traffic_ops_host, $script_mode );
+
+ &process_config_files();
+
+ &start_restart_services();
+
+ &update_trops();
+
+ $traffic_line_needed = 0;
+ }
+}
+
sub os_version {
my $release = "UNKNOWN";
if (`uname -r` =~ m/.+(el\d)\.x86_64/) {
@@ -295,6 +314,7 @@ sub usage {
print "\t<Mode> = report - prints config differences and exits.\n";
print "\t<Mode> = badass - attempts to fix all config differences that it can.\n";
print "\t<Mode> = syncds - syncs delivery services with what is configured in Traffic Ops.\n";
+ print "\t<Mode> = revalidate - checks for updated revalidations in Traffic Ops and applies them. Requires Traffic Ops 1.2.\n";
print "\n";
print "\t<Log_Level> => ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, NONE\n";
print "\n";
@@ -644,11 +664,6 @@ sub clean_tmp_dirs {
}
sub update_trops {
- my $sleep_override = shift;
-
- if (defined ($sleep_override) ) {
- $syncds_update = $sleep_override;
- }
my $update_result = 0;
if ( $syncds_update == $UPDATE_TROPS_NOTNEEDED ) {
( $log_level >> $DEBUG ) && print "DEBUG Traffic Ops does not require an update at this time.\n";
@@ -696,12 +711,9 @@ sub update_trops {
}
}
elsif ( $script_mode == $BADASS || $script_mode == $SYNCDS ) {
- if ( !defined $reval_pending ) {
+ if ( defined $reval_pending ) {
&send_update_to_trops($CLEAR, $reval_pending );
}
- elsif ( defined($sleep_override) ) {
- &send_update_to_trops($upd_pending, $CLEAR);
- }
else {
&send_update_to_trops($CLEAR, $CLEAR);
}
@@ -753,7 +765,7 @@ sub check_revalidate_state {
my $upd_json = decode_json($upd_ref);
my $reval_pending = ( defined( $upd_json->[0]->{'reval_pending'} ) ) ? $upd_json->[0]->{'reval_pending'} : undef;
if ( !defined($reval_pending) ) {
- ( $log_level >> $ERROR ) && print "ERROR Update URL: $url did not have an reval_pending key. This mode is not compatible with the installed Traffic Ops version.\n";
+ ( $log_level >> $ERROR ) && print "ERROR Update URL: $url did not have an reval_pending key. Separated revalidation requires upgrading to Traffic Ops version 2.1.\n";
return($UPDATE_TROPS_NOTNEEDED);
}
@@ -763,41 +775,12 @@ sub check_revalidate_state {
my $parent_reval_pending = ( defined( $upd_json->[0]->{'parent_reval_pending'} ) ) ? $upd_json->[0]->{'parent_reval_pending'} : undef;
if ( !defined($parent_reval_pending) ) {
- ( $log_level >> $ERROR ) && print "ERROR Update URL: $url did not have an parent_reval_pending key. Unable to continue!\n";
+ ( $log_level >> $ERROR ) && print "ERROR Update URL: $url did not have an parent_reval_pending key. Separated revalidation requires upgrading to Traffic Ops version 2.1. Unable to continue!\n";
return($UPDATE_TROPS_NOTNEEDED);
}
if ( $parent_reval_pending == 1 ) {
( $log_level >> $ERROR ) && print "ERROR Traffic Ops is signaling that my parents need to revalidate.\n";
return($UPDATE_TROPS_NOTNEEDED);
- #if ( $dispersion > 0 ) {
- # ( $log_level >> $WARN ) && print "WARN In revalidate mode, sleeping for " . $dispersion . "s to see if the update my parents need is cleared.\n";
- # for ( my $i = $dispersion; $i > 0; $i-- ) {
- # ( $log_level >> $WARN ) && print ".";
- # sleep 1;
- # }
- #}
- #( $log_level >> $WARN ) && print "\n";
- #$upd_ref = &lwp_get($url);
- #if ( $upd_ref =~ m/^\d{3}$/ ) {
- # ( $log_level >> $ERROR ) && print "ERROR Update URL: $url returned $upd_ref. Exiting, not sure what else to do.\n";
- # exit 1;
- #}
- #$upd_json = decode_json($upd_ref);
- #$parent_reval_pending = ( defined( $upd_json->[0]->{'parent_reval_pending'} ) ) ? $upd_json->[0]->{'parent_reval_pending'} : undef;
- #if ( !defined($parent_reval_pending) ) {
- # ( $log_level >> $ERROR ) && print "ERROR Invalid JSON for $url. Exiting, not sure what else to do.\n";
- # exit 1;
- #}
- #if ( $parent_reval_pending == 1 ) {
- # ( $log_level >> $ERROR ) && print "ERROR My parents still need an update, bailing.\n";
- # exit 1;
- #}
- #else {
- # ( $log_level >> $DEBUG ) && print "DEBUG The update on my parents cleared; continuing.\n";
- #}
- }
- else {
- ( $log_level >> $DEBUG ) && print "DEBUG Traffic Ops is signaling that my parents do not need an update, or wait_for_parents == 0.\n";
}
}
elsif ( $script_mode == $REVALIDATE && $reval_pending != 1 ) {
@@ -805,7 +788,7 @@ sub check_revalidate_state {
return($UPDATE_TROPS_NOTNEEDED);
}
else {
- ( $log_level >> $ERROR ) && print "ERROR Traffic Ops is signaling that no update is waiting to be applied.\n";
+ ( $log_level >> $ERROR ) && print "ERROR Traffic Ops is signaling that no revalidations are waiting to be applied.\n";
}
my $stj = &lwp_get("$traffic_ops_host\/datastatus");
@@ -865,6 +848,9 @@ sub check_syncds_state {
if (defined($reval_pending) ) {
$reval_in_use = 1;
}
+ else {
+ $reval_in_use = 0;
+ }
( $dispersion > 0 ) && &sleep_timer($random_duration);
$upd_ref = &lwp_get($url);
@@ -922,7 +908,7 @@ sub check_syncds_state {
if ( !defined($parent_pending) ) {
( $log_level >> $ERROR ) && print "ERROR Invalid JSON for $url. Exiting, not sure what else to do.\n";
}
- if ( $parent_pending == 1 ) {
+ if ( $parent_pending == 1 || $parent_reval_pending == 1 ) {
( $log_level >> $ERROR ) && print "ERROR My parents still need an update, bailing.\n";
exit 1;
@@ -956,7 +942,7 @@ sub check_syncds_state {
if ( !defined($parent_pending) ) {
( $log_level >> $ERROR ) && print "ERROR Invalid JSON for $url. Exiting, not sure what else to do.\n";
}
- if ( $parent_pending == 1 ) {
+ if ( $parent_pending == 1 || $parent_reval_pending == 1 ) {
( $log_level >> $ERROR ) && print "ERROR My parents still need an update, bailing.\n";
exit 1;
@@ -1037,36 +1023,41 @@ sub check_syncds_state {
sub sleep_timer {
my $duration = shift;
+ my $reval_clock = $reval_wait_time;
my $proper_script_mode = $script_mode;
-
- ( $log_level >> $WARN ) && print "WARN Sleeping for $duration seconds: ";
-
- my $reval_clock = 60;
+
+ if ( $reval_in_use == 1 ) {
+ ( $log_level >> $WARN ) && print "WARN Performing a revalidation check before sleeping... \n";
+ &revalidate_while_sleeping();
+ ( $log_level >> $WARN ) && print "WARN Revalidation check complete.\n";
+ }
+ if ( $duration < $reval_clock || $reval_in_use == 0 ) {
+ ( $log_level >> $WARN ) && print "WARN Sleeping for $duration seconds: ";
+ }
+ else {
+ ( $log_level >> $WARN ) && print "WARN $reval_clock seconds until next revalidation check.\n";
+ ( $log_level >> $WARN ) && print "WARN $duration seconds remaining in dispersion sleep period\n";
+ ( $log_level >> $WARN ) && print "WARN Sleeping for $reval_clock seconds: ";
+ }
for ( my $i = $duration; $i > 0; $i-- ) {
( $log_level >> $WARN ) && print ".";
sleep 1;
- $reval_clock++;
- if ($reval_clock > 60 && $script_mode != $BADASS ) {
+ $reval_clock--;
+ if ($reval_clock < 1 && $script_mode != $BADASS && $reval_in_use == 1 ) {
( $log_level >> $WARN ) && print "\n";
- ( $log_level >> $WARN ) && print "WARN Pausing dispersion sleep period for revalidation check. \n";
- my $reval_update = 0;
- $reval_update = &check_revalidate_state(1);
- if ( $reval_update > 0 ) {
- ( my $my_profile_name, $cfg_file_tracker, my $my_cdn_name ) = &get_cfg_file_list( $hostname_short, $traffic_ops_host, $REVALIDATE );
-
- &process_config_files();
-
- &update_trops($reval_update);
-
- &start_restart_services();
-
- $traffic_line_needed = 0;
+ ( $log_level >> $WARN ) && print "WARN Interrupting dispersion sleep period for revalidation check. \n";
+ &revalidate_while_sleeping();
+ $reval_clock = $reval_wait_time;
+ if ($reval_clock < $i ) {
+ ( $log_level >> $WARN ) && print "WARN Revalidation check complete. $reval_clock seconds until next revalidation check.\n";
+ ( $log_level >> $WARN ) && print "WARN $i seconds remaining in dispersion sleep period\n";
+ ( $log_level >> $WARN ) && print "WARN Sleeping for $reval_clock seconds: ";
+ }
+ else {
+ ( $log_level >> $WARN ) && print "WARN Revalidation check complete. $i seconds remaining in dispersion sleep period.\n";
+ ( $log_level >> $WARN ) && print "WARN Sleeping for $i seconds: ";
}
-
- $reval_clock = 1;
-
- ( $log_level >> $WARN ) && print "WARN Revalidate pass complete. $i seconds remaining in dispersion period: ";
}
}
@@ -1417,6 +1408,9 @@ sub lwp_get {
if ( &check_lwp_response_code($response, $ERROR) || &check_lwp_response_content_length($response, $ERROR) ) {
( $log_level >> $ERROR ) && print "ERROR result for $url is: ..." . $response->content . "...\n";
+ if ( $url =~ m/configfiles\/ats/) {
+ return $response->code;
+ }
sleep 2**( $retries - $retry_counter );
$retry_counter--;
}
@@ -1708,11 +1702,26 @@ sub get_cfg_file_list {
my $result = &lwp_get($url);
+ if ($result =~ "404") {
+ $api_in_use = 0;
+ $url = "$tm_host/ort/$host_name/ort1";
+ $result = &lwp_get($url);
+ }
+
my $ort_ref = decode_json($result);
- $profile_name = $ort_ref->{'info'}->{'profile_name'};
- ( $log_level >> $INFO ) && printf("INFO Found profile from Traffic Ops: $profile_name\n");
- $cdn_name = $ort_ref->{'info'}->{'cdn_name'};
- ( $log_level >> $INFO ) && printf("INFO Found CDN_name from Traffic Ops: $cdn_name\n");
+
+ if ($api_in_use == '1') {
+ $profile_name = $ort_ref->{'info'}->{'profile_name'};
+ ( $log_level >> $INFO ) && printf("INFO Found profile from Traffic Ops: $profile_name\n");
+ $cdn_name = $ort_ref->{'info'}->{'cdn_name'};
+ ( $log_level >> $INFO ) && printf("INFO Found CDN_name from Traffic Ops: $cdn_name\n");
+ }
+ else {
+ $profile_name = $ort_ref->{'profile'}->{'name'};
+ ( $log_level >> $INFO ) && printf("INFO Found profile from Traffic Ops: $profile_name\n");
+ $cdn_name = $ort_ref->{'other'}->{'CDN_name'};
+ ( $log_level >> $INFO ) && printf("INFO Found CDN_name from Traffic Ops: $cdn_name\n");
+ }
if ( $script_mode == $REVALIDATE ) {
foreach my $cfg_file ( keys %{ $ort_ref->{'config_files'} } ) {
if ( $cfg_file eq "regex_revalidate.config" ) {
@@ -1720,7 +1729,9 @@ sub get_cfg_file_list {
( $log_level >> $INFO )
&& printf( "INFO Found config file (on disk: %-41s): %-41s with location: %-50s\n", $fname_on_disk, $cfg_file, $ort_ref->{'config_files'}->{$cfg_file}->{'location'} );
$cfg_files->{$fname_on_disk}->{'location'} = $ort_ref->{'config_files'}->{$cfg_file}->{'location'};
- $cfg_files->{$fname_on_disk}->{'API_URI'} = $ort_ref->{'config_files'}->{$cfg_file}->{'API_URI'};
+ if ($api_in_use == '1') {
+ $cfg_files->{$fname_on_disk}->{'API_URI'} = $ort_ref->{'config_files'}->{$cfg_file}->{'API_URI'};
+ }
$cfg_files->{$fname_on_disk}->{'fname-in-TO'} = $cfg_file;
}
}
@@ -1731,7 +1742,9 @@ sub get_cfg_file_list {
( $log_level >> $INFO )
&& printf( "INFO Found config file (on disk: %-41s): %-41s with location: %-50s\n", $fname_on_disk, $cfg_file, $ort_ref->{'config_files'}->{$cfg_file}->{'location'} );
$cfg_files->{$fname_on_disk}->{'location'} = $ort_ref->{'config_files'}->{$cfg_file}->{'location'};
- $cfg_files->{$fname_on_disk}->{'API_URI'} = $ort_ref->{'config_files'}->{$cfg_file}->{'API_URI'};
+ if ($api_in_use == '1') {
+ $cfg_files->{$fname_on_disk}->{'API_URI'} = $ort_ref->{'config_files'}->{$cfg_file}->{'API_URI'};
+ }
$cfg_files->{$fname_on_disk}->{'fname-in-TO'} = $cfg_file;
}
}
@@ -2295,7 +2308,7 @@ sub start_restart_services {
if ( $script_mode == $REPORT ) {
( $log_level >> $ERROR ) && print "ERROR ATS configuration has changed. '$TRAFFIC_LINE -x' needs to be run.\n";
}
- elsif ( $script_mode == $BADASS || $script_mode == $SYNCDS ) {
+ elsif ( $script_mode == $BADASS || $script_mode == $SYNCDS || $script_mode == $REVALIDATE ) {
( $log_level >> $ERROR ) && print "ERROR ATS configuration has changed. Running '$TRAFFIC_LINE -x' now.\n";
&run_traffic_line();
}
@@ -2422,8 +2435,11 @@ sub set_url {
my $filename = shift;
my $filepath = $cfg_file_tracker->{$filename}->{'location'};
- my $URI = $cfg_file_tracker->{$filename}->{'API_URI'};
- if ( !defined($URI) ) {
+ my $URI;
+ if ( $api_in_use == '1' && defined($cfg_file_tracker->{$filename}->{'API_URI'}) ) {
+ $URI = $cfg_file_tracker->{$filename}->{'API_URI'};
+ }
+ else {
$URI = "\/genfiles\/view\/$hostname_short\/" . $cfg_file_tracker->{$filename}->{'fname-in-TO'};
}