--- freebusycache.class.php.in 2006-04-10 12:32:06.000000000 +0200 +++ freebusycache.class.php 2006-07-31 12:18:57.000000000 +0200 @@ -20,7 +20,6 @@ /*! To load/store partial freebusy lists and their ACLs */ - require_once('@kolab_php_module_prefix@freebusy/misc.php'); require_once('@resmgr_confdir@/freebusy.conf'); @@ -28,11 +27,30 @@ function FreeBusyCache( $basedir, $extended = false ) { $this->basedir = $basedir; $this->extended = $extended; - /* make sure that a database really exists before accessing it */ + /* make sure that a database really exists before accessing it */ if( !file_exists( $this->basedir.'/pfbcache.db' ) ) { - $db = dba_open( $this->basedir.'/pfbcache.db', 'cd' ); - dba_close($db); - } + $db=$this->saveConnect($this->basedir.'/pfbcache.db','cd','gdbm'); + //while ( !$db = dba_open( $this->basedir.'/pfbcache.db', 'cd' )) {sleep(5)}; + dba_close($db); + } + } + + function saveConnect($file,$mode,$type) { + $counter=0; + $dbhandle=FALSE; + myLog("saveConnect : <$file>,<$mode>,<$type>", RM_LOG_DEBUG); + + while ( ! $dbhandle && $counter < 30) { + $dbhandle=dba_open($file,$mode,$type); + if ( ! $dbhandle) { + $counter++; + myLog("Counter : $counter", RM_LOG_DEBUG); + sleep(5); + myLog("Slept 5 seconds", RM_LOG_DEBUG); + } + } + myLog(" returning :".print_r($dbhandle,true), RM_LOG_DEBUG); + return $dbhandle; } function store( $filename, $fbdata, $acl, $relevance ) { @@ -50,11 +68,8 @@ // false data means delete the pfb unlink($fbfilename); $oldacl = $this->loadACL( $filename ); - if( isset($params['dbtype']) ) { - $db = dba_open( $this->basedir.'/pfbcache.db', 'cd', $params['dbtype'] ); - } else { - $db = dba_open( $this->basedir.'/pfbcache.db', 'cd' ); - } + $db=$this->saveConnect($this->basedir.'/pfbcache.db','cd','gdbm'); + //while (! $db = dba_open( $this->basedir.'/pfbcache.db', 'cd', 'gdbm' )); if( $db === false ) return false; foreach( $oldacl as $ac ) { if( dba_exists( $ac['USER'], $db ) ) { @@ -101,11 +116,8 @@ default: $perm = 'a'; } - if( isset($params['dbtype']) ) { - $db = dba_open( $this->basedir.'/pfbcache.db', 'cd', $params['dbtype'] ); - } else { - $db = dba_open( $this->basedir.'/pfbcache.db', 'cd' ); - } + $db= $this->saveConnect($this->basedir.'/pfbcache.db','cd','gdbm'); + //while (! $db = dba_open( $this->basedir.'/pfbcache.db', 'cd', 'gdbm' )); if( $db === false ) { myLog('Unable to open freebusy cache db '.$this->basedir.'/pfbcache.db', RM_LOG_ERROR ); @@ -158,11 +170,8 @@ $fbfilename = $this->mkfbfilename($filename); unlink($fbfilename); unlink($this->mkaclfilename($filename)); - if( isset($params['dbtype']) ) { - $db = dba_open( $this->basedir.'/pfbcache.db', 'cd', $params['dbtype'] ); - } else { - $db = dba_open( $this->basedir.'/pfbcache.db', 'cd' ); - } + $db=$this->saveConnect($this->basedir.'/pfbcache.db','cd','gdbm'); + //while (! $db = dba_open( $this->basedir.'/pfbcache.db', 'cd', 'gdbm' )); if( $db === false ) return false; for( $uid = dba_firstkey($db); $uid !== false; $uid = dba_nextkey($db)) { $lst = dba_fetch( $uid, $db ); @@ -176,12 +185,9 @@ function findAll( $uid, $groups ) { global $params; - $lst = array(); - if( isset($params['dbtype']) ) { - $db = dba_open( $this->basedir.'/pfbcache.db', 'rd', $params['dbtype'] ); - } else { - $db = dba_open( $this->basedir.'/pfbcache.db', 'rd' ); - } + $lst = array(); + $db=$this->saveConnect($this->basedir.'/pfbcache.db','rd','gdbm'); + //while (! $db = dba_open( $this->basedir.'/pfbcache.db', 'rd', 'gdbm' )); if( $db === false ) return false; $uids = $groups; for( $i = 0; $i < count($uids); $i++ ) $uids[$i] = 'group:'.$uids[$i]; @@ -197,8 +203,8 @@ } dba_close($db); $lst = array_unique($lst); - myLog( "FreeBusyCache::findAll( $uid, [".join(', ', $groups).'] ) = ['.join(', ',$lst).']', - RM_LOG_DEBUG ); + // myLog( "FreeBusyCache::findAll( $uid, [".join(', ', $groups).'] ) = ['.join(', ',$lst).']', +// RM_LOG_DEBUG ); return $lst; }