You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by fa...@apache.org on 2010/01/21 16:02:03 UTC

svn commit: r901732 - in /incubator/vcl/trunk/managementnode/lib/VCL: blockrequest.pm utils.pm

Author: fapeeler
Date: Thu Jan 21 15:02:02 2010
New Revision: 901732

URL: http://svn.apache.org/viewvc?rev=901732&view=rev
Log:
VCL-254

added better processing of the block requests, if number of allocated
nodes is less than number requested. Attempt several more times to make
it happen.


Modified:
    incubator/vcl/trunk/managementnode/lib/VCL/blockrequest.pm
    incubator/vcl/trunk/managementnode/lib/VCL/utils.pm

Modified: incubator/vcl/trunk/managementnode/lib/VCL/blockrequest.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/blockrequest.pm?rev=901732&r1=901731&r2=901732&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/blockrequest.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/blockrequest.pm Thu Jan 21 15:02:02 2010
@@ -155,26 +155,47 @@
 			notify($ERRORS{'OK'}, 0, "updated process flag on blocktime_id= $blocktime_id");
 		}
 
-		my $xmlcall = process_block_time($blocktime_id);
+		my $completed = 0;
+		my $loop_control = 0;
+		my $xmlcall;
+
+		my($allocated,$unallocated) = 0;
+
+		while(!($completed)){
+			if($loop_control < 6){
+				$loop_control++;
+				notify($ERRORS{'DEBUG'}, 0, "processing blocktime_id= $blocktime_id  pass $loop_control");
+				$xmlcall = process_block_time($blocktime_id);
+			}
+			else{
+				$completed=1;
+				notify($ERRORS{'CRITICAL'}, 0, "attempted $loop_control passes to complete block_request $blockrequest_id\n allocated= $allocated \nblockrequest_number_machines= $blockrequest_number_machines");
+				last;
+			}
 
-		if ($xmlcall->{status} =~ /success/) {
-			notify($ERRORS{'OK'}, 0, "success blockTimes id $blocktime_id processed and allocated $xmlcall->{allocated} nodes");
-		}
-		elsif ($xmlcall->{status} =~ /completed/) {
-			notify($ERRORS{'OK'}, 0, "success blockTimes id $blocktime_id already processed");
-		}
-		elsif ($xmlcall->{status} =~ /warning/) {
-			my $warningmsg  = $xmlcall->{warningmsg}  if (defined($xmlcall->{warningmsg}));
-			my $allocated   = $xmlcall->{allocated}   if (defined($xmlcall->{allocated}));
-			my $unallocated = $xmlcall->{unallocated} if (defined($xmlcall->{unallocated}));
-			notify($ERRORS{'CRITICAL'}, 0, "xmlrpc warning: $warningmsg allocated= $allocated unallocated= $unallocated");
-		}
-		elsif ($xmlcall->{status} =~ /error/) {
-			my $errormsg = $xmlcall->{errormsg} if (defined($xmlcall->{errormsg}));
-			notify($ERRORS{'CRITICAL'}, 0, "xmlrpc error on blockrequest_id=$blockrequest_id blocktime_id=$blocktime_id : $errormsg");
-		}
-		else {
-			notify($ERRORS{'CRITICAL'}, 0, "xmlrpc status unknown status=  $xmlcall->{status} blockrequest_id=$blockrequest_id blocktime_id=$blocktime_id");
+			$allocated   = $xmlcall->{allocated}   if (defined($xmlcall->{allocated}));
+			$unallocated = $xmlcall->{unallocated} if (defined($xmlcall->{unallocated}));
+
+			if($allocated >= $blockrequest_number_machines){
+				$completed=1;
+				notify($ERRORS{'OK'}, 0, "success blockTimes id $blocktime_id processed and allocated $xmlcall->{allocated} nodes \nstatus= $xmlcall->{status}");
+				last;
+			}
+
+			if ($xmlcall->{status} =~ /warning|fault/) {
+				my $warningmsg  = $xmlcall->{warningmsg}  if (defined($xmlcall->{warningmsg}));
+				notify($ERRORS{'CRITICAL'}, 0, "xmlrpc warning: $warningmsg allocated= $allocated unallocated= $unallocated");
+			}
+			if ($xmlcall->{status} =~ /error/) {
+				my $errormsg = $xmlcall->{errormsg} if (defined($xmlcall->{errormsg}));
+				notify($ERRORS{'CRITICAL'}, 0, "xmlrpc error on blockrequest_id=$blockrequest_id blocktime_id=$blocktime_id : $errormsg");
+			}
+			if ($xmlcall->{status} =~ /completed/) {
+				$completed=1;
+				notify($ERRORS{'OK'}, 0, "success blockTimes id $blocktime_id already processed");
+			}
+
+			sleep 5 if(!$completed);
 		}
 
 		#pause
@@ -228,6 +249,219 @@
 
 } ## end sub process
 
