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 2009/06/04 16:51:06 UTC

svn commit: r781760 - /incubator/vcl/trunk/managementnode/lib/VCL/blockrequest.pm

Author: fapeeler
Date: Thu Jun  4 14:51:06 2009
New Revision: 781760

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

Converted to use xmlrpc calls, eliminates duplication of code on
backend.

moved all sql queries to sub routines in utils. 



Modified:
    incubator/vcl/trunk/managementnode/lib/VCL/blockrequest.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=781760&r1=781759&r2=781760&view=diff
==============================================================================
--- incubator/vcl/trunk/managementnode/lib/VCL/blockrequest.pm (original)
+++ incubator/vcl/trunk/managementnode/lib/VCL/blockrequest.pm Thu Jun  4 14:51:06 2009
@@ -75,7 +75,7 @@
 =cut
 
 sub initialize {
-	my $self                    = shift;
+	my $self = shift;
 
 	# Initialize the database handle count
 	$ENV{dbh_count} = 0;
@@ -88,18 +88,12 @@
 		notify($ERRORS{'WARNING'}, 0, "unable to obtain a database handle for this state process");
 	}
 
-
 	# Store the name of this class in an environment variable
 	$ENV{class_name} = ref($self);
 
 	# Rename this process to include some request info
 	rename_vcld_process($self->data);
 
-	# Call the old _initialize subroutine
-	if (!$self->_initialize()) {
-		return 0;
-	}
-
 	notify($ERRORS{'OK'}, 0, "returning 1");
 	return 1;
 
@@ -108,354 +102,6 @@
 =pod
 ////////////////////////////////////////////////////////////////////////////////
 ///
