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(); }
<?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(); }