Author: arkurth Date: Mon Jul 18 18:45:32 2011 New Revision: 1148003 URL: http://svn.apache.org/viewvc?rev=1148003&view=rev Log: VCL-484 Updated switch_state to not set inuse and image requests to the failed state.
Other Added management node short name to the subject for critical notifications. Added ConnectionAttempts=1 and ConnectTimeout=3 to SSH options. Modified: incubator/vcl/trunk/managementnode/lib/VCL/utils.pm Modified: incubator/vcl/trunk/managementnode/lib/VCL/utils.pm URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/utils.pm?rev=1148003&r1=1148002&r2=1148003&view=diff ============================================================================== --- incubator/vcl/trunk/managementnode/lib/VCL/utils.pm (original) +++ incubator/vcl/trunk/managementnode/lib/VCL/utils.pm Mon Jul 18 18:45:32 2011 @@ -713,7 +713,8 @@ END # Add the formatted data to the message body if data was passed $body .= "\n\nDATA:\n$formatted_data\n" if $formatted_data; - my $subject = "PROBLEM -- "; + my ($management_node_short_name) = $FQDN =~ /^([^.]+)/; + my $subject = "PROBLEM -- $management_node_short_name|"; # Assemble the process identifier string if (defined $ENV{request_id} && defined $ENV{reservation_id} && defined $ENV{state}) { @@ -1105,9 +1106,9 @@ sub check_time { } ## end else [ if ($start_diff_minutes > 0) } ## end if ($request_state_name =~ /new|imageprep|reload|tomaintenance|tovmhostinuse/) - elsif ($request_state_name =~ /inuse|imageinuse/) { + elsif ($request_state_name =~ /inuse/) { if ($end_diff_minutes <= 10) { - #notify($ERRORS{'DEBUG'}, 0, "reservation will end in 10 minutes or less ($end_diff_minutes)"); + notify($ERRORS{'DEBUG'}, 0, "reservation will end in 10 minutes or less ($end_diff_minutes)"); return "end"; } else { @@ -1740,10 +1741,10 @@ sub check_connection { } ## end elsif ($osname =~ /rhel/) [ if ($osname =~ /sun4x_/) } #foreach } #if lab - } #else - #sleep 30; + } + notify($ERRORS{'DEBUG'}, 0, "sleeping for 20 seconds"); sleep 20; - } #while + } return $ret_val; } ## end sub check_connection @@ -4497,8 +4498,8 @@ sub get_request_info { $request_info{reservation}{$reservation_id}{$original_key} = $value; } elsif ($key =~ /serverrequest_/) { - $request_info{reservation}{$reservation_id}{serverrequest}{$original_key} = $value; - } + $request_info{reservation}{$reservation_id}{serverrequest}{$original_key} = $value; + } } # Close foreach key in reservation row # Retrieve the image, imagerevision, and computer info and add to the hash @@ -5498,7 +5499,7 @@ sub run_ssh_command { # -p <port>, Port to connect to on the remote host. # -x, Disables X11 forwarding. # Dont use: -q, Quiet mode. Causes all warning and diagnostic messages to be suppressed. - my $ssh_command = "$ssh_path $identity_paths -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -l $user -p $port -x $node '$command' 2>&1"; + my $ssh_command = "$ssh_path $identity_paths -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectionAttempts=1 -o ConnectTimeout=3 -l $user -p $port -x $node '$command' 2>&1"; # Execute the command my $ssh_output; @@ -5512,7 +5513,7 @@ sub run_ssh_command { # Delay performing next attempt if this isn't the first attempt if ($attempts > 1) { - my $delay_seconds = 2; + my $delay_seconds = (2 * ($attempts - 1)); notify($ERRORS{'DEBUG'}, 0, "sleeping for $delay_seconds seconds before making next SSH attempt") if $output_level; sleep $delay_seconds; } @@ -7447,16 +7448,27 @@ sub switch_state { notify($ERRORS{'DEBUG'}, 0, "child: parent reservation ID for this request: $parent_reservation_id"); $is_parent_reservation = 0; } - - # Update the notify prefix now that we have request info - my $notify_prefix = "req=$request_id:"; + + # Don't set request state to failed if previous state is image or inuse + if ($request_state_name_new && $request_state_name_new eq 'failed') { + if ($request_state_name_old eq 'image') { + notify($ERRORS{'DEBUG'}, 0, "previous request state is $request_state_name_old, not setting request state to $request_state_name_new, setting request state to maintenance"); + $request_state_name_new = 'maintenance'; + $computer_state_name_new = 'maintenance'; + } + elsif ($request_state_name_old eq 'inuse') { + notify($ERRORS{'DEBUG'}, 0, "previous request state is $request_state_name_old, not setting request state to $request_state_name_new, setting request state back to $request_state_name_old"); + $request_state_name_new = 'inuse'; + $computer_state_name_new = 'inuse'; + } + } # Check if new request state was passed if (!$request_state_name_new) { - notify($ERRORS{'DEBUG'}, 0, "$notify_prefix request state was not specified, state not changed"); + notify($ERRORS{'DEBUG'}, 0, "request state was not specified, state not changed"); } elsif (!$is_parent_reservation) { - notify($ERRORS{'DEBUG'}, 0, "$notify_prefix child reservation, request state not changed"); + notify($ERRORS{'DEBUG'}, 0, "child reservation, request state not changed"); } else { # Add an entry to the loadlog @@ -7464,18 +7476,18 @@ sub switch_state { # Update the request state to $request_state_name_new and set laststate to current state if (update_request_state($request_id, $request_state_name_new, $request_state_name_old)) { - notify($ERRORS{'OK'}, 0, "$notify_prefix request state changed: $request_state_name_old->$request_state_name_new, laststate: $request_laststate_name_old->$request_state_name_old"); + notify($ERRORS{'OK'}, 0, "request state changed: $request_state_name_old->$request_state_name_new, laststate: $request_laststate_name_old->$request_state_name_old"); insertloadlog($reservation_id, $computer_id, "info", "$caller: request state changed to $request_state_name_new, laststate to $request_state_name_old"); } else { - notify($ERRORS{'WARNING'}, 0, "$notify_prefix request state could not be changed: $request_state_name_old --> $request_state_name_new, laststate: $request_laststate_name_old->$request_state_name_old"); + notify($ERRORS{'WARNING'}, 0, "request state could not be changed: $request_state_name_old --> $request_state_name_new, laststate: $request_laststate_name_old->$request_state_name_old"); insertloadlog($reservation_id, $computer_id, "info", "$caller: unable to change request state to $request_state_name_new, laststate to $request_state_name_old"); } } ## end else [ if (!$request_state_name_new) [elsif (!$is_parent_reservation) # Update the computer state if (!$computer_state_name_new) { - notify($ERRORS{'DEBUG'}, 0, "$notify_prefix computer state not specified, $computer_shortname state not changed"); + notify($ERRORS{'DEBUG'}, 0, "computer state not specified, $computer_shortname state not changed"); } else { # Add an entry to the loadlog @@ -7483,36 +7495,36 @@ sub switch_state { # Update the computer state if (update_computer_state($computer_id, $computer_state_name_new)) { - notify($ERRORS{'OK'}, 0, "$notify_prefix computer $computer_shortname state changed: $computer_state_name_old->$computer_state_name_new"); + notify($ERRORS{'OK'}, 0, "computer $computer_shortname state changed: $computer_state_name_old->$computer_state_name_new"); } else { - notify($ERRORS{'CRITICAL'}, 0, "$notify_prefix unable to computer $computer_shortname state: $computer_state_name_old->$computer_state_name_new"); + notify($ERRORS{'CRITICAL'}, 0, "unable to computer $computer_shortname state: $computer_state_name_old->$computer_state_name_new"); } } ## end else [ if (!$computer_state_name_new) # Update log table for this request # Ending can be deleted, released, failed, noack, nologin, timeout, EOR, none if (!$request_log_ending) { - notify($ERRORS{'DEBUG'}, 0, "$notify_prefix log table id=$request_logid will not be updated"); + notify($ERRORS{'DEBUG'}, 0, "log table id=$request_logid will not be updated"); } elsif (!$is_parent_reservation) { - notify($ERRORS{'DEBUG'}, 0, "$notify_prefix child reservation, log table id=$request_logid will not be updated"); + notify($ERRORS{'DEBUG'}, 0, "child reservation, log table id=$request_logid will not be updated"); } elsif (update_log_ending($request_logid, $request_log_ending)) { - notify($ERRORS{'OK'}, 0, "$notify_prefix log table id=$request_logid, ending set to $request_log_ending"); + notify($ERRORS{'OK'}, 0, "log table id=$request_logid, ending set to $request_log_ending"); } else { - notify($ERRORS{'CRITICAL'}, 0, "$notify_prefix unable to set log table id=$request_logid, ending to $request_log_ending"); + notify($ERRORS{'CRITICAL'}, 0, "unable to set log table id=$request_logid, ending to $request_log_ending"); } # Call exit if the state changed, return otherwise if ($exit) { insertloadlog($reservation_id, $computer_id, "info", "$caller: process exiting"); - notify($ERRORS{'OK'}, 0, "$notify_prefix process exiting"); + notify($ERRORS{'OK'}, 0, "process exiting"); exit; } else { - notify($ERRORS{'OK'}, 0, "$notify_prefix returning"); + notify($ERRORS{'OK'}, 0, "returning"); return; }