Пример #1
0
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;
}
Пример #2
0
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;
}