Question

I am having a problem opening up an OrientDB database (orientdb-community-1.6.3).

I can access the server using $db = new OrientDB(...).

I can connect with my user admin using $dbConnected = $db->connect(...).

But opening my database, or checking for it's existence are giving me the error: com.orientechnologies.orient.core.exception.OStorageException: Cannot open the storage 'mydb' because it does not exist in path: /Users/kent/dev/Database/releases/orientdb-community-1.6.3/databases//../databases/mydb

More details:

From the OrientDB console, works fine:

orientdb> connect plocal:../databases/mydb admin admin
Connecting to database [plocal:../databases/mydb] with user 'admin'...OK
orientDB>

PHP Code snippet:

$dbInfo = array (
    'datasource' => 'Database/OrientDB',
    'persistent' => true,
    'host' => 'localhost',
    'port' => 2424,
    'timeout' => 60,
    'serverUsername' => 'admin',
    'serverPassword' => 'admin',
    'database' => 'plocal:../databases/mydb',
    'databaseUsername' => 'admin',
    'databasePassword' => 'admin'
);

// New OrientDB instance
try {
    $db = new OrientDB ( $dbInfo ['host'], $dbInfo ['port'], $dbInfo ['timeout'] );
    error_log ( "dbUtil.php:dbOpen: new Orient:db:" . print_r ( $db, true ) );
} catch ( Exception $e ) {
    // Report error connecting to server
    $exception = 404;
    $message .= 'Database server ' . $dbInfo ['host'] . ':' . $dbInfo ['port'] . ' did not respond. ' . $e->getMessage ();
}

if ($db) {
    // Made the connection to the server, connect as user $dbInfo ['serverUsername']
    try {
        $dbConnected = $db->connect ( $dbInfo ['serverUsername'], $dbInfo ['serverPassword'] );
        error_log ( "dbUtil.php:dbOpen:dbConnected:" . $dbConnected );
    } catch ( OrientDBException $e ) {
        // Report error on $db->connect
        $exception = 400;
        $message .= 'Unable to connect to ' . $dbInfo ['datasource'] . ' as user ' . $dbInfo ['serverUsername'] . '. ' . $e->getMessage ();
    }

    // Open the database
    if ($dbConnected) {
        try {
            $dbExists = $db->DBExists ( $dbInfo ['database'] );
            error_log ( "dbUtil.php:dbOpen(" . $dbInfo ['database'] . "):dbExists:" . $dbExists );
            if (! $dbExists) {
                // Report database does not exist
                $exception = 404;
                $message .= "Database " . $dbInfo ['database'] . ' does not exist.';
            }
        } catch ( OrientDBException $e ) {
            // Report err on $db->DBExists
            $exception = 404;
            $message .= "Error checking the existence of database " . $dbInfo ['database'] . ". " . $e->getMessage ();
        }
        if ($dbExists) {
            try {
                $dbClusters = $db->DBOpen ( $dbInfo ['database'], $dbInfo ['databaseUsername'], $dbInfo ['databasePassword'] );
                error_log ( "dbUtil.php:dbOpen:DBOpen:dbClusters:" . print_r ( $dbClusters, true ) );
            } catch ( OrientDBException $e ) {
                // Report error opening database
                $exception = 400;
                $message .= "Error opening database " . $dbInfo ['datasource'] . ' as user ' . $dbInfo ['databaseUsername'] . '. ' . $e->getMessage ();
            }
        }
    }
}

// Any problems?
if ($exception != 200) {
    throw new RestException ( $exception, $message );
}

Error log:

[13-Jan-2014 04:33:22 UTC] dbUtil.php:dbOpen: new Orient:db:OrientDB Object
(
[host:OrientDB:private] => localhost
[port:OrientDB:private] => 2424
[socket] => OrientDBSocket Object
    (
        [socket:OrientDBSocket:private] => Resource id #2
        [bufferLen:OrientDBSocket:private] => 16384
        [debug] => 
    )

[debug:OrientDB:private] => 
[clientVersion] => 15
[protocolVersion] => 
[connected:protected] => 
[DBOpen:protected] => 
[active:protected] => 1
[sessionIDServer:OrientDB:private] => 
[sessionIDDB:OrientDB:private] => 
[cachedRecords] => Array
    (
    )

)

[13-Jan-2014 04:33:22 UTC] dbUtil.php:dbOpen:dbConnected:1
[13-Jan-2014 04:33:22 UTC] dbUtil.php:dbOpen(plocal:../databases/mydb):dbExists:

ls of path in error message:

$ ls -la /Users/kent/dev/Database/releases/orientdb-community-1.6.3/databases//../databases/mydb
total 5984
drwxr-xr-x  58 kent  staff    1972 Jan 12 20:47 .
drwxr-xr-x   4 kent  staff     136 Jan 12 16:43 ..
-rw-r--r--   1 kent  staff   66560 Jan 12 20:47 ORole.name.sbt
-rw-r--r--   1 kent  staff   66560 Jan 12 20:47 OUser.name.sbt
..

Any ideas?

Thank you

** Updated 2014-01-19 ** Added FINEST logging to server.

 2014-01-19 19:06:11:597 FINE [OMMapManagerNew] flushing pages in memory... [OMMapManagerNew]
 2014-01-19 19:06:11:597 FINE [OMMapManagerNew] flushed 0/0 blocks [OMMapManagerNew]
 2014-01-19 19:06:13:731 CONF Remote client connected from: OClientConnection [id=34, source=?, since=1390187173731] [OClientConnectionManager]
 2014-01-19 19:06:13:733 CONF Remote client connected from: OClientConnection [id=35, source=/127.0.0.1:60842, since=1390187173732] [OClientConnectionManager]
 2014-01-19 19:06:13:736 FINE Disconnecting connection OClientConnection [id=35, source=/127.0.0.1:60842, since=1390187173732]... [OClientConnectionManager]
 2014-01-19 19:06:13:736 FINE Disconnected connection OClientConnection [id=35, source=/127.0.0.1:60842, since=1390187173732] found 1 channels [OClientConnectionManager]
 2014-01-19 19:06:14:080 FINE [OClientConnectionManager] found and removed pending closed channel 34 (Socket[addr=/127.0.0.1,port=60842,localport=2424]) [OClientConnectionManager$1]
 2014-01-19 19:06:41:597 FINE [OMMapManagerNew] flushing pages in memory... [OMMapManagerNew]
 2014-01-19 19:06:41:597 FINE [OMMapManagerNew] flushed 0/0 blocks [OMMapManagerNew]

Added error_log ( "dbUtil.php.dbOpen:list of databases:" . print_r($db->DBList(), true)); after connecting to the server:

 [20-Jan-2014 03:06:13 UTC] dbUtil.php.dbOpen:list of databases:Array
 (
   [docitt] => plocal:/Users/kent/dev/Database/releases/orientdb-community-1.6.3/databases/docitt
   [GratefulDeadConcerts] => plocal:/Users/kent/dev/Database/releases/orientdb-community-1.6.3/databases/GratefulDeadConcerts
 )

Then used plocal:/Users/kent/dev/Database/releases/orientdb-community-1.6.3/databases/docitt as the database name. Same error: Database plocal:/Users/kent/dev/Database/releases/orientdb-community-1.6.3/databases/docitt does not exist.

Was it helpful?

Solution

The database I was trying to open plocal:../databases/mydb was a plocal and graph database type (the current default for orientdb-community-1.6.3). OrientDB-PHP does not yet support graph database type only document :(

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top