+#/////////////////////////////////////////////////////////////////////////////
+
+=head2 process_block_time
+
+ Parameters  : $blockTimesid
+ Returns     : hash references
+ Description : calls xmlrpc_call routine with specificed method and args
+
+=cut
+
+sub process_block_time {
+	my $blockTimesid = $_[0];
+
+	if(!$blockTimesid){
+		notify($ERRORS{'WARNING'}, 0, "blockTimesid argument was not passed");
+		return 0;
+	}
+
+	my $method = "XMLRPCprocessBlockTime";
+	my $ignoreprivileges = 1;
+	my @argument_string = ($method,$blockTimesid, $ignoreprivileges); 
+
+	my $xml_ret = xmlrpc_call(@argument_string);
+
+	my %info;
+	if( ref($xml_ret) =~ /STRUCT/i){
+       $info{status} = $xml_ret->value->{status};
+		 $info{allocated} = $xml_ret->value->{allocated} if(defined($xml_ret->value->{allocated})) ;
+       $info{unallocated} = $xml_ret->value->{unallocated} if(defined($xml_ret->value->{unallocated}));
+		 #error
+		 $info{errorcode} = $xml_ret->value->{errorcode} if(defined($xml_ret->value->{errorcode}));
+		 $info{errormsg} = $xml_ret->value->{errormsg} if(defined($xml_ret->value->{errormsg}));
+		 #warning
+		 $info{warningcode} = $xml_ret->value->{warningcode} if(defined($xml_ret->value->{warningcode}));
+		 $info{warningmsg} = $xml_ret->value->{warningmsg} if(defined($xml_ret->value->{warningmsg}));
+		 #$info{reqidlists} = $xml_ret->value->{requestids};
+	}
+	else {
+		notify($ERRORS{'WARNING'}, 0, "return argument XMLRPCprocessBlockTime was not a STRUCT as expected" . ref($xml_ret) );
+		if(ref($xml_ret) =~ /fault/){
+			$info{status} = "fault";
+		}
+		else {
+		 $info{status} = ref($xml_ret);
+		}
+	}
+
+	return \%info;
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
+=head2 update_blockTimes_processing
+
+ Parameters  : $blockTimes_id, $processing
+ Returns     : 0 or 1
+ Description : Updates the processed flag in blockTimes table
+
+=cut
+
+sub update_blockTimes_processing {
+	my ($blockTimes_id, $processing) = @_;
+
+	my ($package, $filename, $line, $sub) = caller(0);
+
+	# Check the arguments
+	if (!defined($blockTimes_id)) {
+		notify($ERRORS{'WARNING'}, 0, "blockTimes ID was not specified");
+		return 0;
+	}
+	if (!defined($processing)) {
+		notify($ERRORS{'WARNING'}, 0, "processing was not specified");
+		return 0;
+	}
+
+	# Construct the update statement
+	my $update_statement = "
+      UPDATE
+		blockTimes
+		SET
+		blockTimes.processed = $processing
+		WHERE
+		blockTimes.id = $blockTimes_id
+   ";
+
+	# Call the database execute subroutine
+	if (database_execute($update_statement)) {
+		return 1;
+	}
+	else {
+		notify($ERRORS{'WARNING'}, 0, "unable to update blockTimes table, id=$blockTimes_id, processing=$processing");
+		return 0;
+	}
+} ## end sub update_blockTimes_processing
+
+#/////////////////////////////////////////////////////////////////////////////
+
+=head2 delete_block_request
+
+ Parameters  : $blockrequest_id
+ Returns     : 0 or 1
+ Description : removes an expired blockrequest from the blockrequest table 
+
+=cut
+
+sub delete_block_request {
+	my ($blockrequest_id) = @_;
+
+	# Check the arguments
+	if (!defined($blockrequest_id)) {
+		notify($ERRORS{'WARNING'}, 0, "blockrequest ID was not specified");
+		return 0;
+	}
+	# Construct the update statement
+	my $delete_statement = "
+      DELETE
+		blockRequest
+		FROM blockRequest
+		WHERE
+		blockRequest.id = $blockrequest_id
+   ";
+
+	# Call the database execute subroutine
+	if (database_execute($delete_statement)) {
+		return 1;
+	}
+	else {
+		notify($ERRORS{'WARNING'}, 0, "unable to deleted blockrequest $blockrequest_id blockRequest table ");
+		return 0;
+	}
+
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
+=head2 clear_blockTimes
+
+ Parameters  : $blockTimes_id
+ Returns     : 0 or 1
+ Description : Removes blockTimes id from blockTimes table
+
+=cut
+
+sub clear_blockTimes {
+	my ($blockTimes_id) = @_;
+
+	my ($package, $filename, $line, $sub) = caller(0);
+
+	# Check the arguments
+	if (!defined($blockTimes_id)) {
+		notify($ERRORS{'WARNING'}, 0, "blockTimes ID was not specified");
+		return 0;
+	}
+
+	# Construct the update statement
+	my $delete_statement = "
+      DELETE
+		blockTimes
+		FROM blockTimes
+		WHERE
+		blockTimes.id = $blockTimes_id
+   ";
+
+	# Call the database execute subroutine
+	if (database_execute($delete_statement)) {
+		return 1;
+	}
+	else {
+		notify($ERRORS{'WARNING'}, 0, "unable to deleted blockTimes_id $blockTimes_id blockTimes table ");
+		return 0;
+	}
+} ## end sub clear_blockTimes
+
+#/////////////////////////////////////////////////////////////////////////////
+
+=head2 clear_blockComputers
+
+ Parameters  : $blockTimes_id, $processing
+ Returns     : 0 or 1
+ Description : Clears blockcomputers from an expired BlockTimesid
+
+=cut
+
+sub clear_blockComputers {
+	my ($blockTimes_id) = @_;
+
+	my ($package, $filename, $line, $sub) = caller(0);
+
+	# Check the arguments
+	if (!defined($blockTimes_id)) {
+		notify($ERRORS{'WARNING'}, 0, "blockTimes ID was not specified");
+		return 0;
+	}
+
+	# Construct the update statement
+	my $delete_statement = "
+      DELETE
+		blockComputers
+		FROM blockComputers
+		WHERE
+		blockTimeid = $blockTimes_id
+   ";
+
+	# Call the database execute subroutine
+	if (database_execute($delete_statement)) {
+		return 1;
+	}
+	else {
+		notify($ERRORS{'WARNING'}, 0, "unable to delete blockComputers for id=$blockTimes_id, ");
+		return 0;
+	}
+} ## end sub clear_blockComputers
+
 =pod
 ////////////////////////////////////////////////////////////////////////////////
 ///

Modified: incubator/vcl/trunk/managementnode/lib/VCL/utils.pm
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/lib/VCL/utils.pm?rev=901732&r1=901731&r2=901732&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/utils.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/utils.pm Thu Jan 21 15:02:02 2010
@@ -92,8 +92,6 @@
   check_uptime
   checkonprocess
   clearfromblockrequest
-  clear_blockComputers
-  clear_blockTimes
   collectsshkeys
   construct_image_name
   controlVM
@@ -103,7 +101,6 @@
   database_select
   delete_computerloadlog_reservation
   delete_request
-  delete_block_request
   disablesshd
   firewall_compare_update
   format_data
@@ -164,7 +161,6 @@
   notify_via_msg
   notify_via_wall
   preplogfile
-  process_block_time
   read_file_to_array
   rename_vcld_process
   reservation_being_processed
@@ -187,7 +183,6 @@
   timefloor15interval
   unlockfile
   update_blockrequest_processing
-  update_blockTimes_processing
   update_cluster_info
   update_computer_address
   update_computer_state
@@ -7318,6 +7313,50 @@
 	}
 } ## end sub delete_request
 
