function addRequest($forimaging = 0, $revisionid = array()) { global $requestInfo, $user; $startstamp = unixToDatetime($requestInfo["start"]); $endstamp = unixToDatetime($requestInfo["end"]); $now = time(); if ($requestInfo["start"] <= $now) { $start = unixToDatetime($now); $nowfuture = "now"; } else { $start = $startstamp; $nowfuture = "future"; } addLogEntry($nowfuture, $start, $endstamp, 1, $requestInfo["imageid"]); $qh = doQuery("SELECT LAST_INSERT_ID() FROM log", 131); if (!($row = mysql_fetch_row($qh))) { abort(132); } $logid = $row[0]; $query = "INSERT INTO changelog " . "(logid, " . "start, " . "end, " . "timestamp) " . "VALUES " . "({$logid}, " . "'{$start}', " . "'{$endstamp}', " . "NOW())"; doQuery($query, 136); # add single entry to request table $query = "INSERT INTO request " . "(stateid, " . "userid, " . "laststateid, " . "logid, " . "forimaging, " . "start, " . "end, " . "daterequested) " . "VALUES " . "(13, " . "{$user['id']}, " . "13, " . "{$logid}, " . "{$forimaging}, " . "'{$startstamp}', " . "'{$endstamp}', " . "NOW())"; $qh = doQuery($query, 136); $qh = doQuery("SELECT LAST_INSERT_ID() FROM request", 134); if (!($row = mysql_fetch_row($qh))) { abort(135); } $requestid = $row[0]; # add requestid to log entry $query = "UPDATE log " . "SET requestid = {$requestid} " . "WHERE id = {$logid}"; doQuery($query, 101); # add an entry to the reservation table for each image # NOTE: make sure parent image is the first entry we add # so that it has the lowest reservationid foreach ($requestInfo["images"] as $key => $imageid) { if (array_key_exists($imageid, $revisionid) && !empty($revisionid[$imageid])) { $imagerevisionid = $revisionid[$imageid]; } else { $imagerevisionid = getProductionRevisionid($imageid); } $computerid = $requestInfo["computers"][$key]; $mgmtnodeid = $requestInfo['mgmtnodes'][$key]; $query = "INSERT INTO reservation " . "(requestid, " . "computerid, " . "imageid, " . "imagerevisionid, " . "managementnodeid) " . "VALUES " . "({$requestid}, " . "{$computerid}, " . "{$imageid}, " . "{$imagerevisionid}, " . "{$mgmtnodeid})"; doQuery($query, 133); addSublogEntry($logid, $imageid, $imagerevisionid, $computerid, $mgmtnodeid); } // release semaphore lock semUnlock(); return $requestid; }
function addRequest($forimaging = 0, $revisionid = array(), $checkuser = 1) { global $requestInfo, $user, $uniqid, $mysql_link_vcl; $startstamp = unixToDatetime($requestInfo["start"]); $endstamp = unixToDatetime($requestInfo["end"]); $now = time(); if ($requestInfo["start"] <= $now) { $start = unixToDatetime($now); $nowfuture = "now"; } else { $start = $startstamp; $nowfuture = "future"; } addLogEntry($nowfuture, $start, $endstamp, 1, $requestInfo["imageid"]); $qh = doQuery("SELECT LAST_INSERT_ID() FROM log", 131); if (!($row = mysql_fetch_row($qh))) { abort(132); } $logid = $row[0]; # add single entry to request table $query = "INSERT INTO request " . "(stateid, " . "userid, " . "laststateid, " . "logid, " . "forimaging, " . "start, " . "end, " . "daterequested, " . "checkuser) " . "VALUES " . "(13, " . "{$user['id']}, " . "13, " . "{$logid}, " . "{$forimaging}, " . "'{$startstamp}', " . "'{$endstamp}', " . "NOW(), " . "{$checkuser})"; $qh = doQuery($query, 136); $qh = doQuery("SELECT LAST_INSERT_ID() FROM request", 134); if (!($row = mysql_fetch_row($qh))) { abort(135); } $requestid = $row[0]; # add requestid to log entry $query = "UPDATE log " . "SET requestid = {$requestid} " . "WHERE id = {$logid}"; doQuery($query, 101); # add an entry to the reservation table for each image # NOTE: make sure parent image is the first entry we add # so that it has the lowest reservationid foreach ($requestInfo["images"] as $key => $imageid) { if (array_key_exists($imageid, $revisionid) && !empty($revisionid[$imageid])) { $imagerevisionid = array_shift($revisionid[$imageid]); } else { $imagerevisionid = getProductionRevisionid($imageid); } $computerid = $requestInfo["computers"][$key]; $mgmtnodeid = $requestInfo['mgmtnodes'][$key]; $fromblock = $requestInfo['fromblock'][$key]; if ($fromblock) { $blockdata = $requestInfo['blockdata'][$key]; } else { $blockdata = array(); } addSublogEntry($logid, $imageid, $imagerevisionid, $computerid, $mgmtnodeid, $fromblock, $blockdata); } $query = "INSERT INTO reservation " . "(requestid, " . "computerid, " . "imageid, " . "imagerevisionid, " . "managementnodeid) " . "SELECT {$requestid}, " . "computerid, " . "imageid, " . "imagerevisionid, " . "managementnodeid " . "FROM semaphore " . "WHERE expires > NOW() AND " . "procid = '{$uniqid}'"; doQuery($query); $cnt = mysql_affected_rows($mysql_link_vcl); if ($cnt == 0) { # reached this point SEMTIMEOUT seconds after getting semaphore, clean up and abort $query = "DELETE FROM request WHERE id = {$requestid}"; doQuery($query); $query = "UPDATE log SET wasavailable = 0 WHERE id = {$logid}"; doQuery($query); $query = "DELETE FROM sublog WHERE logid = {$logid}"; doQuery($query); abort(400); } else { $query = "INSERT INTO changelog " . "(logid, " . "start, " . "end, " . "timestamp) " . "VALUES " . "({$logid}, " . "'{$start}', " . "'{$endstamp}', " . "NOW())"; doQuery($query, 136); } // release semaphore lock cleanSemaphore(); return $requestid; }