You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by jf...@apache.org on 2010/09/09 22:23:15 UTC

svn commit: r995564 - /incubator/vcl/trunk/web/.ht-inc/utils.php

Author: jfthomps
Date: Thu Sep  9 20:23:14 2010
New Revision: 995564

URL: http://svn.apache.org/viewvc?rev=995564&view=rev
Log:
VCL-378
reservation can be extended into a block allocation for user not in block group

-modified isAvailable - changed $skipRemoveUsedBlock to $altRemoveBlockCheck, then toward end of foreach, if $altRemoveBlockCheck is true, call editRequestBlockCheck and return 0 if it returns true
-added editRequestBlockCheck - checks to see if $compid is part of an upcoming block that user is not part of or for a different image

-modified maintenanceCheck - if no files in maintenance directory, $files is not an array and is then invalid for foreach; added check for it being an array to surpress the warning

Modified:
    incubator/vcl/trunk/web/.ht-inc/utils.php

Modified: incubator/vcl/trunk/web/.ht-inc/utils.php
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/utils.php?rev=995564&r1=995563&r2=995564&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/utils.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/utils.php Thu Sep  9 20:23:14 2010
@@ -554,6 +554,8 @@ function maintenanceCheck() {
 	$search = preg_replace($reg, '', $_SERVER['SCRIPT_FILENAME']);
 	$search .= "/.ht-inc/maintenance/";
 	$files = glob("$search*");
+	if(! is_array($files))
+		return;
 	$inmaintenance = 0;
 	foreach($files as $file) {
 		if(! preg_match("|^$search([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})$|", $file, $matches))
@@ -3475,11 +3477,11 @@ function isAvailable($images, $imageid, 
 		$computerids = array();
 		$currentids = array();
 		$blockids = array();
-		$skipRemoveUsedBlock = 0;
+		$altRemoveBlockCheck = 0;
 		// if we are modifying a request and it is after the start time, only allow
 		// the scheduled computer(s) to be modified
 		if($requestid && datetimeToUnix($requestData["start"]) <= time()) {
-			$skipRemoveUsedBlock = 1;
+			$altRemoveBlockCheck = 1;
 			foreach($requestData["reservations"] as $key2 => $res) {
 				if($res["imageid"] == $imageid) {
 					$compid = $res["computerid"];
@@ -3576,7 +3578,13 @@ function isAvailable($images, $imageid, 
 		$blockids = array_diff($blockids, $usedComputerids);
 
 		# remove computers from list that are allocated to block allocations
-		if(! count($blockids) && ! $skipRemoveUsedBlock) {
+		if($altRemoveBlockCheck) {
+			if(editRequestBlockCheck($computerids[0], $imageid, $start, $end)) {
+				semUnlock();
+				return 0;
+			}
+		}
+		elseif(! count($blockids)) {  # && ! $altRemoveBlockCheck
 			$usedBlockCompids = getUsedBlockComputerids($start, $end);
 			$computerids = array_diff($computerids, $usedBlockCompids);
 			$currentids = array_diff($currentids, $usedBlockCompids);
@@ -3812,6 +3820,46 @@ function checkOverlap($start, $end, $max
 
 ////////////////////////////////////////////////////////////////////////////////
 ///
+/// \fn editRequestBlockCheck($compid, $imageid, $start, $end)
+///
+/// \param $compid - id of computer to check
+/// \param $imageid - id of image being checked
+/// \param $start - start of time period in unix timestamp format
+/// \param $end - end of time period in unix timestamp format
+///
+/// \return 1 if time period overlaps with a block allocation unavailable to the
+/// logged in user; 0 if not
+///
+/// \brief checks to see if $compid is part of a block allocation that the
+/// current user is not part of or is set for a different image than what the
+/// user is currently using on the computer
+///
+////////////////////////////////////////////////////////////////////////////////
+function editRequestBlockCheck($compid, $imageid, $start, $end) {
+	global $user;
+	$groupids = implode(',', array_keys($user['groups']));
+	if(! count($user['groups']))
+		$groupids = "''";
+	$startdt = unixToDatetime($start);
+	$enddt = unixToDatetime($end);
+	$query = "SELECT bc.computerid "
+	       . "FROM blockComputers bc, "
+	       .      "blockTimes bt, "
+	       .      "blockRequest r "
+	       . "WHERE bc.blockTimeid = bt.id AND "
+	       .       "bt.blockRequestid = r.id AND "
+	       .       "bc.computerid = $compid AND "
+	       .       "(bt.start - INTERVAL 15 MINUTE) < '$enddt' AND "
+	       .       "bt.end > '$startdt' AND "
+	       .       "(r.groupid NOT IN ($groupids) OR "
+	       .       "r.imageid != $imageid) AND "
+	       .       "r.status = 'accepted'";
+	$qh = doQuery($query, 101);
+	return(mysql_num_rows($qh));
+}
+
+////////////////////////////////////////////////////////////////////////////////
+///
 /// \fn getReloadStartTime()
 ///
 /// \return unix timestamp
@@ -6192,7 +6240,7 @@ function sortComputers($a, $b) {
 /// \param $start - starting time in unix timestamp form
 /// \param $end - ending time in unix timestamp form
 /// \param $allocatedcompids - array of computer ids that have already been
-/// allocated while processing this block allocation
+/// allocated while processing this reservation
 ///
 /// \return an array of computer ids
 ///