public static function getConn(RODSAccount $account)
 {
     $manager = $GLOBALS['RODSConnManager'];
     $conn = new RODSConn($account);
     $conn_sig = $conn->getSignature();
     if (!isset($manager->conn_map[$conn_sig])) {
         $manager->conn_map[$conn_sig] = array();
     }
     //check if there is any opened connection idle
     foreach ($manager->conn_map[$conn_sig] as &$opened_conn) {
         if ($opened_conn->isIdle()) {
             //$opened_conn->lock();
             $account = $opened_conn->getAccount();
             //update account if needed...
             return $opened_conn;
         }
     }
     //check if there is any more new connection allowed
     if (count($manager->conn_map[$conn_sig]) < MAX_NUM_CONN_PER_USER_SERVER) {
         $conn->connect();
         $id = count($manager->conn_map[$conn_sig]);
         $manager->conn_map[$conn_sig][$id] = $conn;
         $conn->setId($id);
         //$conn->lock();
         $account = $conn->getAccount();
         //update account if needed...
         return $conn;
     }
     //because PHP doesn't support multithread, if we run out of connections,
     //there is probably something went wrong.
     throw new RODSException("Unexpectedly ran out of connections. Maybe some connections are not released??? ", "PERR_INTERNAL_ERR");
     //if no connection are available, sleep for 100ms and retry
     usleep(100);
     echo "i am sleeping... <br/> \n";
     return RODSConnManager::getConn($account);
 }
$home_dir_str = '/tempZone/home/rods';
try {
    echo "--- trying to connect --- " . microtime() . " <br/>\n";
    $conn = RODSConnManager::getConn($account);
    echo "--- trying temp password #1 --- " . microtime() . " <br/>\n";
    $key = $conn->connect();
    $key = $conn->getKeyForTempPassword();
    echo "key = {$key} <br/> \n";
    $temppass = $conn->getTempPassword($key);
    echo "temppass = {$temppass} <br/> \n";
    $account2 = clone $account;
    $account2->pass = $temppass;
    echo "--- trying to connect with temp password--- " . microtime() . " <br/>\n";
    $conn2 = new RODSConn($account2);
    $conn2->connect();
    echo "--- temp password #1 passed --- " . microtime() . " <br/>\n";
    echo "--- trying temp password #2 --- " . microtime() . " <br/>\n";
    $temppass = $account->getTempPassword();
    echo "temppass#2 = {$temppass} <br/> \n";
    $account2 = clone $account;
    $account2->pass = $temppass;
    echo "--- trying to connect with temp password #2 --- " . microtime() . " <br/>\n";
    $conn2 = new RODSConn($account2);
    $conn2->connect();
    echo "--- temp password #2 passed --- " . microtime() . " <br/>\n";
    echo "--- test successful! --- " . microtime() . " <br/>\n";
} catch (RODSException $e) {
    echo "--- test failed! --- " . microtime() . " <br/>\n";
    echo $e;
    echo $e->showStackTrace();
}
Exemplo n.º 3
0
<?php

require_once "../src/Prods.inc.php";
$account = new RODSAccount("localhost", 1247, "rods", "rods", "tempZone");
$rule_body = "printHello||print_hello|nop";
$input_params = array();
$out_params = array('ruleExecOut');
try {
    $start_time = microtime(true);
    $conn = new RODSConn($account);
    $conn->connect();
    $results = $conn->execUserRule($rule_body, $input_params, $out_params);
    var_dump($results);
    $conn->disconnect();
    $rule = new ProdsRule($account, $rule_body, $input_params, $out_params);
    $results = $rule->execute();
    var_dump($results);
    $end_time = microtime(true);
    $exec_time = $end_time - $start_time;
    echo "--- test successful!  in ({$exec_time} sec) --- <br/>\n";
} catch (RODSException $e) {
    echo "--- test failed! --- <br/>\n";
    echo $e;
    echo $e->showStackTrace();
}