Esempio n. 1
0
function DoCache(&$req)
{
    global $user_req;
    global $verbose;
    global $ROOT_DB;
    global $syslock;
    try {
        $reader = $req->CreateReader(REQUEST::READER_FORBID_CACHEREADER);
    } catch (ADEIException $e) {
        if ($e->getCode() == ADEIException::DISCONNECTED) {
            return;
        }
        $e->logInfo(translate("READER constructor is failed"), $req);
        return $req->GetLocationString() . ", Error: " . $e->getInfo();
    }
    try {
        $opts =& $req->GetOptions();
        $rootdb = $opts->Get('root_database');
        $list = $req->GetGroups($reader);
    } catch (ADEIException $e) {
        $e->logInfo(translate("Problem processing options"), $reader);
        return $req->GetLocationString() . ", Error: " . $e->getInfo();
    }
    if ($rootdb) {
        if (strchr($rootdb, "/")) {
            $db_info = false;
            $inq_app = adei_app("csv2root", "--file " . $rootdb . " --inquiry-latest-data", true);
            $app = adei_app("csv2root", "--file " . $rootdb, true);
        } else {
            try {
                $db_info = $ROOT_DB;
                $db_info['database'] = $rootdb;
                $database = new DATABASE($db_info);
            } catch (ADEIException $e) {
                unset($db_info['database']);
                try {
                    $database = new DATABASE($ROOT_DB);
                    $database->CreateDatabase($rootdb);
                } catch (ADEIException $e) {
                    $e->logInfo(translate("Problem accessing ROOT database \"%s\"", $rootdb), $req);
                    echo translate("Problem accessing ROOT database \"%s\": %s\n", $rootdb, $e->getInfo());
                    $rootdb = false;
                }
            }
            if ($rootdb) {
                $conprm = $db_info['driver'] . "://" . $db_info['host'] . ($db_info['port'] ? ":" . $db_info['port'] : "") . "/" . $rootdb;
                $inq_app = adei_app("csv2root", "--db " . $conprm . " --inquiry-latest-data", true);
                $app = adei_app("csv2root", "--db " . $conprm, true);
            }
        }
        if ($rootdb) {
            if (!$app || !$inq_app) {
                echo "csv2root is not present";
                $rootdb = false;
            } else {
                $groups = $reader->GetGroupList(REQUEST::NEED_INFO);
            }
        }
    }
    foreach ($list as $gid => $greq) {
        if (isset($user_req->props['db_group']) && $user_req->props['db_group'] != $gid) {
            continue;
        }
        if ($verbose) {
            echo "{$greq->props['db_server']} -- {$greq->props['db_name']} -- {$gid}:";
        }
        $syslocked = false;
        $prelocked = false;
        try {
            $cache = $greq->CreateCacheUpdater($reader);
            $syslock->Lock(LOCK::BLOCK);
            $syslocked = true;
            if (!$cache->PreLock()) {
                if ($verbose) {
                    echo " busy\n";
                }
                continue;
            }
            $prelocked = true;
            $syslocked = false;
            $syslock->UnLock();
            $cache->Update($ivl = NULL, CACHE::DIM_AUTO, verbose ? CACHE::VERBOSE : 0);
            $prelocked = false;
            $cache->UnLock();
            if ($rootdb) {
                $grname = " --group \"" . $groups[$gid]["name"] . "\"";
                ROOTCache($cache, $db_info, $app . $grname, $inq_app . $grname, $conprm ? $conprm : $rootdb);
            }
            unset($cache);
        } catch (ADEIException $e) {
            if ($prelocked) {
                $cache->UnLock();
            }
            if ($syslocked) {
                $syslock->UnLock();
            }
            if ($e->getCode() != ADEIException::DISABLED) {
                $e->logInfo(translate("Failed to update CACHE"), $cache ? $cache : $greq);
                if ($verbose) {
                    echo " failed\n";
                }
                return $greq->GetLocationString() . ", Error: " . $e->getInfo();
            }
        }
        if ($verbose) {
            echo " done\n";
        }
    }
    return 0;
}