+#/////////////////////////////////////////////////////////////////////////////
+
+=head2 update_blockrequest_processing
+
+ Parameters  : $blockrequest_id, $processing
+ Returns     : 0 or 1
+ Description : Updates the processing flag in the blockRequest table
+
+=cut
+
+sub update_blockrequest_processing {
+	my ($blockrequest_id, $processing) = @_;
+
+	my ($package, $filename, $line, $sub) = caller(0);
+
+	# Check the arguments
+	if (!defined($blockrequest_id)) {
+		notify($ERRORS{'WARNING'}, 0, "blockrequest ID was not specified");
+		return 0;
+	}
+	if (!defined($processing)) {
+		notify($ERRORS{'WARNING'}, 0, "processing was not specified");
+		return 0;
+	}
+
+	# Construct the update statement
+	my $update_statement = "
+      UPDATE
+		blockRequest
+		SET
+		blockRequest.processing = $processing
+		WHERE
+		blockRequest.id = $blockrequest_id
+   ";
+
+	# Call the database execute subroutine
+	if (database_execute($update_statement)) {
+		return 1;
+	}
+	else {
+		notify($ERRORS{'WARNING'}, 0, "unable to update blockRequest table, id=$blockrequest_id, processing=$processing");
+		return 0;
+	}
+} ## end sub update_blockrequest_processing
 
 #/////////////////////////////////////////////////////////////////////////////
 
