2007年1月15日月曜日

OpenLDAPのBDBバックエンド

BDBのロックを行うのは、LOCK_GET()

bdb_cache_entry_db_lock()の中で、BDBのロックを行っている。
BDBのキャッシュを操作する際(add,deleteなど)にBDBのロックをかける。

bdb_cache_lru_add()
... DB_LOCK_WRITEモード、DB_LOCK_NOWAIT

bdb_cache_find_id()
... DB_LOCK_READモード、DB_LOCK_NOWAITなし

bdb_cache_add()
... DB_LOCK_WRITEモード、DB_LOCK_NOWAITなし

bdb_cache_delete_entry()
... DB_LOCK_WRITEモード、DB_LOCK_NOWAIT

DB_LOCK_NOWAITモードのときは、ロック取得に失敗した場合、すぐにDB_LOCK_NOTGRANTEDのエラーが返される。DB_LOCK_NOWAITモードでないときは、ロック取得できるまで待つ。

BDBでのロック取得処理
lock/lock.cの__lock_get()で行われる。

実際は__lock_get_internal()で処理が行われる。

BDBのロックの際にはlockerと呼ばれるロックを誰が実行したかのIDが使われる。
このlockerは、OpenLDAPでbdbのdbをopenした際に、XLOCK_ID()で割り当てられる。
XLOCK_ID()は、BDBの__lock_id()を呼び出しており、新しいlock_idを割り当てるようになっている。



0 件のコメント:

コメントを投稿