You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ro...@apache.org on 2018/05/01 15:10:20 UTC
[incubator-trafficcontrol] 02/02: modifies ORT to correctly parse
api 1.3 for revalidation. Exits if Traffic Ops 2.2 is not present - not
backward compatible.
This is an automated email from the ASF dual-hosted git repository.
rob pushed a commit to branch 2.2.x
in repository https://gitbox.apache.org/repos/asf/incubator-trafficcontrol.git
commit 3dec97f5577514e8ea21c26959562afdb0297245
Author: Derek Gelinas <mr...@gmail.com>
AuthorDate: Fri Apr 20 11:32:08 2018 -0400
modifies ORT to correctly parse api 1.3 for revalidation. Exits if Traffic Ops 2.2 is not present - not backward compatible.
(cherry picked from commit a77bb7433521a549a286d42c42544043e814947d)
---
traffic_ops/bin/traffic_ops_ort.pl | 100 ++++++++++++++-----------------------
1 file changed, 38 insertions(+), 62 deletions(-)
diff --git a/traffic_ops/bin/traffic_ops_ort.pl b/traffic_ops/bin/traffic_ops_ort.pl
index 32d25ba..7fe99c5 100755
--- a/traffic_ops/bin/traffic_ops_ort.pl
+++ b/traffic_ops/bin/traffic_ops_ort.pl
@@ -707,19 +707,7 @@ sub update_trops {
}
if ($update_result) {
#need to know if reval_pending is supported
- my $uri = "/api/1.3/servers/$hostname_short/update_status";
- my $upd_ref = &lwp_get($uri);
- if ($upd_ref eq '404') {
- ( $log_level >> $ERROR ) && printf("ERROR Traffic Ops version does not support update_status API. Reverting to UI route.\n");
- $uri = "/update/$hostname_short";
- $upd_ref = &lwp_get($uri);
- }
-
- if ( $upd_ref =~ m/^\d{3}$/ ) {
- ( $log_level >> $ERROR ) && print "ERROR Update URL: $uri returned $upd_ref. Exiting, not sure what else to do.\n";
- exit 1;
- }
- my $upd_json = decode_json($upd_ref);
+ my ($upd_json, $uri) = get_update_status();
my $upd_pending = ( defined( $upd_json->[0]->{'upd_pending'} ) ) ? $upd_json->[0]->{'upd_pending'} : undef;
my $reval_pending = ( defined( $upd_json->[0]->{'reval_pending'} ) ) ? $upd_json->[0]->{'reval_pending'} : undef;
@@ -773,6 +761,32 @@ sub get_print_current_client_connections {
( $log_level >> $DEBUG ) && print "DEBUG There are currently $current_connections connections.\n";
}
+sub get_update_status {
+ my $uri = "/api/1.3/servers/$hostname_short/update_status";
+ my $upd_ref = &lwp_get($uri);
+ if ($upd_ref eq '404') {
+ ( $log_level >> $ERROR ) && printf("ERROR ORT version incompatible with current version of Traffic Ops. Please upgrade to Traffic Ops 2.2.\n");
+ exit 1;
+ }
+
+ if ( $upd_ref =~ m/^\d{3}$/ ) {
+ ( $log_level >> $ERROR ) && print "ERROR Update URL: $uri returned $upd_ref. Exiting, not sure what else to do.\n";
+ exit 1;
+ }
+
+ my $upd_json = decode_json($upd_ref);
+
+ ##Some versions of Traffic Ops had the 1.3 API but did not have the use_reval_pending field. If this field is not present, exit.
+ if ( !defined( $upd_json->[0]->{'use_reval_pending'} ) ) {
+ ( $log_level >> $ERROR ) && printf("ERROR ORT version incompatible with current version of Traffic Ops. Please upgrade to Traffic Ops 2.2.\n");
+ exit 1;
+ }
+
+ $reval_in_use = $upd_json->[0]->{'use_reval_pending'};
+
+ return ($upd_json, $uri);
+}
+
sub check_revalidate_state {
my $sleep_override = shift;
@@ -781,33 +795,21 @@ sub check_revalidate_state {
( $log_level >> $DEBUG ) && print "DEBUG Checking revalidate state.\n";
if ( $script_mode == $REVALIDATE || $sleep_override == 1 ) {
## The herd is about to get /update/<hostname>
- my $uri = "/api/1.3/servers/$hostname_short/update_status";
- my $upd_ref = &lwp_get($uri);
- if ($upd_ref eq '404') {
- ( $log_level >> $ERROR ) && printf("ERROR Traffic Ops version does not support update_status API. Reverting to UI route.\n");
- $uri = "/update/$hostname_short";
- $upd_ref = &lwp_get($uri);
- }
- if ( $upd_ref =~ m/^\d{3}$/ ) {
- ( $log_level >> $ERROR ) && print "ERROR Update URL: $uri returned $upd_ref. Exiting, not sure what else to do.\n";
- exit 1;
- }
+ my ($upd_json, $uri) = get_update_status();
- 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: $uri did not have an reval_pending key. Separated revalidation requires upgrading to Traffic Ops version 2.1.\n";
+ if ( $reval_in_use == 0 ) {
+ ( $log_level >> $ERROR ) && print "ERROR Update URL: Instant invalidate is not enabled. Separated revalidation requires upgrading to Traffic Ops version 2.2 and enabling this feature.\n";
return($UPDATE_TROPS_NOTNEEDED);
}
-
+ my $reval_pending = $upd_json->[0]->{'reval_pending'};
if ( $reval_pending == 1 ) {
( $log_level >> $ERROR ) && print "ERROR Traffic Ops is signaling that a revalidation is waiting to be applied.\n";
$syncds_update = $UPDATE_TROPS_NEEDED;
- my $parent_reval_pending = ( defined( $upd_json->[0]->{'parent_reval_pending'} ) ) ? $upd_json->[0]->{'parent_reval_pending'} : undef;
+ my $parent_reval_pending = $upd_json->[0]->{'parent_reval_pending'};
if ( !defined($parent_reval_pending) ) {
- ( $log_level >> $ERROR ) && print "ERROR Update URL: $uri did not have an parent_reval_pending key. Separated revalidation requires upgrading to Traffic Ops version 2.1. Unable to continue!\n";
+ ( $log_level >> $ERROR ) && print "ERROR Update URL: $uri did not have an parent_reval_pending key. Separated revalidation requires upgrading to Traffic Ops version 2.2. Unable to continue!\n";
return($UPDATE_TROPS_NOTNEEDED);
}
if ( $parent_reval_pending == 1 ) {
@@ -873,30 +875,9 @@ sub check_syncds_state {
if ( $script_mode == $SYNCDS || $script_mode == $BADASS || $script_mode == $REPORT ) {
## The herd is about to get /update/<hostname>
## need to check if revalidation is being used first.
- my $uri = "/api/1.3/servers/$hostname_short/update_status";
- my $upd_ref = &lwp_get($uri);
- if ($upd_ref eq '404') {
- ( $log_level >> $ERROR ) && printf("ERROR Traffic Ops version does not support update_status API. Reverting to UI route.\n");
- $uri = "/update/$hostname_short";
- $upd_ref = &lwp_get($uri);
- }
- 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) ) {
- $reval_in_use = 1;
- }
- else {
- $reval_in_use = 0;
- }
-
- $upd_ref = &lwp_get($uri);
- if ( $upd_ref =~ m/^\d{3}$/ ) {
- ( $log_level >> $ERROR ) && print "ERROR Update URL: $uri returned $upd_ref. Exiting, not sure what else to do.\n";
- exit 1;
- }
+ my ($upd_json, $uri) = get_update_status();
- $upd_json = decode_json($upd_ref);
my $upd_pending = ( defined( $upd_json->[0]->{'upd_pending'} ) ) ? $upd_json->[0]->{'upd_pending'} : undef;
if ( !defined($upd_pending) ) {
( $log_level >> $ERROR ) && print "ERROR Update URL: $uri did not have an upd_pending key.\n";
@@ -933,12 +914,8 @@ sub check_syncds_state {
( $log_level >> $WARN ) && print "WARN In syncds mode, sleeping for " . $dispersion . "s to see if the update my parents need is cleared.\n";
( $dispersion > 0 ) && &sleep_timer($dispersion);
}
- $upd_ref = &lwp_get($uri);
- if ( $upd_ref =~ m/^\d{3}$/ ) {
- ( $log_level >> $ERROR ) && print "ERROR Update URL: $uri returned $upd_ref. Exiting, not sure what else to do.\n";
- exit 1;
- }
- $upd_json = decode_json($upd_ref);
+ ($upd_json, $uri) = get_update_status();
+
$parent_pending = ( defined( $upd_json->[0]->{'parent_pending'} ) ) ? $upd_json->[0]->{'parent_pending'} : undef;
if ( !defined($parent_pending) ) {
( $log_level >> $ERROR ) && print "ERROR Invalid JSON for $uri. Exiting, not sure what else to do.\n";
@@ -1778,9 +1755,8 @@ sub get_cfg_file_list {
if ($result eq '404') {
$api_in_use = 0;
- ( $log_level >> $ERROR ) && printf("ERROR Traffic Ops version does not support config files API. Reverting to UI route.\n");
- $uri = "/ort/$host_name/ort1";
- $result = &lwp_get($uri);
+ ( $log_level >> $ERROR ) && printf("ERROR Traffic Ops version does not support config files API. Please upgrade to Traffic Ops 2.2.\n");
+ exit 1;
}
my $ort_ref = decode_json($result);
--
To stop receiving notification emails like this one, please contact
rob@apache.org.