Author: jfthomps Date: Tue Feb 21 20:25:53 2012 New Revision: 1291988 URL: http://svn.apache.org/viewvc?rev=1291988&view=rev Log: VCL-234 give error when block reservations requests more resources than concurrent use of image
blockallocations.php: modified processBlockAllocationInput - flag an error if the number of seats is greater than the maxconcurrent number of reservations for the image VCL-398 make block allocations tie up concurrent usage of image utils.php: modified isAvailable - changed section that checks for max concurrent usage to count reservations and machines allocated to block allocations Modified: incubator/vcl/trunk/web/.ht-inc/blockallocations.php incubator/vcl/trunk/web/.ht-inc/utils.php Modified: incubator/vcl/trunk/web/.ht-inc/blockallocations.php URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/blockallocations.php?rev=1291988&r1=1291987&r2=1291988&view=diff ============================================================================== --- incubator/vcl/trunk/web/.ht-inc/blockallocations.php (original) +++ incubator/vcl/trunk/web/.ht-inc/blockallocations.php Tue Feb 21 20:25:53 2012 @@ -2915,6 +2915,16 @@ function processBlockAllocationInput() { . ' and ' . MAX_BLOCK_MACHINES . '.'; $err = 1; } + if(! $err) { + $imgdata = getImages(0, $return['imageid']); + $concur = $imgdata[$return['imageid']]['maxconcurrent']; + if($return['seats'] > $concur) { + $errmsg = "The selected image can only have $concur concurrent " + . "reservations. Please reduce the number of requested " + . "seats to $concur or less."; + $err = 1; + } + } if(! $err && $type != 'weekly' && $type != 'monthly' && $type != 'list') { $errmsg = 'You must select one of "Repeating Weekly", "Repeating Monthly", ' . 'or "List of Dates/Times".'; Modified: incubator/vcl/trunk/web/.ht-inc/utils.php URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/utils.php?rev=1291988&r1=1291987&r2=1291988&view=diff ============================================================================== --- incubator/vcl/trunk/web/.ht-inc/utils.php (original) +++ incubator/vcl/trunk/web/.ht-inc/utils.php Tue Feb 21 20:25:53 2012 @@ -3753,20 +3753,40 @@ function isAvailable($images, $imageid, foreach($requestInfo["images"] as $key => $imageid) { # check for max concurrent usage of image if($images[$imageid]['maxconcurrent'] != NULL) { - $query = "SELECT COUNT(rs.imageid) AS currentusage " + $compids = array(); + $reloadid = getUserlistID('vclreload@Local'); + $query = "SELECT rs.computerid " . "FROM reservation rs, " . "request rq " . "WHERE '$startstamp' < (rq.end + INTERVAL 900 SECOND) AND " . "'$endstamp' > rq.start AND " . "rs.requestid = rq.id AND " . "rs.imageid = $imageid AND " - . "rq.stateid NOT IN (1,5,11,12,16,17)"; + . "rq.stateid NOT IN (1,5,11,12,16,17) AND " + . "rq.userid != $reloadid"; $qh = doQuery($query, 101); + while($row = mysql_fetch_assoc($qh)) + $compids[] = $row['computerid']; + $usagecnt = count($compids); + $allids = implode("','", $compids); + $query = "SELECT COUNT(bc.imageid) AS currentusage " + . "FROM blockComputers bc, " + . "blockRequest br, " + . "blockTimes bt " + . "WHERE bc.blockTimeid = bt.id AND " + . "bt.blockRequestid = br.id AND " + . "bc.imageid = $imageid AND " + . "bc.computerid NOT IN ('$allids') AND " + . "'$startstamp' < (bt.end + INTERVAL 900 SECOND) AND " + . "'$endstamp' > bt.start AND " + . "bt.skip != 1 AND " + . "br.status != 'deleted'"; + $qh = doQuery($query); if(! $row = mysql_fetch_assoc($qh)) { semUnlock(); return 0; } - if($row['currentusage'] >= $images[$imageid]['maxconcurrent']) { + if(($usagecnt + $row['currentusage']) >= $images[$imageid]['maxconcurrent']) { semUnlock(); return -1; }