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 2015/02/11 00:54:39 UTC

svn commit: r1658844 - in /vcl/trunk/managementnode/lib/VCL: Module/State.pm utils.pm

Author: arkurth
Date: Tue Feb 10 23:54:39 2015
New Revision: 1658844

URL: http://svn.apache.org/r1658844
Log:
VCL-816
Added "-n" switch to the command in utils.pm::nmap_port. This causes the command to run much faster.

VCL-16
Changed utils.pm::get_request_info to use cached info by default. For large cluster requests, each reservation process was retrieving the same image and other information over and over - n-squared problem.

VCL-174
Removed section from utils.pm::get_request_info which populates the natport table. This was being done by every cluster reservation for all other cluster reservations. Moved to State.pm::initialize.

Updated utils.pm::get_computer_info to only call get_computer_nathost_info if a nathostcomputermap entry exists for the computer.

Modified:
    vcl/trunk/managementnode/lib/VCL/Module/State.pm
    vcl/trunk/managementnode/lib/VCL/utils.pm

Modified: vcl/trunk/managementnode/lib/VCL/Module/State.pm
URL: http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/Module/State.pm?rev=1658844&r1=1658843&r2=1658844&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/State.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/Module/State.pm Tue Feb 10 23:54:39 2015
@@ -114,6 +114,16 @@ sub initialize {
 		$self->data->set_reservation_lastcheck_time($reservation_lastcheck);
 	}
 	
+	# Populate natport table for reservation
+	if ($nathost_id && $request_state_name =~ /(new|reserved|modified|test)/) {
+		if (!populate_reservation_natport($reservation_id)) {
+			$self->reservation_failed("failed to populate natport table for reservation");
+		}
+		if (!update_reservation_natlog($reservation_id)) {
+			notify($ERRORS{'CRITICAL'}, 0, "failed to populate natlog table for reservation");
+		}
+	}
+	
 	# If this is a cluster request, wait for all reservations to begin before proceeding
 	if ($reservation_count > 1) {
 		if (!$self->wait_for_all_reservations_to_begin('begin', 300, 30)) {

Modified: vcl/trunk/managementnode/lib/VCL/utils.pm
URL: http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/utils.pm?rev=1658844&r1=1658843&r2=1658844&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/utils.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/utils.pm Tue Feb 10 23:54:39 2015
@@ -2182,8 +2182,9 @@ sub nmap_port {
 	my $remote_connection_target = determine_remote_connection_target($hostname);
 	my $hostname_string = $remote_connection_target;
 	$hostname_string .= " ($hostname)" if ($hostname ne $remote_connection_target);
-	
-	my $command = "/usr/bin/nmap $remote_connection_target -P0 -p $port -T Aggressive";
+
+	my $command = "/usr/bin/nmap $remote_connection_target -P0 -p $port -T Aggressive -n";
+
 	my ($exit_status, $output) = run_command($command, 1);
 	if (!defined($output)) {
 		notify($ERRORS{'WARNING'}, 0, "failed to run nmap command on management node: '$command'");
@@ -2973,9 +2974,9 @@ sub get_request_info {
 		return;
 	}
 	
-	# Don't use cached info by default
-	if (!defined($no_cache)) {
-		$no_cache = 1;
+	# Use cached info by default
+	if (!$no_cache) {
+		$no_cache = 0;
 	}
 	
 	# Get a hash ref containing the database column names
@@ -3086,21 +3087,6 @@ EOF
 		my $computer_info = get_computer_info($computer_id, $no_cache);
 		$request_info->{reservation}{$reservation_id}{computer} = $computer_info;
 		
-		# Populate natport table for reservation
-		# Make sure this wasn't called from populate_reservation_natport or else recursive loop will occur
-		my $caller_trace = get_caller_trace(5);
-		if ($caller_trace !~ /populate_reservation_natport/) {
-			my $request_state_name = $request_info->{state}{name};
-			if ($request_state_name =~ /(new|reserved|modified|test)/) {
-				if (!populate_reservation_natport($reservation_id)) {
-					notify($ERRORS{'CRITICAL'}, 0, "failed to populate natport table for reservation");
-				}
-				if (!update_reservation_natlog($reservation_id)) {
-					notify($ERRORS{'CRITICAL'}, 0, "failed to populate natlog table for reservation");
-				}
-			}
-		}
-		
 		# Add the connect method info to the hash
 		my $connect_method_info = get_connect_method_info($imagerevision_id, 0);
 		$request_info->{reservation}{$reservation_id}{connect_methods} = $connect_method_info;
@@ -3981,7 +3967,7 @@ EOF
 	
 	# Get the vmhost computer info and add it to the hash
 	my $computer_id = $vmhost_info->{computerid};
-	my $computer_info = get_computer_info($computer_id);
+	my $computer_info = get_computer_info($computer_id, $no_cache);
 	if ($computer_info) {
 		$vmhost_info->{computer} = $computer_info;
 	}
@@ -6989,7 +6975,7 @@ sub get_computer_info {
 	if (!$no_cache && defined($ENV{computer_info}{$computer_identifier})) {
 		return $ENV{computer_info}{$computer_identifier};
 	}
-	notify($ERRORS{'DEBUG'}, 0, "retrieving info for computer $computer_identifier");
+	#notify($ERRORS{'DEBUG'}, 0, "retrieving info for computer $computer_identifier");
 	
 	# Get a hash ref containing the database column names
 	my $database_table_columns = get_database_table_columns();
@@ -7003,6 +6989,7 @@ sub get_computer_info {
 		'platform',
 		'resource',
 		'resourcetype',
+		'nathostcomputermap'
 	);
 	
 	# Construct the select statement
@@ -7051,6 +7038,7 @@ ON (
 	AND resource.resourcetypeid = resourcetype.id
 	AND resourcetype.name = 'computer'
 )
+LEFT JOIN (nathostcomputermap) ON (nathostcomputermap.computerid = computer.id)
 
 WHERE
 computer.deleted != '1'
@@ -7106,6 +7094,9 @@ EOF
 		elsif ($table eq 'resourcetype') {
 			$computer_info->{resource}{$table}{$column} = $value;
 		}
+		elsif ($table eq 'nathostcomputermap') {
+			# Do not add, will retrieve later on
+		}
 		else {
 			$computer_info->{$table}{$column} = $value;
 		}
@@ -7171,9 +7162,15 @@ EOF
 		}
 	}
 	
-	my $nathost_info = get_computer_nathost_info($computer_id, $no_cache);
-	if ($nathost_info) {
-		$computer_info->{nathost} = $nathost_info;
+	# Check if the computer associated with this reservation is assigned a NAT host
+	if (my $nathost_id = $computer_info->{'nathostcomputermap-nathostid'}) {
+		my $nathost_info = get_computer_nathost_info($computer_id, $no_cache);
+		if ($nathost_info) {
+			$computer_info->{nathost} = $nathost_info;
+		}
+		else {
+			notify($ERRORS{'WARNING'}, 0, "$computer_hostname is mapped to NAT host $nathost_id but NAT host info could not be retrieved");
+		}
 	}
 	
 	notify($ERRORS{'DEBUG'}, 0, "retrieved info for computer: $computer_identifier");
@@ -7330,7 +7327,7 @@ EOF
 			$nathost_info->{HOSTNAME} = $nathost_info->{computer}{hostname};
 		}
 		else {
-			my $computer_info = get_computer_info($resource_subid) || {};
+			my $computer_info = get_computer_info($resource_subid, $no_cache) || {};
 			$nathost_info->{HOSTNAME} = $computer_info->{hostname};
 		}
 	}