# Berkeley DB environment is an encapsulation of one or more databases, # log files and shared information about the database environment such # as shared memory buffer cache pages. # # The simplest way to administer a Berkeley DB application environment # is to create a single home directory that stores the files for the # applications that will share the environment. The environment home # directory must be created before any Berkeley DB applications are run. # Berkeley DB itself never creates the environment home directory. The # environment can then be identified by the name of that directory. class BDB::Env class << self #open the Berkeley DB environment # #* home # If this argument is non-NULL, its value may be used as the # database home, and files named relative to its path. # #* mode # mode for creation (see chmod(2)) # #* flags # must be set to 0 or by OR'ing with # # * BDB::INIT_CDB Initialize locking. # * BDB::INIT_LOCK Initialize the locking subsystem. # * BDB::INIT_LOG Initialize the logging subsystem. # * BDB::INIT_MPOOL Initialize the shared memory buffer pool subsystem. # * BDB::INIT_TXN Initialize the transaction subsystem. # * BDB::INIT_TRANSACTION # Equivalent to DB_INIT_LOCK|DB_INIT_MPOOL|DB_INIT_TXN|DB_INIT_LOG # * BDB::RECOVER # Run normal recovery on this environment before opening it for normal # use. If this flag is set, the DB_CREATE flag must also be set since # the regions will be removed and recreated. # # * BDB::RECOVER_FATAL # Run catastrophic recovery on this environment before opening # it for normal use. If this flag is set, the DB_CREATE flag # must also be set since the regions will be removed and recreated. # # * BDB::USE_ENVIRON # The Berkeley DB process' environment may be permitted to # specify information to be used when naming files # # * BDB::USE_ENVIRON_ROOT # The Berkeley DB process' environment may be permitted to # specify information to be used when naming files; # if the DB_USE_ENVIRON_ROOT flag is set, environment # information will be used for file naming only for users with # appropriate permissions # # * BDB::CREATE # Cause Berkeley DB subsystems to create any underlying # files, as necessary. # # * BDB::LOCKDOWN # Lock shared Berkeley DB environment files and memory mapped # databases into memory. # # * BDB::NOMMAP # Always copy read-only database files in this environment # into the local cache instead of potentially mapping # them into process memory # # * BDB::PRIVATE # Specify that the environment will only be accessed by a # single process # # * BDB::SYSTEM_MEM # Allocate memory from system shared memory instead of from # memory backed by the filesystem. # # * BDB::TXN_NOSYNC # Do not synchronously flush the log on transaction commit or # prepare. This means that transactions exhibit the # ACI (atomicity, consistency and isolation) properties, but not # D (durability), i.e., database integrity will # be maintained but it is possible that some number of the # most recently committed transactions may be undone # during recovery instead of being redone. # # * BDB::CDB_ALLDB # For Berkeley DB Concurrent Data Store applications, perform # locking on an environment-wide basis rather than per-database. # #* options # Hash, Possible options are (see the documentation of Berkeley DB # for more informations) # # * set_app_dispatch : configure application recovery interface (DB >= 4.1) # * set_cachesize : set the database cache size # * set_data_dir : set the environment data directory (DB >= 3) # * set_encrypt : set the environment cryptographic key (DB >= 4.1) # * set_feedback : set feedback callback (DB >= 3) # * set_flags : environment configuration (DB >= 3.2) # * set_lg_bsize : set log buffer size (DB >= 3) # * set_lg_dir : set the environment logging directory (DB >= 3) # * set_lg_max : set log file size # * set_lg_regionmax : set logging region size (DB >= 3) # * set_lk_conflicts : set lock conflicts matrix (DB >= 3) # * set_lk_detect : set automatic deadlock detection # * set_lk_max_lockers : set maximum number of lockers # * set_lk_max_locks : set maximum number of locks # * set_lk_max_objects : set maximum number of lock objects # * set_rep_transport : configure replication transport (DB >= 4) # * set_rep_limit : limit data sent in response to a single message (DB >= 4.1) # * set_rep_nsites : configure replication group site count (DB >= 4.5) # * set_rep_priority : configure replication site priority (DB >= 4.5) # * set_rep_config : configure the replication subsystem (DB >= 4.5) # * set_rep_timeout : configure replication timeouts (DB >= 4.5) # * set_rpc_server : establish an RPC server connection (DB >= 3.1) # * set_tas_spins : set the number of test-and-set spins (DB >= 3) # * set_tmp_dir : set the environment temporary file directory (DB >= 3) # * set_timeout : set lock and transaction timeout (DB >= 4) # * set_tx_max : set maximum number of transactions (DB >= 3) # * set_tx_timestamp : set recovery timestamp (DB >= 3.1) # * set_verbose : set verbose messages # * set_verb_chkpoint :display checkpoint location information when searching the log for checkpoints. (DB >= 3) # * set_verb_deadlock : display additional information when doing deadlock detection. (DB >= 3) # * set_verb_recovery : display additional information when performing recovery. (DB >= 3) # * set_verb_replication : display additional information when processing replication messages. (DB >= 4) # * set_verb_waitsfor : display the waits-for table when doing deadlock detection. (DB >= 3) # # Proc given to set_feedback, set_app_dispatch and # set_rep_transport can be also specified as a method # (replace the prefix set_ with bdb_) # # For bdb_rep_transport the constant ENVID must be defined # # The constant BDB::ENCRYPT can be used to replace set_encrypt # def open(home, flags = 0, mode = 0, options = {}) end #same than open def create(home, flags = 0, mode = 0, options = {}) end #same than open def new(home, flags = 0, mode = 0, options = {}) end #remove the environnement # def remove() end #same than remove def unlink() end end #close the environnement # def close() end #only with BDB::VERSION_MAJOR == 4 && BDB::VERSION_MINOR >= 1 # #remove the database specified by file and database. If no #database is nil, the underlying file represented by #file is removed, incidentally removing all databases #that it contained. # #The flags value must be set to 0 or BDB::AUTO_COMMIT # def dbremove(file, database = nil, flags = 0) end #only with BDB::VERSION_MAJOR == 4 && BDB::VERSION_MINOR >= 1 # #rename the database specified by file and database to #newname. If database is nil, the underlying file #represented by file is renamed, incidentally renaming all databases #that it contained. # #The flags value must be set to 0 or BDB::AUTO_COMMIT # def dbrename(file, database, newname, flags = 0) end #monitor the progress of some operations # def feedback=(proc) end #return the name of the directory # def home() end #Acquire a locker ID # def lock() end #same than lock def lock_id() end #The lock_detect function runs one iteration of the deadlock #detector. The deadlock detector traverses the lock table, and for each #deadlock it finds, marks one of the participating transactions for #abort. # #type can have one the value BDB::LOCK_OLDEST, #BDB::LOCK_RANDOM or BDB::LOCK_YOUNGUEST # #flags can have the value BDB::LOCK_CONFLICT, in this case #the deadlock detector is run only if a lock conflict has occurred #since the last time that the deadlock detector was run. # #return the number of transactions aborted by the lock_detect function #if BDB::VERSION_MAJOR >= 3 or zero # def lock_detect(type, flags = 0) end #Return lock subsystem statistics # # def lock_stat() end #The log_archive function return an array of log or database file names. # #flags value must be set to 0 or the value BDB::ARCH_DATA, #BDB::ARCH_ABS, BDB::ARCH_LOG # def log_archive(flags = 0) end # #same as log_put(string, BDB::CHECKPOINT) # def log_checkpoint(string) end # #same as log_put(string, BDB::CURLSN) # def log_curlsn(string) end # #Implement an iterator inside of the log # def log_each yield string, lsn end # #same as log_put(string, BDB::FLUSH) # #Without argument, garantee that all records are written to the disk # def log_flush(string = nil) end # #The log_get return an array [String, BDB::Lsn] according to #the flag value. # #flag can has the value BDB::CHECKPOINT, BDB::FIRST, #BDB::LAST, BDB::NEXT, BDB::PREV, BDB::CURRENT # def log_get(flag) end # #The log_put function appends records to the log. It return #an object BDB::Lsn # #flag can have the value BDB::CHECKPOINT, BDB::CURLSN, #BDB::FLUSH # def log_put(string, flag = 0) end # #Implement an iterator inside of the log # def log_reverse_each yield string, lsn end # #return log statistics # def log_stat end #open the database in the current environment. type must be one of #the constant BDB::BTREE, BDB::HASH, BDB::RECNO, #BDB::QUEUE. See open for other #arguments # def open_db(type, name = nil, subname = nil, flags = 0, mode = 0) end #only with BDB::VERSION_MAJOR == 3 && BDB::VERSION_MINOR >= 3 # #iterate over all prepared transactions. The transaction txn #must be made a call to #abort, #commit, #discard # #id is the global transaction ID for the transaction # def recover yield txn, id end #only with BDB::VERSION_MAJOR == 3 && BDB::VERSION_MINOR >= 2 # #flags can have the value BDB::CDB_ALLDB, BDB::NOMMAP #BDB::TXN_NOSYNC # #if onoff is false, the specified flags are cleared # # def set_flags(flags, onoff = true) end #begin a transaction (the transaction manager must be enabled). flags #can have the value DBD::TXN_COMMIT, in this case the transaction #will be commited at end. # def begin(flags = 0) end #same than begin def txn_begin(flags = 0) end #The txn_checkpoint function flushes the underlying memory pool, #writes a checkpoint record to the log and then flushes the log. # #If either kbyte or min is non-zero, the checkpoint is only done #if more than min minutes have passed since the last checkpoint, or if #more than kbyte kilobytes of log data have been written since the last #checkpoint. # def checkpoint(kbyte, min = 0) end #same than checkpoint def txn_checkpoint(kbyte, min = 0) end #Return transaction subsystem statistics # # def stat() end #same than stat def txn_stat() end #Only for DB >= 4 # #Holds an election for the master of a replication group, returning the #new master's ID # #Raise BDB::RepUnavail if the timeout expires # def elect(sites, priority, timeout) end #same than elect def rep_elect(sites, priority, timeout) end #Only for DB >= 4 # #Processes an incoming replication message sent by a member of the #replication group to the local database environment # def process_message(control, rec, envid) end #same than process_message def rep_process_message(control, rec, envid) end #Only for DB >= 4 # #cdata is an identifier #flags must be one of BDB::REP_CLIENT, BDB::REP_MASTER #or BDB::REP_LOGSONLY # def start(cdata, flags) end #same than start def rep_start(cdata, flags) end #Only for DB >= 4.4 # #Reset database file LSN # #The Env#lsn_reset method allows database files to be moved from one transactional #database environment to another. # #fileThe name of the physical file in which the LSNs are to be cleared. #flags must be set to 0 or BDB::ENCRYPT # def lsn_reset(file, flags = 0) end #Only for DB >= 4.4 # #Reset database file ID # #The Env#fileid_reset method allows database files to be copied, and then the copy #used in the same database environment as the original. # #fileThe name of the physical file in which new file IDs are to be created. #flags must be set to 0 or BDB::ENCRYPT # def fileid_reset(file, flags = 0) end #Only for DB >= 4.4 # #There are interfaces in the Berkeley DB library which either directly output informational #messages or statistical information : Env#msgcall is used to set callback which will #called by BDB # #The value given must be nil to unconfigure the callback, or and object #which respond to #call : it will called with a String as argument # def msgcall=(call_proc) end #Only for DB >= 4.4 # #Declare a proc object which returns a unique identifier pair for the current #thread of control. # #The proc must return a pair # *pid: process ID of the current thread # *tid: thread ID of the current thread # def thread_id=(call_proc) end #Only for DB >= 4.4 # #Declare a proc that formats a process ID and thread ID identifier pair for display. # #The proc will be called with 2 arguments and must return a String # def thread_id_string=(call_proc) end #Only for DB >= 4.4 # #Declare a proc that returns if a thread of control (either a true thread or #a process) is still running. # #The proc will be called with 2 arguments (pid, tid) # def is_alive=(call_proc) end #Only for DB >= 4.4 # #The method checks for threads of control (either a true #thread or a process) that have exited while manipulating Berkeley DB library #data structures # #flag is actually unused and must be set to 0 # def failcheck(flag = 0) end #Only for DB >= 4.5 # #Adds a new replication site to the replication manager's list of known sites. # #Return the environment ID assigned to the remote site def repmgr_add_remote(host, port, flag = 0) end #Only for DB >= 4.5 # #Specifies how master and client sites will handle acknowledgment of replication #messages which are necessary for "permanent" records. # #policy must be set to one of the following values #BDB::REPMGR_ACKS_ALL, BDB::REPMGR_ACKS_ALL_PEERS, #BDB::REPMGR_ACKS_NONE, BDB::REPMGR_ACKS_ONE, #BDB::REPMGR_ACKS_ONE_PEER, BDB::REPMGR_ACKS_QUORUM def repmgr_ack_policy=(policy) end #Only for DB >= 4.5 # #Returns the replication manager's client acknowledgment policy. def repmgr_ack_policy end #Only for DB >= 4.5 # #Returns an array with the status of the sites currently known by the #replication manager. def repmgr_site_list end #Only for DB >= 4.5 # #Specifies the host identification string and port number for the local system. def repmgr_set_local_site(host, port, flag = 0) end #Only for DB >= 4.5 # #Starts the replication manager. def repmgr_start(count, flag) end #Only for DB >= 4.5 # #Configures the Berkeley DB replication subsystem. # #which can have the value BDB::REP_CONF_BULK, #BDB::REP_CONF_DELAYCLIENT, BDB::REP_CONF_NOAUTOINIT, #BDB::REP_CONF_NOWAIT # #onoff can have the value true or false def rep_config[]=(which, onoff) end #Only for DB >= 4.5 # #Returns true if the specified which parameter is currently set or not. def rep_config?[](which) end #Only for DB >= 4.5 # #Specifies the total number of sites in a replication group. def rep_nsites=(sites) end #Only for DB >= 4.5 # #Returns the total number of sites in a replication group. def rep_nsites end #Only for DB >= 4.5 # #Specifies the priority in the replication group elections. def rep_priority=(priority) end #Only for DB >= 4.5 # #Returns the database environment priority. def rep_priority end #Only for DB >= 4.5 # #Specifies the timeout in the replication group elections. # #which can have the value BDB::REP_ACK_TIMEOUT, #BDB::REP_ELECTION_TIMEOUT, BDB::REP_ELECTION_RETRY, #BDB::REP_CONNECTION_RETRY def rep_timeout[]=(which, timeout) end #Only for DB >= 4.5 # #Returns the database environment timeout for which def rep_timeout[](which) end end