@@ -7870,212 +7909,6 @@
 
 #/////////////////////////////////////////////////////////////////////////////
 
-=head2 update_blockrequest_processing
-
- Parameters  : $blockrequest_id, $processing
- Returns     : 0 or 1
- Description : Updates the processing flag in the blockRequest table
-
-=cut
-
-sub update_blockrequest_processing {
-	my ($blockrequest_id, $processing) = @_;
-
-	my ($package, $filename, $line, $sub) = caller(0);
-
-	# Check the arguments
-	if (!defined($blockrequest_id)) {
-		notify($ERRORS{'WARNING'}, 0, "blockrequest ID was not specified");
-		return 0;
-	}
-	if (!defined($processing)) {
-		notify($ERRORS{'WARNING'}, 0, "processing was not specified");
-		return 0;
-	}
-
-	# Construct the update statement
-	my $update_statement = "
-      UPDATE
-		blockRequest
-		SET
-		blockRequest.processing = $processing
-		WHERE
-		blockRequest.id = $blockrequest_id
-   ";
-
-	# Call the database execute subroutine
-	if (database_execute($update_statement)) {
-		return 1;
-	}
-	else {
-		notify($ERRORS{'WARNING'}, 0, "unable to update blockRequest table, id=$blockrequest_id, processing=$processing");
-		return 0;
-	}
-} ## end sub update_blockrequest_processing
-
-#/////////////////////////////////////////////////////////////////////////////
-
-=head2 update_blockTimes_processing
-
- Parameters  : $blockTimes_id, $processing
- Returns     : 0 or 1
- Description : Updates the processed flag in blockTimes table
-
-=cut
-
-sub update_blockTimes_processing {
-	my ($blockTimes_id, $processing) = @_;
-
-	my ($package, $filename, $line, $sub) = caller(0);
-
-	# Check the arguments
-	if (!defined($blockTimes_id)) {
-		notify($ERRORS{'WARNING'}, 0, "blockTimes ID was not specified");
-		return 0;
-	}
-	if (!defined($processing)) {
-		notify($ERRORS{'WARNING'}, 0, "processing was not specified");
-		return 0;
-	}
-
-	# Construct the update statement
-	my $update_statement = "
-      UPDATE
-		blockTimes
-		SET
-		blockTimes.processed = $processing
-		WHERE
-		blockTimes.id = $blockTimes_id
-   ";
-
-	# Call the database execute subroutine
-	if (database_execute($update_statement)) {
-		return 1;
-	}
-	else {
-		notify($ERRORS{'WARNING'}, 0, "unable to update blockTimes table, id=$blockTimes_id, processing=$processing");
-		return 0;
-	}
-} ## end sub update_blockTimes_processing
-
-#/////////////////////////////////////////////////////////////////////////////
-
-=head2 delete_block_request
-
- Parameters  : $blockrequest_id
- Returns     : 0 or 1
- Description : removes blockrequest 
-
-=cut
-
-sub delete_block_request {
-	my ($blockrequest_id) = @_;
-
-	# Check the arguments
-	if (!defined($blockrequest_id)) {
-		notify($ERRORS{'WARNING'}, 0, "blockrequest ID was not specified");
-		return 0;
-	}
-	# Construct the update statement
-	my $delete_statement = "
-      DELETE
-		blockRequest
-		FROM blockRequest
-		WHERE
-		blockRequest.id = $blockrequest_id
-   ";
-
-	# Call the database execute subroutine
-	if (database_execute($delete_statement)) {
-		return 1;
-	}
-	else {
-		notify($ERRORS{'WARNING'}, 0, "unable to deleted blockrequest $blockrequest_id blockRequest table ");
-		return 0;
-	}
-
-}
-#/////////////////////////////////////////////////////////////////////////////
-
-=head2 clear_blockTimes
-
- Parameters  : $blockTimes_id
- Returns     : 0 or 1
- Description : Removes blockTimes id from blockTimes table
-
-=cut
-
-sub clear_blockTimes {
-	my ($blockTimes_id) = @_;
-
-	my ($package, $filename, $line, $sub) = caller(0);
-
-	# Check the arguments
-	if (!defined($blockTimes_id)) {
-		notify($ERRORS{'WARNING'}, 0, "blockTimes ID was not specified");
-		return 0;
-	}
-
-	# Construct the update statement
-	my $delete_statement = "
-      DELETE
-		blockTimes
-		FROM blockTimes
-		WHERE
-		blockTimes.id = $blockTimes_id
-   ";
-
-	# Call the database execute subroutine
-	if (database_execute($delete_statement)) {
-		return 1;
-	}
-	else {
-		notify($ERRORS{'WARNING'}, 0, "unable to deleted blockTimes_id $blockTimes_id blockTimes table ");
-		return 0;
-	}
-} ## end sub update_blockTimes_processing
-#/////////////////////////////////////////////////////////////////////////////
-
-=head2 clear_blockComputers
-
- Parameters  : $blockTimes_id, $processing
- Returns     : 0 or 1
- Description : Updates the processed flag in blockTimes table
-
-=cut
-
-sub clear_blockComputers {
-	my ($blockTimes_id) = @_;
-
-	my ($package, $filename, $line, $sub) = caller(0);
-
-	# Check the arguments
-	if (!defined($blockTimes_id)) {
-		notify($ERRORS{'WARNING'}, 0, "blockTimes ID was not specified");
-		return 0;
-	}
-
-	# Construct the update statement
-	my $delete_statement = "
-      DELETE
-		blockComputers
-		FROM blockComputers
-		WHERE
-		blockTimeid = $blockTimes_id
-   ";
-
-	# Call the database execute subroutine
-	if (database_execute($delete_statement)) {
-		return 1;
-	}
-	else {
-		notify($ERRORS{'WARNING'}, 0, "unable to delete blockComputers for id=$blockTimes_id, ");
-		return 0;
-	}
-} ## end sub update_blockTimes_processing
-
-#/////////////////////////////////////////////////////////////////////////////
-
 =head2 get_management_node_blockrequests
 
  Parameters  : $managementnode_id
