You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by ar...@apache.org on 2009/04/30 20:28:44 UTC

svn commit: r770380 - /incubator/vcl/trunk/managementnode/lib/VCL/reclaim.pm

Author: arkurth
Date: Thu Apr 30 18:28:44 2009
New Revision: 770380

URL: http://svn.apache.org/viewvc?rev=770380&view=rev
Log:
VCL-128
Cleaned up reclaim.pm. Removed unnecessary call to get_next_image_DataStructure() in process(). Removed a few instances of duplicate code which did the same thing as insert_reload_and_exit(). The sub now gets called. 

VCL-119
Removed argument where switch_state() is called in reclaim.pm::insert_reload_and_exit() which sets log.ending to EOR. This was causing the correct log.ending value to be overwritten by EOR.

Modified:
    incubator/vcl/trunk/managementnode/lib/VCL/reclaim.pm

Modified: incubator/vcl/trunk/managementnode/lib/VCL/reclaim.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/reclaim.pm?rev=770380&r1=770379&r2=770380&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/reclaim.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/reclaim.pm Thu Apr 30 18:28:44 2009
@@ -88,52 +88,27 @@
 
 sub process {
 	my $self = shift;
-	my ($package, $filename, $line, $sub) = caller(0);
-
+	
 	# Store hash variables into local variables
 	my $request_data = $self->data->get_request_data;
 
-	my $request_id              = $self->data->get_request_data();
-	my $request_state_name      = $self->data->get_request_state_name();
-	my $request_laststate_name  = $self->data->get_request_laststate_name();
-	my $reservation_id          = $self->data->get_reservation_id();
-	my $reservation_remoteip    = $self->data->get_reservation_remote_ip();
-	my $computer_type           = $self->data->get_computer_type();
-	my $computer_id             = $self->data->get_computer_id();
-	my $computer_shortname      = $self->data->get_computer_short_name();
-	my $computer_hostname       = $self->data->get_computer_host_name();
-	my $computer_ipaddress      = $self->data->get_computer_ip_address();
-	my $computer_state_name     = $self->data->get_computer_state_name();
-	my $image_os_name           = $self->data->get_image_os_name();
-	my $image_os_type                   = $self->data->get_image_os_type();
-	my $imagerevision_imagename = $self->data->get_image_name();
-	my $user_unityid            = $self->data->get_user_login_id();
+	my $request_id                 = $self->data->get_request_data();
+	my $request_state_name         = $self->data->get_request_state_name();
+	my $request_laststate_name     = $self->data->get_request_laststate_name();
+	my $reservation_id             = $self->data->get_reservation_id();
+	my $reservation_remoteip       = $self->data->get_reservation_remote_ip();
+	my $computer_type              = $self->data->get_computer_type();
+	my $computer_id                = $self->data->get_computer_id();
+	my $computer_shortname         = $self->data->get_computer_short_name();
+	my $computer_hostname          = $self->data->get_computer_host_name();
+	my $computer_ipaddress         = $self->data->get_computer_ip_address();
+	my $computer_state_name        = $self->data->get_computer_state_name();
+	my $image_os_name              = $self->data->get_image_os_name();
+	my $image_os_type              = $self->data->get_image_os_type();
+	my $imagerevision_imagename    = $self->data->get_image_name();
+	my $user_unityid               = $self->data->get_user_login_id();
 	my $computer_currentimage_name = $self->data->get_computer_currentimage_name();
 
-	# Retrieve next image
-	# It's possible the results may not get used based on the state of the reservation 
-	my @nextimage;
-
-	if($self->data->can("get_next_image_dataStructure")){
-		@nextimage = $self->data->get_next_image_dataStructure();
-	}
-	else{
-		notify($ERRORS{'WARNING'}, 0, "predictor module does not support get_next_image, calling default get_next_image from utils");
-		@nextimage = get_next_image_default($computer_id);
-	}
-
-	# Assign values to hash for insert reload request
-	# Not necessary to change local variables for active image
-	$request_data->{reservation}{$reservation_id}{imagerevision}{imagename} = $nextimage[0];
-	$request_data->{reservation}{$reservation_id}{image}{id}                = $nextimage[1];
-	$request_data->{reservation}{$reservation_id}{imagerevision}{id}        = $nextimage[2];
-	$request_data->{reservation}{$reservation_id}{imageid}                  = $nextimage[1];
-	$request_data->{reservation}{$reservation_id}{imagerevisionid}          = $nextimage[2];
-
-	my $nextimagename = $nextimage[0];
-	notify($ERRORS{'OK'}, 0, "nextimage results imagename=$nextimage[0] imageid=$nextimage[1] imagerevisionid=$nextimage[2]");
-
-
 	# Insert into computerloadlog if request state = timeout
 	if ($request_state_name =~ /timeout|deleted/) {
 		insertloadlog($reservation_id, $computer_id, $request_state_name, "reclaim: starting $request_state_name process");
@@ -157,17 +132,15 @@
 
 	# Check the computer type
 	# Treat blades and virtual machines the same
-	#    The request will either be changed to "reload" or they will be cleaned
-	#    up based on the OS.
+	# Either a reload request will be inserted or the node will be sanitized
 	# Lab computers only need to have sshd disabled.
 	
 	elsif ($computer_type =~ /blade|virtualmachine/) {
-		notify($ERRORS{'OK'}, 0, "computer type is $computer_type");
+		notify($ERRORS{'DEBUG'}, 0, "computer type is $computer_type");
 
-		# Check if request laststate is reserved
-		# This is the only case where computers will be cleaned and not reloaded
+		# Check if request laststate is reserved - computer should be sanitized and not reloaded because user did not log on
 		if ($request_laststate_name =~ /reserved/) {
-			notify($ERRORS{'OK'}, 0, "request laststate is $request_laststate_name, attempting to clean up computer for next user");
+			notify($ERRORS{'OK'}, 0, "request laststate is $request_laststate_name, attempting to sanitize computer");
 
 			# *** BEGIN MODULARIZED OS CODE ***
 			# Attempt to get the name of the image currently loaded on the computer
@@ -195,25 +168,26 @@
 				}
 			}
 			
-			# Attempt to call modularized OS module's sanitize() subroutine
+			# Attempt to call OS module's sanitize() subroutine
 			# This subroutine should perform all the tasks necessary to sanitize the OS if it was reserved and not logged in to
 			if ($self->os->can("sanitize")) {
-				notify($ERRORS{'OK'}, 0, "calling " . ref($self->os) . "::sanitize() subroutine");
+				notify($ERRORS{'DEBUG'}, 0, "calling " . ref($self->os) . "::sanitize() subroutine");
 				if ($self->os->sanitize()) {
-					notify($ERRORS{'OK'}, 0, "OS has been sanitized on $computer_shortname");
+					notify($ERRORS{'OK'}, 0, "$computer_shortname has been sanitized");
 				}
 				else {
 					# OS module's sanitize() subroutine returned false, meaning reload is necessary
-					notify($ERRORS{'WARNING'}, 0, "failed to sanitize OS on $computer_shortname, computer will be reloaded");
+					notify($ERRORS{'WARNING'}, 0, "failed to sanitize $computer_shortname, computer will be reloaded");
 					$self->insert_reload_and_exit();
 				}
 			}
 			# *** END MODULARIZED OS CODE ***
 	
 			# Check the image OS type and clean up computer accordingly
+			# This whole section should be removed once the original Windows.pm is replaced by Windows_mod.pm
 			elsif ($image_os_type =~ /windows/) {
 				# Loaded Windows image needs to be cleaned up
-				notify($ERRORS{'OK'}, 0, "attempting steps to clean up loaded $image_os_name image");
+				notify($ERRORS{'DEBUG'}, 0, "attempting steps to clean up loaded $image_os_name image");
 
 				# Remove user
 				if (del_user($computer_shortname, $user_unityid, $computer_type, $image_os_name,$image_os_type)) {
@@ -221,25 +195,9 @@
 					insertloadlog($reservation_id, $computer_id, "info", "reclaim: removed user");
 				}
 				else {
-					notify($ERRORS{'WARNING'}, 0, "could not remove user $user_unityid from $computer_shortname, proceed to forced reload");
-
-					# Insert reload request data into the datbase
-					if (insert_reload_request($request_data)) {
-						notify($ERRORS{'OK'}, 0, "inserted reload request into database for computer id=$computer_id imagename=$nextimagename");
-
-						# Switch the request state to complete, leave the computer state as is
-						# Update log ending to EOR
-						# Exit
-						switch_state($request_data, 'complete', '', 'EOR', '1');
-					}
-					else {
-						notify($ERRORS{'CRITICAL'}, 0, "failed to insert reload request into database for computer id=$computer_id imagename=$nextimagename");
-
-						# Switch the request and computer states to failed, log ending to failed, exit
-						switch_state($request_data, 'failed', 'failed', 'failed', '1');
-					}
-					exit;
-				} ## end else [ if (del_user($computer_shortname, $user_unityid...
+					notify($ERRORS{'WARNING'}, 0, "could not remove user $user_unityid from $computer_shortname, computer will be reloaded");
+					$self->insert_reload_and_exit();
+				}
 
 				# Disable RDP
 				if (remotedesktopport($computer_shortname, "DISABLE")) {
@@ -247,52 +205,19 @@
 					insertloadlog($reservation_id, $computer_id, "info", "reclaim: disabled RDP");
 				}
 				else {
-					notify($ERRORS{'WARNING'}, 0, "remote desktop could not be disabled on $computer_shortname");
-
-					# Insert reload request data into the datbase
-					if (insert_reload_request($request_data)) {
-						notify($ERRORS{'OK'}, 0, "inserted reload request into database for computer id=$computer_id imagename=$nextimagename");
-
-						# Switch the request state to complete, leave the computer state as is, log ending to EOR, exit
-						switch_state($request_data, 'complete', '', 'EOR', '1');
-					}
-					else {
-						notify($ERRORS{'CRITICAL'}, 0, "failed to insert reload request into database for computer id=$computer_id imagename=$nextimagename");
-
-						# Switch the request and computer states to failed, log ending to failed, exit
-						switch_state($request_data, 'failed', 'failed', 'failed', '1');
-					}
-					exit;
-				} ## end else [ if (remotedesktopport($computer_shortname,...
-
-				## Stop Tivoli Monitoring
-				#if (system_monitoring($computer_shortname, $imagerevision_imagename, "stop", "ITM")) {
-				#	notify($ERRORS{'OK'}, 0, "ITM monitoring disabled");
-				#}
-			} ## end if ($image_os_name =~ /^(win|vmwarewin|vmwareesxwin)/)
+					notify($ERRORS{'WARNING'}, 0, "remote desktop could not be disabled on $computer_shortname, computer will be reloaded");
+					$self->insert_reload_and_exit();
+				}
+			}
 
 			elsif ($image_os_type =~ /linux/){
 				# Loaded Linux image needs to be cleaned up
 				notify($ERRORS{'OK'}, 0, "attempting steps to clean up loaded $image_os_name image");
 
 				# Make sure user is not connected
-				if (isconnected($computer_shortname, $computer_type, $reservation_remoteip, $image_os_name, $computer_ipaddress,$image_os_type)) {
-					notify($ERRORS{'WARNING'}, 0, "user $user_unityid is connected to $computer_shortname, vm will be reloaded");
-
-					# Insert reload request data into the datbase
-					if (insert_reload_request($request_data)) {
-						notify($ERRORS{'OK'}, 0, "inserted reload request into database for computer id=$computer_id imagename=$nextimagename");
-
-						# Switch the request state to complete, leave the computer state as is, set log ending to EOR, exit
-						switch_state($request_data, 'complete', '', 'EOR', '1');
-					}
-					else {
-						notify($ERRORS{'CRITICAL'}, 0, "failed to insert reload request into database for computer id=$computer_id");
-
-						# Switch the request and computer states to failed, log ending to failed, exit
-						switch_state($request_data, 'failed', 'failed', 'failed', '1');
-					}
-					exit;
+				if (isconnected($computer_shortname, $computer_type, $reservation_remoteip, $image_os_name, $computer_ipaddress, $image_os_type)) {
+					notify($ERRORS{'WARNING'}, 0, "user $user_unityid is connected to $computer_shortname, computer will be reloaded");
+					$self->insert_reload_and_exit();
 				} ## end if (isconnected($computer_shortname, $computer_type...
 
 				# User is not connected, delete the user
@@ -301,73 +226,30 @@
 					insertloadlog($reservation_id, $computer_id, "info", "reclaim: removed user");
 				}
 				else {
-					notify($ERRORS{'OK'}, 0, "user $user_unityid could not be removed from $computer_shortname, vm will be reloaded");
-
-					# Insert reload request data into the datbase
-					if (insert_reload_request($request_data)) {
-						notify($ERRORS{'OK'}, 0, "inserted reload request into database for computer id=$computer_id");
-
-						# Switch the request state to complete, leave the computer state as is, log ending to EOR, exit
-						switch_state($request_data, 'complete', '', 'EOR', '1');
-					}
-					else {
-						notify($ERRORS{'CRITICAL'}, 0, "failed to insert reload request into database for computer id=$computer_id");
-
-						# Switch the request and computer states to failed, log ending to failed, exit
-						switch_state($request_data, 'failed', 'failed', 'failed', '1');
-					}
-					exit;
-				} ## end else [ if (del_user($computer_shortname, $user_unityid...
-			} ## end elsif ($image_os_type =~ /linux/) [ if ($image_os_type =~ /windows/)
+					notify($ERRORS{'OK'}, 0, "user $user_unityid could not be removed from $computer_shortname, computer will be reloaded");
+					$self->insert_reload_and_exit();
+				}
+			}
 
 			else {
 				# Unknown image type
-				notify($ERRORS{'WARNING'}, 0, "unsupported image OS detected: $image_os_name, reload will be attempted");
-
-				# Insert reload request data into the datbase
-				if (insert_reload_request($request_data)) {
-					notify($ERRORS{'OK'}, 0, "inserted reload request into database for computer id=$computer_id");
-
-					# Switch the request state to complete, leave the computer state as is, log ending to EOR, exit
-					switch_state($request_data, 'complete', '', 'EOR', '1');
-				}
-				else {
-					notify($ERRORS{'CRITICAL'}, 0, "failed to insert reload request into database for computer id=$computer_id");
-
-					# Switch the request and computer states to failed, log ending to failed, exit
-					switch_state($request_data, 'failed', 'failed', 'failed', '1');
-				}
-				exit;
-			} ## end else [ if ($image_os_type =~ /windows/) [elsif ($image_os_type =~ /linux/)
-		} ## end if ($request_laststate_name =~ /reserved/)
+				notify($ERRORS{'WARNING'}, 0, "unsupported image OS detected: $image_os_name, computer will be reloaded");
+				$self->insert_reload_and_exit();
+			}
+		}
 
 		else {
-			# Either blade or vm, request laststate is not reserved
+			# Either blade or vm and request laststate is not reserved
 			# Computer should be reloaded
-			notify($ERRORS{'OK'}, 0, "request laststate is $request_laststate_name, reload will be attempted");
-
-			# Insert reload request data into the datbase
-			if (insert_reload_request($request_data)) {
-				notify($ERRORS{'OK'}, 0, "inserted reload request into database for computer id=$computer_id imagename=$nextimagename");
-			}
-			else {
-				notify($ERRORS{'CRITICAL'}, 0, "failed to insert reload request into database for computer id=$computer_id imagename=$nextimagename");
-
-				# Switch the request and computer states to failed, log ending to failed, exit
-				switch_state($request_data, 'failed', 'failed', 'failed', '1');
-			}
-
-			# Switch the request state to complete, leave the computer state as is, log ending to EOR, exit
-			switch_state($request_data, 'complete', '', 'EOR', '1');
-
-		} ## end else [ if ($request_laststate_name =~ /reserved/)
-
-	} ## end elsif ($computer_type =~ /blade|virtualmachine/) [ if ($request_laststate_name =~ /new/)
+			notify($ERRORS{'OK'}, 0, "request laststate is $request_laststate_name, computer will be reloaded");
+			$self->insert_reload_and_exit();
+		}
+	}
 
 	elsif ($computer_type =~ /lab/) {
 		notify($ERRORS{'OK'}, 0, "computer type is $computer_type");
 
-		# Display a warning if laststate is not inuse, or reserved
+		# Display a warning if laststate is not inuse or reserved
 		#    but still try to clean up computer
 		if ($request_laststate_name =~ /inuse|reserved/) {
 			notify($ERRORS{'OK'}, 0, "request laststate is $request_laststate_name");
@@ -398,9 +280,9 @@
 					notify($ERRORS{'CRITICAL'}, 0, "unable to put $computer_shortname into failed state");
 					insertloadlog($reservation_id, $computer_id, "info", "reclaim: unable to set computer state to failed");
 				}
-			} ## end else [ if ($computer_state_name =~ /maintenance/)
-		} ## end else [ if (disablesshd($computer_ipaddress, $user_unityid...
-	} ## end elsif ($computer_type =~ /lab/)  [ if ($request_laststate_name =~ /new/)
+			}
+		}
+	}
 
 	# Unknown computer type, this shouldn't happen
 	else {
@@ -424,28 +306,25 @@
 
 =head2 insert_reload_and_exit
 
- Parameters  : $request_data_hash_reference
- Returns     : 1 if successful, 0 otherwise
- Description : 
+ Parameters  : Reference to state object
+ Returns     : Nothing, process always exits
+ Description : -Retrieves the next image to be loaded on the computer based on a predictive loading algorithm
+					-Inserts a new reload request for the predicted image on the computer
+					-Sets the state of the request being processed to complete
+					-Sets the state of the computer to reload
 
 =cut
 
 sub insert_reload_and_exit {
 	my $self = shift;
-	my $request_data = $self->data->get_request_data;
-	my $reservation_id = $self->data->get_reservation_id();
-	my $computer_id = $self->data->get_computer_id();
+	my $request_data               = $self->data->get_request_data;
+	my $computer_id                = $self->data->get_computer_id();
+	my $computer_host_name         = $self->data->get_computer_hostname();
 	
 	# Retrieve next image
-	my $next_image_name;
-	my $next_image_id;
-	my $next_imagerevision_id;
-	
-	if($self->data->can("get_next_image_dataStructure")){
-		($next_image_name, $next_image_id, $next_imagerevision_id) = $self->data->get_next_image_dataStructure();
-	}
-	else{
-		notify($ERRORS{'WARNING'}, 0, "predictor module does not support get_next_image_dataStructure, calling get_next_image_default from utils");
+	my ($next_image_name, $next_image_id, $next_imagerevision_id) = $self->data->get_next_image_dataStructure();
+	if (!$next_image_name || !$next_image_id || !$next_imagerevision_id) {
+		notify($ERRORS{'WARNING'}, 0, "predictor module did not return required information, calling get_next_image_default from utils");
 		($next_image_name, $next_image_id, $next_imagerevision_id) = get_next_image_default($computer_id);
 	}
 
@@ -455,20 +334,20 @@
 	$self->data->set_image_id($next_image_id);
 	$self->data->set_imagerevision_id($next_imagerevision_id);
 
-	notify($ERRORS{'OK'}, 0, "next image: name=$next_image_name, image id=$next_image_id, imagerevisionid=$next_imagerevision_id");
+	notify($ERRORS{'OK'}, 0, "next image: $next_image_name, image id=$next_image_id, imagerevision id=$next_imagerevision_id");
 	
 	# Insert reload request data into the datbase
 	if (insert_reload_request($request_data)) {
 		notify($ERRORS{'OK'}, 0, "inserted reload request into database for computer id=$computer_id, image=$next_image_name");
 
-		# Switch the request state to complete, leave the computer state as is, log ending to EOR, exit
-		switch_state($request_data, 'complete', '', 'EOR', '1');
+		# Switch the request state to complete, the computer state to reload
+		switch_state($request_data, 'complete', 'reload', '', '1');
 	}
 	else {
 		notify($ERRORS{'CRITICAL'}, 0, "failed to insert reload request into database for computer id=$computer_id image=$next_image_name");
 
-		# Switch the request and computer states to failed, log ending to failed, exit
-		switch_state($request_data, 'failed', 'failed', 'failed', '1');
+		# Switch the request and computer states to failed
+		switch_state($request_data, 'failed', 'failed', '', '1');
 	}
 	
 	# Make sure this VCL state process exits
@@ -496,4 +375,3 @@
 
 =cut
 
-=======