-/// \fn function _initialize
-///
-/// \param hash data structure of the referenced object
-///
-/// \return
-///
-/// \brief  collects data based this modules goals, sets up data structure
-///
-////////////////////////////////////////////////////////////////////////////////
-=cut
-
-sub _initialize {
-	my $self    = shift;
-	my $request = $self->data->get_blockrequest_data();
-	my ($package, $filename, $line) = caller;
-
-	# Create a new database handler
-	my $dbh = getnewdbh();
-
-	# Retrieve data from the data structure
-	my $blockrequest_id              = $self->data->get_blockrequest_id();
-	my $blockrequest_mode            = $self->data->get_blockrequest_mode();
-	my $blockrequest_image_id        = $self->data->get_blockrequest_image_id();
-	my $blockrequest_number_machines = $self->data->get_blockrequest_number_machines();
-	my $blockrequest_expire          = $self->data->get_blockrequest_expire();
-	my $blocktime_id                 = $self->data->get_blocktime_id();
-	my $blocktime_processed          = $self->data->get_blocktime_processed();
-	my $blocktime_start              = $self->data->get_blocktime_start();
-	my $blocktime_end                = $self->data->get_blocktime_end();
-
-	notify($ERRORS{'DEBUG'}, 0, "blockrequest id: $blockrequest_id");
-	notify($ERRORS{'DEBUG'}, 0, "blockrequest mode: $blockrequest_mode");
-	notify($ERRORS{'DEBUG'}, 0, "blockrequest image id: $blockrequest_image_id");
-	notify($ERRORS{'DEBUG'}, 0, "blockrequest number machines: $blockrequest_number_machines");
-	notify($ERRORS{'DEBUG'}, 0, "blockrequest expire: $blockrequest_expire");
-	notify($ERRORS{'DEBUG'}, 0, "blocktime id: $blocktime_id");
-	notify($ERRORS{'DEBUG'}, 0, "blocktime processed: $blocktime_processed");
-	notify($ERRORS{'DEBUG'}, 0, "blocktime start: $blocktime_start");
-	notify($ERRORS{'DEBUG'}, 0, "blocktime end: $blocktime_end");
-
-	sleep 2;
-
-	#record my process start time
-	$request->{"myprocessStart"} = convert_to_epoch_seconds();
-
-
-	# active db handle ?
-	if (!($dbh->ping)) {
-		notify($ERRORS{'WARNING'}, 0, "database handle died, trying to create another one");
-		$dbh = getnewdbh();
-		notify($ERRORS{'OK'},      0, "database handle re-est")     if ($dbh->ping);
-		notify($ERRORS{'WARNING'}, 0, "database handle NOT re-set") if (!($dbh->ping));
-	}
-
-	#get the production imagerevision
-	my $imageselh = $dbh->prepare(
-		"SELECT ir.imagename,ir.id
-                                              FROM imagerevision ir
-                                              WHERE ir.production = 1 AND ir.imageid = ?") or notify($ERRORS{'WARNING'}, 0, "block request Could not prepare selecting production image from imagerevision" . $dbh->errstr());
-
-	$imageselh->execute($blockrequest_image_id) or notify($ERRORS{'WARNING'}, 0, "block request Could not execute selecting production image from imagerevision " . $dbh->errstr());
-	my $imagerows = $imageselh->rows;
-	my @imagerow;
-	if ($imagerows != 0) {
-		@imagerow                     = $imageselh->fetchrow_array;
-		$request->{"imagename"}       = $imagerow[0];
-		$request->{"imagerevisionid"} = $imagerow[1];
-		notify($ERRORS{'OK'}, 0, "collected production imagename imagerevisionid @imagerow $blockrequest_image_id");
-	}
-	else {
-		#warning no data for imageid
-		notify($ERRORS{'CRITICAL'}, 0, "no data from imagerevision table $blockrequest_image_id");
-		#preform more steps to prevent looping
-		return 0;
-	}
-
-	if ($blockrequest_mode eq "start") {
-		# find all nodes that can load/run requested image including those under other management nodes
-		# collect resourceid for this imageid
-		my $selh = $dbh->prepare(
-			"SELECT r.id
-                                            FROM resource r, resourcetype rt
-                                            WHERE r.resourcetypeid = rt.id AND rt.name = ? AND r.subid = ?") or notify($ERRORS{'WARNING'}, 0, "block request Could not prepare select imageid resourceid" . $dbh->errstr());
-		$selh->execute("image", $blockrequest_image_id) or notify($ERRORS{'WARNING'}, 0, "block request Could not execute select imageid resourceid" . $dbh->errstr());
-		my $rows = $selh->rows;
-		my @row;
-		if ($rows != 0) {
-			@row = $selh->fetchrow_array;
-			$request->{"imageresourceid"} = $row[0];
-			notify($ERRORS{'OK'}, 0, "collected resourceid $row[0] for imageid $blockrequest_image_id");
-		}
-		else {
-			#warning no data for imageid
-			notify($ERRORS{'CRITICAL'}, 0, "no resource id associated with imageid $blockrequest_image_id");
-			#preform more steps to prevent looping
-			return 0;
-		}
-		# collect resource groups this image is a member of
-		$selh = $dbh->prepare(
-			"SELECT resourcegroupid
-                                          FROM resourcegroupmembers
-                                         WHERE resourceid = ?")                                           or notify($ERRORS{'WARNING'}, 0, "Could not prepare select resource group membership resourceid" . $dbh->errstr());
-		$selh->execute($request->{imageresourceid}) or notify($ERRORS{'WARNING'}, 0, "Could not execute select resource group membership resourceid" . $dbh->errstr());
-		$rows = $selh->rows;
-		if ($rows != 0) {
-			while (@row = $selh->fetchrow_array) {
-				push(@{$request->{resourcegroups}}, $row[0]);
-				notify($ERRORS{'OK'}, 0, "pushing image resource group $row[0] on list");
-			}
-			notify($ERRORS{'OK'}, 0, "complete list of image resource groups @{ $request->{resourcegroups} }");
-		}
-		else {
-			#warning no data for imageid
-			notify($ERRORS{'CRITICAL'}, 0, "image resource id $request->{imageresourceid} is not in any groups");
-			#preform more steps to prevent looping
-			return 0;
-		}
-
-		# active db handle ?
-		if (!($dbh->ping)) {
-			notify($ERRORS{'WARNING'}, 0, "database handle died, trying to create another one");
-			$dbh = getnewdbh();
-			notify($ERRORS{'OK'},      0, "database handle re-est")     if ($dbh->ping);
-			notify($ERRORS{'WARNING'}, 0, "database handle NOT re-set") if (!($dbh->ping));
-		}
-
-		#find mapping between image resource groups and computer groups
-		$selh = $dbh->prepare(
-			"SELECT r.resourcegroupid2,r.resourcetypeid2
-                                             FROM resourcemap r, resourcetype rt
-                                             WHERE r.resourcetypeid1 = rt.id AND rt.name = ? AND r.resourcegroupid1 = ?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare resource to computer group mapping" . $dbh->errstr());
-		foreach my $rgroupid (@{$request->{resourcegroups}}) {
-			notify($ERRORS{'OK'}, 0, "fetching list of groups mapped to image resource group $rgroupid");
-			$selh->execute("image", $rgroupid) or notify($ERRORS{'WARNING'}, 0, "Could not execute select resource group membership resourceid" . $dbh->errstr());
-			$rows = $selh->rows;
-			if ($rows != 0) {
-				while (@row = $selh->fetchrow_array) {
-					$request->{"computergroups"}->{$row[0]}->{"resourceid"}     = $row[0];
-					$request->{"computergroups"}->{$row[0]}->{"resourcetypeid"} = $row[1];
-					notify($ERRORS{'OK'}, 0, "computer group= $row[0] can run image grpid= $rgroupid");
-				}
-			}
-			else {
-				#warning no data for mapped resources on resourcegroupid
-				notify($ERRORS{'WARNING'}, 0, "no computer groups found for image resource groupid $rgroupid");
-				#preform more steps to prevent looping
-				#check next one
-
-			}
-		} ## end foreach my $rgroupid (@{$request->{resourcegroups...
-		    # active db handle ?
-		if (!($dbh->ping)) {
-			notify($ERRORS{'WARNING'}, 0, "database handle died, trying to create another one");
-			$dbh = getnewdbh();
-			notify($ERRORS{'OK'},      0, "database handle re-est")     if ($dbh->ping);
-			notify($ERRORS{'WARNING'}, 0, "database handle NOT re-set") if (!($dbh->ping));
-		}
-		#who(Management Node) can control these computer group(s)
-		$selh = $dbh->prepare(
-			"SELECT rg.resourceid
-                                          FROM resourcemap rm, resourcegroupmembers rg, resourcetype rt
-                                          WHERE rg.resourcegroupid = rm.resourcegroupid1 AND rm.resourcetypeid1 = rt.id AND rt.name = ? AND rm.resourcegroupid2 = ?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare managment node owner of computer group" . $dbh->errstr());
-		#seperating statement about management node information
-		my $selhmn = $dbh->prepare(
-			"SELECT r.subid,m.IPaddress,m.hostname,m.ownerid,s.name,m.lastcheckin
-                                                FROM resource r,managementnode m,resourcetype rt,state s
-                                              WHERE m.id = r.subid AND r.resourcetypeid = rt.id AND s.id = m.stateid AND rt.name = ? AND r.id = ?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare managment node info statement" . $dbh->errstr());
-
-		foreach my $computergrpid (keys %{$request->{computergroups}}) {
-			$selh->execute("managementnode", $computergrpid) or notify($ERRORS{'WARNING'}, 0, "Could not execute select resource group membership resourceid" . $dbh->errstr());
-			$rows = $selh->rows;
-			if ($rows != 0) {
-				while (@row = $selh->fetchrow_array) {
-					$request->{"computergroups"}->{$computergrpid}->{"controllingmnids"}->{$row[0]}->{"resourceid"} = $row[0];
-					notify($ERRORS{'OK'}, 0, "management node resourceid @row can control this computer grp $computergrpid");
-					$selhmn->execute("managementnode", $row[0]) or notify($ERRORS{'WARNING'}, 0, "Could not execute select management node info" . $dbh->errstr());
-					my $mrows = $selhmn->rows;
-					if ($mrows != 0) {
-						while (my @mrow = $selhmn->fetchrow_array) {
-							$request->{"computergroups"}->{$computergrpid}->{"controllingmnids"}->{$mrow[0]}->{"IPaddress"}        = $mrow[1];
-							$request->{"computergroups"}->{$computergrpid}->{"controllingmnids"}->{$mrow[0]}->{"hostname"}         = $mrow[2];
-							$request->{"computergroups"}->{$computergrpid}->{"controllingmnids"}->{$mrow[0]}->{"ownerid"}          = $mrow[3];
-							$request->{"computergroups"}->{$computergrpid}->{"controllingmnids"}->{$mrow[0]}->{"state"}            = $mrow[4];
-							$request->{"computergroups"}->{$computergrpid}->{"controllingmnids"}->{$mrow[0]}->{"lastcheckin"}      = $mrow[5];
-							$request->{"computergroups"}->{$computergrpid}->{"controllingmnids"}->{$mrow[0]}->{"managementnodeid"} = $mrow[0];
-							notify($ERRORS{'OK'}, 0, "management node $mrow[2] can control computergroup $computergrpid");
-						}
-					} ## end if ($mrows != 0)
-					else {
-						#warning no data for mapped resources on resourcegroupid
-						notify($ERRORS{'CRITICAL'}, 0, "no management nodes listed controlling computer groupid $row[0] skipping this group");
-						#preform more steps to prevent looping
-					}
-				} ## end while (@row = $selh->fetchrow_array)
-			} ## end if ($rows != 0)
-			else {
-				#warning no data for mapped resources on resourcegroupid
-				notify($ERRORS{'CRITICAL'}, 0, "no management nodes listed to control computer group id $computergrpid, attempting to remove from our local hash");
-				#preform more steps to prevent looping
-				#delete computergroupid from hash
-				delete($request->{computergroups}->{$computergrpid});
-				if (!(exists($request->{computergroups}->{$computergrpid}))) {
-					notify($ERRORS{'OK'}, 0, "SUCCESSFULLY removed problem computer groupid from list");
-				}
-			} ## end else [ if ($rows != 0)
-		} ## end foreach my $computergrpid (keys %{$request->{computergroups...
-		    # active db handle ?
-		if (!($dbh->ping)) {
-			notify($ERRORS{'WARNING'}, 0, "database handle died, trying to create another one");
-			$dbh = getnewdbh();
-			notify($ERRORS{'OK'},      0, "database handle re-est")     if ($dbh->ping);
-			notify($ERRORS{'WARNING'}, 0, "database handle NOT re-set") if (!($dbh->ping));
-		}
-		#collect computer members of associated computer groups
-		$selh = $dbh->prepare(
-			"SELECT c.id,c.hostname,c.IPaddress,s.name,c.currentimageid,c.type
-                                          FROM resourcetype rt, resource r,resourcegroupmembers rg,computer c,state s
-                                         WHERE s.id = c.stateid AND rg.resourceid = r.id AND r.subid = c.id AND r.resourcetypeid = rt.id AND rt.name = ? AND rg.resourcegroupid = ?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare statement collect members of related computer groups" . $dbh->errstr());
-
-		#collect list of computers already in the blockcomputers table for this start time
-		my $bcselh = $dbh->prepare(
-			"SELECT bc.computerid FROM blockComputers bc, blockTimes bt
-                                          WHERE bc.blockTimeid = bt.id AND bt.id != ? AND bt.start < ? AND bt.end > ?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare statement collect members of related computer groups" . $dbh->errstr());
-		$bcselh->execute($blocktime_id, $blocktime_end, $blocktime_start) or notify($ERRORS{'WARNING'}, 0, "Could not execute blockcomputer lookup " . $dbh->errstr());
-		my $bcrows = $bcselh->rows;
-		if ($bcrows != 0) {
-			my @bclist;
-			while (@bclist = $bcselh->fetchrow_array) {
-				$request->{"blockcomputerslist"}->{$bclist[0]} = 1;
-			}
-		}
-
-		#collect OSname for image id
-		my $selhOS = $dbh->prepare(
-			"SELECT o.name FROM OS o,image i
-                                              WHERE i.id = ?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare statement for OS " . $dbh->errstr());
-		#sort through list of computers
-		foreach my $grpid (keys %{$request->{computergroups}}) {
-			$selh->execute("computer", $grpid) or notify($ERRORS{'WARNING'}, 0, "Could not execute select computer members of group ids" . $dbh->errstr());
-			$rows = $selh->rows;
-			if ($rows != 0) {
-				while (@row = $selh->fetchrow_array) {
-					$request->{"computergroups"}->{computercount}++;
-					$request->{"computergroups"}->{$grpid}->{"members"}->{$row[0]}->{"id"}        = $row[0];
-					$request->{"computergroups"}->{$grpid}->{"members"}->{$row[0]}->{"hostname"}  = $row[1];
-					$request->{"computergroups"}->{$grpid}->{"members"}->{$row[0]}->{"IPaddress"} = $row[2];
-					$request->{"computergroups"}->{$grpid}->{"members"}->{$row[0]}->{"state"}     = $row[3];
-					if (exists($request->{"blockcomputerslist"}->{$row[0]})) {
-						notify($ERRORS{'OK'}, 0, "computer id $row[0] hostname $row[1] is in another block reservation");
-						$row[3] = "inuse";
-						$request->{"computergroups"}->{$grpid}->{"members"}->{$row[0]}->{"state"} = $row[3];
-					}
-					if ($row[3] eq "available") {
-						notify($ERRORS{'OK'}, 0, "available machineid $row[0] hostname $row[1]");
-						$request->{"availablemachines"}->{$row[0]}->{"id"}             = $row[0];
-						$request->{"availablemachines"}->{$row[0]}->{"hostname"}       = $row[1];
-						$request->{"availablemachines"}->{$row[0]}->{"IPaddress"}      = $row[2];
-						$request->{"availablemachines"}->{$row[0]}->{"state"}          = $row[3];
-						$request->{"availablemachines"}->{$row[0]}->{"currentimageid"} = $row[4];
-						$request->{"availablemachines"}->{$row[0]}->{"type"}           = $row[5];
-						$request->{"availablemachines"}->{$row[0]}->{"shortname"}      = $1 if ($row[1] =~ /([-_a-zA-Z0-9]*)\./);
-						#which management node should handle this -- in case there are more than one
-						my $mncount = 0;
-						foreach my $mnid (keys %{$request->{computergroups}->{$grpid}->{controllingmnids}}) {
-							if ($request->{computergroups}->{$grpid}->{controllingmnids}->{$mnid}->{managementnodeid}) {
-								$mncount++;
-								notify($ERRORS{'OK'}, 0, "setting MN to $request->{computergroups}->{$grpid}->{controllingmnids}->{$mnid}->{managementnodeid} for computerid $row[0]");
-								$request->{"availablemachines"}->{$row[0]}->{"managementnodeid"} = $request->{computergroups}->{$grpid}->{controllingmnids}->{$mnid}->{managementnodeid};
-
-								if ($mncount > 1) {
-									#need to figure out which one has less load
-								}
-							}
-						} ## end foreach my $mnid (keys %{$request->{computergroups...
-
-						if ($row[4] eq $blockrequest_image_id) {
-							push(@{$request->{preloadedlist}}, $row[0]);
-							$request->{"availablemachines"}->{$row[0]}->{"preloaded"} = 1;
-						}
-						else {
-							$request->{"availablemachines"}->{$row[0]}->{"preloaded"} = 0;
-						}
-						if ($row[5] =~ /lab/) {
-							$selhOS->execute($row[4]) or notify($ERRORS{'WARNING'}, 0, "Could not execute statement to collect OS info" . $dbh->errstr());
-							my $OS;
-							my $dbretval = $selhOS->bind_columns(\($OS));
-							if ($selhOS->fetch) {
-								$request->{"availablemachines"}->{$row[0]}->{"OS"} = $OS;
-							}
-						}
-					} ## end if ($row[3] eq "available")
-				} ## end while (@row = $selh->fetchrow_array)
-			} ## end if ($rows != 0)
-			else {
-				notify($ERRORS{'WARNING'}, 0, "possible empty group for groupid $grpid");
-			}
-		} ## end foreach my $grpid (keys %{$request->{computergroups...
-		    #collect id for reload state and vclreload user
-		$selh = $dbh->prepare("SELECT s.id,u.id FROM state s,user u WHERE s.name= ? AND u.unityid=?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare statement to find reload state" . $dbh->errstr());
-		$selh->execute("reload", "vclreload") or notify($ERRORS{'WARNING'}, 0, "Could not execute reload stateid fetch" . $dbh->errstr());
-		$rows = $selh->rows;
-		if ($rows != 0) {
-			if (@row = $selh->fetchrow_array) {
-				$request->{"reloadstateid"} = $row[0];
-				$request->{"vclreloaduid"}  = $row[1];
-			}
-		}
-		else {
-			notify($ERRORS{'CRITICAL'}, 0, "reload state id or vclreload user id not found");
-		}
-	} ## end if ($blockrequest_mode eq "start")
-	elsif ($blockrequest_mode eq "end") {
-		#collect machines assigned for this blockRequest
-		my $selhandle = $dbh->prepare("SELECT computerid FROM blockComputers WHERE blockTimeid = ?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare statement to collect computerids under blockTimesid" . $dbh->errstr());
-		$selhandle->execute($blocktime_id);
-		if (!$dbh->err) {
-			notify($ERRORS{'OK'}, 0, "collected computer ids for block time $blocktime_id");
-		}
-		else {
-			notify($ERRORS{'WARNING'}, 0, "could not execute statement collect computerid under blockTimesid" . $dbh->errstr());
-		}
-
-		my $rows = $selhandle->rows;
-		if (!$rows == 0) {
-			while (my @row = $selhandle->fetchrow_array) {
-				$request->{"blockComputers"}->{$row[0]}->{"id"} = $row[0];
-			}
-		}
-		else {
-			#strange -- no machines
-			notify($ERRORS{'WARNING'}, 0, "mode= $blockrequest_mode no machines found for blockRequest $blockrequest_id blockTimesid $blocktime_id in blockTimes table");
-		}
-	} ## end elsif ($blockrequest_mode eq "end")  [ if ($blockrequest_mode eq "start")
-	elsif ($blockrequest_mode eq "expire") {
-		#just remove request entry from table
-
-	}
-	else {
-		#mode not set or mode
-		notify($ERRORS{'CRITICAL'}, 0, "mode not determined mode= $blockrequest_mode");
-	}
-
-	return 1;
-} ## end sub _initialize
-
-=pod
-////////////////////////////////////////////////////////////////////////////////
-///
 /// \fn sub process
 ///
 /// \param  hash
@@ -463,10 +109,8 @@
 /// \return  1, 0
 ///
 /// \brief start mode:
-///         sorts through list of computers, pull out machines that are not
-///         available or are inuse or already scheduled to be used
-///         based on the number of machines needed put machines into blockcomputers
-///         table and insert reload requests
+///         uses xml-rpc to call the web api to process block request
+//          event
 ///        end mode:
 ///         remove machines from blockComputers table for block request id X
 ///         reload ?
@@ -477,13 +121,9 @@
 =cut
 
 sub process {
-	my $self    = shift;
-	my $request = $self->data->get_blockrequest_data();
+	my $self = shift;
 	my ($package, $filename, $line) = caller;
 
-	# Create a new database handler
-	my $dbh = getnewdbh();
-
 	# Retrieve data from the data structure
 	my $blockrequest_id              = $self->data->get_blockrequest_id();
 	my $blockrequest_mode            = $self->data->get_blockrequest_mode();
@@ -495,6 +135,9 @@
 	my $blocktime_start              = $self->data->get_blocktime_start();
 	my $blocktime_end                = $self->data->get_blocktime_end();
 
+	#Set local timer
+	my $localtimer = convert_to_epoch_seconds();
+
 	notify($ERRORS{'DEBUG'}, 0, "blockrequest id: $blockrequest_id");
 	notify($ERRORS{'DEBUG'}, 0, "blockrequest mode: $blockrequest_mode");
 	notify($ERRORS{'DEBUG'}, 0, "blockrequest image id: $blockrequest_image_id");
@@ -506,253 +149,75 @@
 	notify($ERRORS{'DEBUG'}, 0, "blocktime end: $blocktime_end");
 
 	if ($blockrequest_mode eq "start") {
-		#confirm preloaded list
-		if ($blocktime_processed) {
 
-			notify($ERRORS{'WARNING'}, 0, "id $blockrequest_id has already been processed, pausing 60 seconds before reseting the processing flag");
-			##remove processing flag
-			sleep 60;
-			my $updatehdle = $dbh->prepare("UPDATE blockRequest SET processing = ? WHERE id = ?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare update processing statement for end mode" . $dbh->errstr());
-			$updatehdle->execute(0, $blockrequest_id) or notify($ERRORS{'WARNING'}, 0, "Could not execute update processing statement for end mode" . $dbh->errstr());
-			notify($ERRORS{'OK'}, 0, "removed processing flag from blockrequest id $blockrequest_id");
-			return 1;
-		} ## end if ($blocktime_processed)
-		$request->{"availmachinecount"} = 0;
-		# active db handle ?
-		if (!($dbh->ping)) {
-			notify($ERRORS{'WARNING'}, 0, "database handle died, trying to create another one");
-			$dbh = getnewdbh();
-			notify($ERRORS{'OK'},      0, "database handle re-est")     if ($dbh->ping);
-			notify($ERRORS{'WARNING'}, 0, "database handle NOT re-set") if (!($dbh->ping));
-		}
-
-		my $selh = $dbh->prepare(
-			"SELECT r.id,r.start,r.end,s.name
-                                            FROM request r, reservation rs, state s
-                                            WHERE r.stateid = s.id AND rs.computerid = ?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare statement for furture reservations checks of computer id " . $dbh->errstr());
-		#sort hash based on preloaded flag
-		foreach my $computerid (sort {$request->{availablemachines}->{$b}->{preloaded} eq '1'} keys %{$request->{availablemachines}}) {
-			#confirm status of available machines
-			notify($ERRORS{'OK'}, 0, "$computerid preload flag= $request->{availablemachines}->{$computerid}->{preloaded}");
-
-			#can only check the machines under this MN control
-			$request->{availablemachines}->{$computerid}->{"ok"} = 0;
-			my @status;
-			if ($request->{availablemachines}->{$computerid}->{type} =~ /blade/) {
-				$request->{availablemachines}->{$computerid}->{"on"} = 1;
-			}
-			elsif ($request->{availablemachines}->{$computerid}->{type} =~ /lab/) {
-				@status = virtual_status_unix($request->{availablemachines}->{$computerid}->{hostname}, $request->{availablemachines}->{$computerid}->{OS}, "linux", $request->{availablemachines}->{$computerid}->{IPaddress});
-				if ($status[2]) {
-					$request->{availablemachines}->{$computerid}->{"on"} = 1;
-				}
-			}
-			elsif ($request->{availablemachines}->{$computerid}->{type} =~ /virtualmachine/) {
-				$request->{availablemachines}->{$computerid}->{"on"} = 1;
-			}
-			notify($ERRORS{'OK'}, 0, "checking for future reservations for computerid $computerid");
-			#check for future reservations
-			$selh->execute($computerid) or notify($ERRORS{'WARNING'}, 0, "Could not execute statement for furture reservations checks of computer id $computerid" . $dbh->errstr());
-			my $rows = $selh->rows;
-			if (!$rows == 0) {
-				my @row = $selh->fetchrow_array;
-				#does blockrequest end time end before this reservations start time
-				if ($row[3] =~ /new/) {
-					my $furture_start = convert_to_epoch_seconds($row[1]);
-					my $BRend         = convert_to_epoch_seconds($blocktime_end);
-					#is start greater than end by at least 35 minutes -- to be safe?
-					if ((($furture_start - (35 * 60)) > $BRend)) {
-						#this one is ok
-						$request->{availablemachines}->{$computerid}->{"ok"} = 1;
-						notify($ERRORS{'OK'}, 0, "setting ok flag for computerid $computerid");
-					}
-					else {
-						notify($ERRORS{'OK'}, 0, "$computerid not ok to use deleting from hash");
-						my $d = ($furture_start - (35 * 60));
-						notify($ERRORS{'OK'}, 0, "furture_start $furture_start : BRend $BRend : delta $d");
-						#skip and remove from our list
-						#my $a = delete($request->{availablemachines}->{$computerid});
-						#next;
-						$request->{availablemachines}->{$computerid}->{"ok"} = 0;
-					}
-				} ## end if ($row[3] =~ /new/)
-				else {
-					$request->{availablemachines}->{$computerid}->{"ok"} = 0;
-					notify($ERRORS{'OK'}, 0, "NOT setting ok flag for computerid $computerid : listed in request $row[0] with state $row[3]");
-				}
-			} ## end if (!$rows == 0)
-			else {
-				#nothing scheduled for this computer id
-				$request->{availablemachines}->{$computerid}->{"ok"} = 1;
-				notify($ERRORS{'OK'}, 0, " setting ok flag for computerid $computerid");
-			}
-
-			if ($request->{availablemachines}->{$computerid}->{on} && $request->{availablemachines}->{$computerid}->{ok}) {
-				# add to our master list
-				$request->{"masterlist"}->{$computerid}->{"id"}              = $computerid;
-				$request->{"masterlist"}->{$computerid}->{"controllingMNid"} = $request->{availablemachines}->{$computerid}->{managementnodeid};
-				#increment our count
-				$request->{availmachinecount}++;
-			}
-
-			if ($request->{availmachinecount} > $blockrequest_number_machines) {
-				#should end up with one extra machine
-				last;
-			}
-
-		} ## end foreach my $computerid (sort {$request->{availablemachines...
+		#update processed flag for request
+		if (update_blockTimes_processing($blocktime_id, 1)) {
+			notify($ERRORS{'OK'}, 0, "updated process flag on blocktime_id= $blocktime_id");
+		}
 
-		#insert machines into Block computers
-		# insert reload request for machine
-		#one sanity check
-		if (!$request->{availmachinecount}) {
-			#nothing  -- not good, complain
-			notify($ERRORS{'CRITICAL'}, 0, "no machines where found or allocated for block request $blockrequest_id");
+		my $xmlcall = process_block_time($blocktime_id);
 
+		if ($xmlcall->{status} =~ /success/) {
+			notify($ERRORS{'OK'}, 0, "success blockTimes id $blocktime_id processed and allocated $xmlcall->{allocated} nodes");
 		}
-		if ($request->{availmachinecount} >= $blockrequest_number_machines) {
-			#good they can get what they requested
+		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, "Could not allocate number of requested machines for block request id $blockrequest_id . Only $request->{availmachinecount} are available, will give them those.");
+			notify($ERRORS{'CRITICAL'}, 0, "xmlrpc status unknown status=  $xmlcall->{status} blockrequest_id=$blockrequest_id blocktime_id=$blocktime_id");
 		}
-		# active db handle ?
-		if (!($dbh->ping)) {
-			notify($ERRORS{'WARNING'}, 0, "database handle died, trying to create another one");
-			$dbh = getnewdbh();
-			notify($ERRORS{'OK'},      0, "database handle re-est")     if ($dbh->ping);
-			notify($ERRORS{'WARNING'}, 0, "database handle NOT re-set") if (!($dbh->ping));
-		}
-		my $insertBC = $dbh->prepare("INSERT INTO blockComputers (blockTimeid,computerid) VALUES(?,?)") or notify($ERRORS{'WARNING'}, 0, "Could not prepare INSERT of blockcomputer table for start mode" . $dbh->errstr());
-
-		my $insertlog = $dbh->prepare("INSERT INTO log (userid,start,initialend,wasavailable,computerid,imageid) VALUES(?,?,?,?,?,?)") or notify($ERRORS{'WARNING'}, 0, "Could not prepare INSERT log entry " . $dbh->errstr());
-		my $lastinsertid;
-		my $insertsublog = $dbh->prepare("INSERT INTO sublog (logid,imageid,computerid) VALUES(?,?,?)") or notify($ERRORS{'WARNING'}, 0, "Could not prepare INSERT of sublog for reload mode" . $dbh->errstr());
-
-		my $insertrequest     = $dbh->prepare("INSERT INTO request (stateid,userid,laststateid,logid,start,end,daterequested) VALUES(?,?,?,?,?,?,?)")       or notify($ERRORS{'WARNING'}, 0, "Could not prepare INSERT of request for reload mode" . $dbh->errstr());
-		my $insertreservation = $dbh->prepare("INSERT INTO reservation (requestid,computerid,imageid,imagerevisionid,managementnodeid) VALUES (?,?,?,?,?)") or notify($ERRORS{'WARNING'}, 0, "Could not prepare INSERT of reservation for reload mode" . $dbh->errstr());
-
-
-		# $request->masterlist should contain a list of machines we can allocate
-		notify($ERRORS{'OK'}, 0, "number of available machines= $request->{availmachinecount}");
-
-		#do this in two or more loops
-		foreach my $computerid (keys %{$request->{masterlist}}) {
-			$insertBC->execute($blocktime_id, $request->{masterlist}->{$computerid}->{id}) or notify($ERRORS{'WARNING'}, 0, "Could not execute blockcomputers INSERT statement for computerid $computerid under blockrequest id $blockrequest_id" . $dbh->errstr());
-			notify($ERRORS{'OK'}, 0, "Inserted computerid $computerid blockTimesid $blocktime_id into blockcomputers table for block request $blockrequest_id");
-		}
-
-		foreach my $compid (keys %{$request->{masterlist}}) {
-			# set start to be 35 minutes prior to start time
-			# convert to epoch time
-			my $starttimeepoch = convert_to_epoch_seconds($blocktime_start);
-			#subtract 35 minutes from start time
-			$starttimeepoch = ($starttimeepoch - (35 * 60));
-			#convert back to datetime
-			my $starttime = convert_to_datetime($starttimeepoch);
-			#set to nearest 15 minute mark
-			my $start = timefloor15interval($starttime);
-			#set end time
-			my $Eend = ($starttimeepoch + (15 * 60));
-			my $end = convert_to_datetime($Eend);
-			notify($ERRORS{'OK'}, 0, "blockstart= $blocktime_start reloadstart= $start reloadend= $end");
-			#insert into log and sublog
-			$insertlog->execute($request->{vclreloaduid}, $start, $end, 1, $compid, $blockrequest_image_id) or notify($ERRORS{'WARNING'}, 0, "Could not execute log entry" . $dbh->errstr());
-			#get last insertid
-			$lastinsertid = $dbh->{'mysql_insertid'};
-			notify($ERRORS{'OK'}, 0, "lastinsertid for log entry is $lastinsertid");
-			$request->{masterlist}->{$compid}->{"logid"} = $lastinsertid;
-			#insert sublog entry
-			$insertsublog->execute($lastinsertid, $blockrequest_image_id, $request->{masterlist}->{$compid}->{id}) or notify($ERRORS{'WARNING'}, 0, "Could not execute sublog entry" . $dbh->errstr());
-			$lastinsertid = 0;
-			#insert reload request
-			$insertrequest->execute($request->{reloadstateid}, $request->{vclreloaduid}, $request->{reloadstateid}, $request->{masterlist}->{$compid}->{logid}, $start, $end, $start) or notify($ERRORS{'WARNING'}, 0, "Could not prepare INSERT of request for reload mode" . $dbh->errstr());
-			#fetch request insert id
-			$lastinsertid = $dbh->{'mysql_insertid'};
-			notify($ERRORS{'OK'}, 0, "lastinsertid for request entry is $lastinsertid");
-			$request->{masterlist}->{$compid}->{"requestid"} = $lastinsertid;
-			#insert reservation
-			$insertreservation->execute($lastinsertid, $request->{masterlist}->{$compid}->{id}, $blockrequest_image_id, $request->{imagerevisionid}, $request->{masterlist}->{$compid}->{controllingMNid}) or notify($ERRORS{'WARNING'}, 0, "Could not execute reservation entry" . $dbh->errstr());
-		} ## end foreach my $compid (keys %{$request->{masterlist...
-
-		#update processed flag for request
-		my $updatetimes = $dbh->prepare("UPDATE blockTimes SET processed=? WHERE id =?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare INSERT of blockcomputer table for start mode " . $dbh->errstr());
-		$updatetimes->execute(1, $blocktime_id) or notify($ERRORS{'WARNING'}, 0, "could not execute update processing flag on blockRequest id $blockrequest_id " . $dbh->errstr());
-
 
 		#pause
-		if (pauseprocessing($request->{myprocessStart})) {
+		if (pauseprocessing($localtimer)) {
 			notify($ERRORS{'OK'}, 0, "past check window for this request, -- ok to proceed");
 		}
-		# active db handle ?
-		if (!($dbh->ping)) {
-			notify($ERRORS{'WARNING'}, 0, "database handle died, trying to create another one");
-			$dbh = getnewdbh();
-			notify($ERRORS{'OK'},      0, "database handle re-est")     if ($dbh->ping);
-			notify($ERRORS{'WARNING'}, 0, "database handle NOT re-set") if (!($dbh->ping));
-		}
 
-		#remove processing flag
-		my $update = $dbh->prepare("UPDATE blockRequest SET processing = ? WHERE id = ?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare INSERT of blockcomputer table for start mode " . $dbh->errstr());
-		$update->execute(0, $blockrequest_id);
-		if (!$dbh->errstr()) {
-			notify($ERRORS{'OK'}, 0, "updated processing flag on blockRequest $blockrequest_id to 0");
-		}
-		else {
-			notify($ERRORS{'WARNING'}, 0, "failed to update processing flag on blockRequest $blockrequest_id to 0: " . $dbh->errstr());
+		if (update_blockrequest_processing($blockrequest_id, 0)) {
+			notify($ERRORS{'OK'}, 0, "Removed processing flag on blockrequest_id $blockrequest_id");
 		}
 
 	} ## end if ($blockrequest_mode eq "start")
 	elsif ($blockrequest_mode eq "end") {
-		# active db handle ?
-		if (!($dbh->ping)) {
-			notify($ERRORS{'WARNING'}, 0, "database handle died, trying to create another one");
-			$dbh = getnewdbh();
-			notify($ERRORS{'OK'},      0, "database handle re-est")     if ($dbh->ping);
-			notify($ERRORS{'WARNING'}, 0, "database handle NOT re-set") if (!($dbh->ping));
-		}
-
 		# remove blockTime entry for this request
-		#
-		my $delhandle = $dbh->prepare("DELETE blockTimes FROM blockTimes WHERE id = ?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare DELETE blockTimes under id $blockrequest_id" . $dbh->errstr());
-		$delhandle->execute($blocktime_id) or notify($ERRORS{'WARNING'}, 0, "Could not prepare DELETE blockcomputers under id $blockrequest_id" . $dbh->errstr());
-		notify($ERRORS{'OK'}, 0, "removed blockTimes id $blocktime_id from blockTimes table");
-
-		$delhandle = $dbh->prepare("DELETE blockComputers FROM blockComputers WHERE blockTimeid = ? AND computerid = ?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare DELETE blockcomputers under id $blockrequest_id" . $dbh->errstr());
-		# remove each computer in order to reload blades
-		foreach my $computerid (keys %{$request->{"blockComputers"}}) {
-			#remove machines from blockComputers table for block request id X
-			$delhandle->execute($blocktime_id, $request->{blockComputers}->{$computerid}->{id}) or notify($ERRORS{'WARNING'}, 0, "Could not prepare DELETE blockcomputers under id $blockrequest_id" . $dbh->errstr());
-			notify($ERRORS{'OK'}, 0, "removed block computerid $computerid from blockComputers table for blockTimeid $blocktime_id");
-
-			#reload blades
-			#call get next image -- placeholder
-
+		if (clear_blockComputers($blocktime_id)) {
+			notify($ERRORS{'OK'}, 0, "Removed computers from blockComputers table for blocktime_id=$blocktime_id");
 		}
-		#check expire time also, if this was the last blockTimes entry then this is likely the expiration time as well
+		if (clear_blockTimes($blocktime_id)) {
+			notify($ERRORS{'OK'}, 0, "Removed blocktime_id=$blocktime_id from blockTimes table");
+		}
+
+		#check expire time, if this was the last blockTimes entry then this is likely the expiration time as well
 		my $status = check_blockrequest_time($blocktime_start, $blocktime_end, $blockrequest_expire);
 		if ($status eq "expire") {
 			#fork start processing
-			notify($ERRORS{'OK'}, 0, "this is expire time also");
-			#just remove blockRequest entry from BlockRequest table
-			my $delhandle = $dbh->prepare("DELETE blockRequest FROM blockRequest WHERE id = ?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare DELETE blockRequest id $blockrequest_id " . $dbh->errstr());
-			$delhandle->execute($blockrequest_id) or notify($ERRORS{'WARNING'}, 0, "Could not execute DELETE blcokRequest id $blockrequest_id " . $dbh->errstr());
-			notify($ERRORS{'OK'}, 0, "blockRequest id $blockrequest_id has expired and was removed from the database");
+			notify($ERRORS{'OK'}, 0, "Block Request $blockrequest_id has expired");
+			if (delete_block_request($blockrequest_id)) {
+				notify($ERRORS{'OK'}, 0, "Removed blockRequest id $blockrequest_id");
+			}
 			return 1;
 		}
 
 		##remove processing flag
-		my $updatehdle = $dbh->prepare("UPDATE blockRequest SET processing = ? WHERE id = ?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare update processing statement for end mode" . $dbh->errstr());
-		$updatehdle->execute(0, $blockrequest_id) or notify($ERRORS{'WARNING'}, 0, "Could not execute update processing statement for end mode" . $dbh->errstr());
-		notify($ERRORS{'OK'}, 0, "removed processing flag from blockrequest id $blockrequest_id");
+		if (update_blockrequest_processing($blockrequest_id, 0)) {
+			notify($ERRORS{'OK'}, 0, "Removed processing flag on blockrequest_id $blockrequest_id");
+		}
 
 	} ## end elsif ($blockrequest_mode eq "end")  [ if ($blockrequest_mode eq "start")
 	elsif ($blockrequest_mode eq "expire") {
-		#there should not be any blockTimes entries for this request
-		#just remove blockRequest entry from BlockRequest table
-		my $delhandle = $dbh->prepare("DELETE blockRequest FROM blockRequest WHERE id = ?") or notify($ERRORS{'WARNING'}, 0, "Could not prepare DELETE blockRequest id $blockrequest_id " . $dbh->errstr());
-		$delhandle->execute($blockrequest_id) or notify($ERRORS{'WARNING'}, 0, "Could not execute DELETE blcokRequest id $blockrequest_id " . $dbh->errstr());
-		notify($ERRORS{'OK'}, 0, "blockRequest id $blockrequest_id has expired and was removed from the database");
+		notify($ERRORS{'OK'}, 0, "Block Request $blockrequest_id has expired");
+		if (delete_block_request($blockrequest_id)) {
+			notify($ERRORS{'OK'}, 0, "Removed blockRequest id $blockrequest_id");
+		}
 		return 1;
 	}
 	else {