Author: arkurth
Date: Fri Jun 23 20:46:29 2017
New Revision: 1799700

URL: http://svn.apache.org/viewvc?rev=1799700&view=rev
Log:
Reduced unnecessary warnings when checking for competing reservations. Added 
$suppress_warnings argument to utils.pm::get_request_current_state_name, used 
by utils.pm::is_request_deleted. Added additional calls to is_request_deleted 
in new.pm::computer_not_being_used.

Modified:
    vcl/trunk/managementnode/lib/VCL/new.pm
    vcl/trunk/managementnode/lib/VCL/utils.pm

Modified: vcl/trunk/managementnode/lib/VCL/new.pm
URL: 
http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/new.pm?rev=1799700&r1=1799699&r2=1799700&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/new.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/new.pm Fri Jun 23 20:46:29 2017
@@ -669,9 +669,7 @@ sub computer_not_being_used {
                }
                
                # Warn if computer state isn't available or reload - except for 
reinstall requests
-               if ($request_state_name !~ /^(reinstall)$/ && 
$computer_state_name !~ /^(available|reload)$/) {
-                       notify($ERRORS{'WARNING'}, 0, "$computer_short_name 
state is $computer_state_name, checking if any competing reservations are 
active");
-               }
+               notify($ERRORS{'WARNING'}, 0, "$computer_short_name state is 
$computer_state_name, checking if any competing reservations are active");
                
                # Check if there is another request using this machine
                # Get a hash containing all of the reservations for the computer
@@ -734,7 +732,9 @@ sub computer_not_being_used {
                        }
                        
                        # Check if the other reservation is a 'reload' 
reservation for the same image revision
-                       if ($competing_imagerevision_id eq $imagerevision_id && 
$competing_request_state =~ /^(pending|reload)$/ && 
$competing_request_laststate =~ /(reload)/) {
+                       if ($competing_imagerevision_id eq $imagerevision_id &&
+                                $competing_request_state =~ 
/^(pending|reload)$/ &&
+                                $competing_request_laststate =~ /(reload)/) {
                                notify($ERRORS{'OK'}, 0, "reservation 
$competing_reservation_id is assigned to $computer_short_name with the same 
image revision: $image_name, waiting for the other reload process to complete");
                                
                                my $message = "waiting for reload reservation 
$competing_request_id:$competing_reservation_id to finish loading 
$computer_short_name with $image_name";
@@ -746,12 +746,23 @@ sub computer_not_being_used {
                                
                                # Loop until other process is done
                                if ($self->code_loop_timeout(sub{return 
!reservation_being_processed(@_)}, [$competing_reservation_id], $message, 
$total_wait_seconds, $attempt_delay_seconds)) {
-                                       notify($ERRORS{'DEBUG'}, 0, "reload 
reservation $competing_reservation_id is not loading $computer_short_name with 
$image_name");
-                                       # Verified competing 'reload' is not 
being processed verify it is not stuck in pending/reload
-                                       my ($current_competing_request_state, 
$current_competing_request_laststate) = 
get_request_current_state_name($competing_request_id);
-                                       if ($current_competing_request_state eq 
'pending' && $current_competing_request_laststate eq 'reload') {
-                                               notify($ERRORS{'OK'}, 0, "state 
of competing reload request $competing_request_id:$competing_reservation_id is 
$current_competing_request_state/$current_competing_request_laststate, verified 
it is not being processed, changing state of competing request 
$competing_request_id to 'complete'");
-                                               
update_request_state($competing_request_id, 'complete', 'reload');
+                                       # Check if reload request finished and 
was already deleted
+                                       if 
(is_request_deleted($competing_request_id)) {
+                                               notify($ERRORS{'OK'}, 0, 
"reload reservation $competing_request_id:$competing_reservation_id is no 
longer loading $computer_short_name with $image_name, request 
$competing_request_id has been deleted");
+                                       }
+                                       else {
+                                               # Verified competing 'reload' 
is not being processed verify it is not stuck in pending/reload
+                                               notify($ERRORS{'DEBUG'}, 0, 
"reload reservation $competing_request_id:$competing_reservation_id is not 
loading $computer_short_name with $image_name, checking current state of 
request $competing_request_id");
+                                               my 
($current_competing_request_state, $current_competing_request_laststate) = 
get_request_current_state_name($competing_request_id);
+                                               if 
(!defined($current_competing_request_state)) {
+                                                       if 
(is_request_deleted($competing_request_id)) {
+                                                               
notify($ERRORS{'OK'}, 0, "reload request 
$competing_request_id:$competing_reservation_id which was loading 
$computer_short_name with $image_name was just deleted");
+                                                       }
+                                               }
+                                               elsif 
($current_competing_request_state eq 'pending' && 
$current_competing_request_laststate eq 'reload') {
+                                                       notify($ERRORS{'OK'}, 
0, "state of competing reload request 
$competing_request_id:$competing_reservation_id is 
$current_competing_request_state/$current_competing_request_laststate, verified 
it is not being processed, changing state of competing request 
$competing_request_id to 'complete'");
+                                                       
update_request_state($competing_request_id, 'complete', 'reload');
+                                               }
                                        }
                                        
                                        # Try again in order to retrieve a 
current list of competing reservations
@@ -807,7 +818,7 @@ sub computer_not_being_used {
                                                }
                                        }
                                        
-                                       # Kill competing process and update 
request state to complete
+                                       # Kill competing process
                                        notify($ERRORS{'OK'}, 0, "attempting to 
kill process of competing reservation $competing_reservation_id assigned to 
$computer_short_name");
                                        for my $competing_reservation_pid 
(@competing_reservation_pids) {
                                                
$self->mn_os->kill_process($competing_reservation_pid);
@@ -823,6 +834,8 @@ sub computer_not_being_used {
                                        }
                                }
                                
+                               sleep_uninterrupted(5);
+                               
                                # Try again in order to retrieve a current list 
of competing reservations
                                # The list of competing reservations may have 
changed
                                # A new reload reservation may have been added 
by timeout/deleted processes

Modified: vcl/trunk/managementnode/lib/VCL/utils.pm
URL: 
http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/utils.pm?rev=1799700&r1=1799699&r2=1799700&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/utils.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/utils.pm Fri Jun 23 20:46:29 2017
@@ -818,6 +818,21 @@ END
        }
        else {
                open(STDOUT, ">>$log");
+               
+               # ARK - for testing competing reservations
+               if ($ENV{reservation_id}) {
+                       if ($ENV{reservation_id} == 3115) {
+                               print colored($log_message, "YELLOW");
+                       }
+                       elsif ($ENV{reservation_id} == 3116) {
+                               print colored($log_message, "CYAN");
+                       }
+                       else {
+                               print colored($log_message, "MAGENTA");
+                       }
+                       print "\n";
+                       return 1;
+               }
                print STDOUT "$log_message\n";
        }
 } ## end sub notify
@@ -1710,9 +1725,9 @@ sub is_request_deleted {
                return;
        }
        
-       my ($state_name, $laststate_name) = 
get_request_current_state_name($request_id);
+       my ($state_name, $laststate_name) = 
get_request_current_state_name($request_id, 1);
        if (!$state_name || !$laststate_name) {
-               notify($ERRORS{'WARNING'}, 0, "request $request_id state data 
could not be retrieved, assuming request is deleted and was removed from the 
database, returning true");
+               notify($ERRORS{'OK'}, 0, "request $request_id state data could 
not be retrieved, assuming request is deleted and was removed from the 
database, returning true");
                return 1;
        }
        
@@ -5282,7 +5297,7 @@ EOF
 
 =head2 get_request_current_state_name
 
- Parameters  : $request_id
+ Parameters  : $request_id, $suppress_warnings (optional)
  Returns     : String containing state name for a request
  Description :
 
@@ -5290,7 +5305,7 @@ EOF
 
 
 sub get_request_current_state_name {
-       my ($request_id) = @_;
+       my ($request_id, $suppress_warnings) = @_;
 
        # Check the passed parameter
        if (!(defined($request_id))) {
@@ -5315,10 +5330,11 @@ EOF
 
        # Call the database select subroutine
        my @selected_rows = database_select($select_statement);
-
+       
+       my $notify_type = ($suppress_warnings ? $ERRORS{'OK'} : 
$ERRORS{'WARNING'});
        # Check to make sure 1 row was returned
        if (!@selected_rows) {
-               notify($ERRORS{'WARNING'}, 0, "unable to determine current 
state of request $request_id, zero rows were returned from database select");
+               notify($notify_type, 0, "unable to determine current state of 
request $request_id, zero rows were returned from database select");
                return;
        }
        


Reply via email to