@@ -9475,50 +9308,6 @@
 
 #/////////////////////////////////////////////////////////////////////////////
 
-=head2 process_block_time
-
- Parameters  : $blockTimesid
- Returns     : hash references
- Description : calls xmlrpc_call routine with specificed method and args
-
-=cut
-
-sub process_block_time {
-	my $blockTimesid = $_[0];
-
-	if(!$blockTimesid){
-		notify($ERRORS{'WARNING'}, 0, "blockTimesid argument was not passed");
-		return 0;
-	}
-
-	my $method = "XMLRPCprocessBlockTime";
-
-	my $xml_ret = xmlrpc_call($method, $blockTimesid);
-
-	my %info;
-	if( ref($xml_ret) =~ /STRUCT/i){
-       $info{status} = $xml_ret->value->{status};
-		 $info{allocated} = $xml_ret->value->{allocated} if(defined($xml_ret->value->{allocated})) ;
-       $info{unallocated} = $xml_ret->value->{unallocated} if(defined($xml_ret->value->{unallocated}));
-		 #error
-		 $info{errorcode} = $xml_ret->value->{errorcode} if(defined($xml_ret->value->{errorcode}));
-		 $info{errormsg} = $xml_ret->value->{errormsg} if(defined($xml_ret->value->{errormsg}));
-		 #warning
-		 $info{warningcode} = $xml_ret->value->{warningcode} if(defined($xml_ret->value->{warningcode}));
-		 $info{warningmsg} = $xml_ret->value->{warningmsg} if(defined($xml_ret->value->{warningmsg}));
-		 #$info{reqidlists} = $xml_ret->value->{requestids};
-	}
-	else {
-		notify($ERRORS{'WARNING'}, 0, "return argument XMLRPCprocessBlockTime was not a STRUCT as expected" . ref($xml_ret) );
-		return 0;
-
-	}
-
-	return \%info;
-}
-
-#/////////////////////////////////////////////////////////////////////////////
-
 =head2 xmlrpc_call
 
  Parameters  : statement
@@ -9527,15 +9316,14 @@
 
 =cut
 sub xmlrpc_call {
-	my ($method,$args) = @_;
+	my @argument_string = @_;
+
+	notify($ERRORS{'DEBUG'}, 0, "argument_string= @argument_string ");
 
 	# Make sure method and args were passed
-	if (!$method) {
-		notify($ERRORS{'WARNING'}, 0, "method argument was not passed");
-		return 0;
-	}
-	if (!$args) {
-		notify($ERRORS{'WARNING'}, 0, "args argument was not passed");
+	my $number_of_args = @argument_string;
+	if ($number_of_args == 0) {
+		notify($ERRORS{'WARNING'}, 0, "argument string is empty number_of_args= $number_of_args argument_string= @argument_string ");
 		return 0;
 	}
 
@@ -9544,10 +9332,10 @@
 	$cli->{'__request'}{'_headers'}->push_header('X-Pass' => $XMLRPC_PASS);
 	$cli->{'__request'}{'_headers'}->push_header('X-APIVERSION' => 2);
 
-	my $response = $cli->send_request($method,$args);
+	my $response = $cli->send_request(@argument_string);
 
 	if($response->type =~ /fault/){
-		notify($ERRORS{'WARNING'}, 0, "fault occured on $method,$args \n faultCode= $response->code->{faultCode} \n faultString= $response->string->{faultString}");
+		notify($ERRORS{'WARNING'}, 0, "fault occured on @argument_string \n faultCode= $response->code->{faultCode} \n faultString= $response->string->{faultString}");
 		return 0;
 	}