Berkeley DB: log_get
Полезная информация

log_get


#include <db.h>

int log_get(DB_LOG *logp, DB_LSN *lsn, DBT *data, u_int32_t flags);

Description

The log_get function implements a cursor inside of the log, retrieving records from the log according to the lsn and flags arguments.

The data field of the data structure is set to the record retrieved and the size field indicates the number of bytes in the record. See DBT for a description of other fields in the data structure. When multiple threads are using the returned log handle concurrently, either the DB_DBT_MALLOC or DB_DBT_USERMEM flags must be specified for any DBT used for data retrieval.

The flags argument must be set to exactly one of the following values:

DB_CHECKPOINT
The last record written with the DB_CHECKPOINT flag specified to the log_put function is returned in the data argument. The lsn argument is overwritten with the DB_LSN of the record returned. If no record has been previously written with the DB_CHECKPOINT flag specified, the first record in the log is returned.

If the log is empty, the log_get function will return DB_NOTFOUND.

DB_FIRST
The first record from any of the log files found in the log directory is returned in the data argument. The lsn argument is overwritten with the DB_LSN of the record returned.

If the log is empty, the log_get function will return DB_NOTFOUND.

DB_LAST
The last record in the log is returned in the data argument. The lsn argument is overwritten with the DB_LSN of the record returned.

If the log is empty, the log_get function will return DB_NOTFOUND.

DB_NEXT
The current log position is advanced to the next record in the log and that record is returned in the data argument. The lsn argument is overwritten with the DB_LSN of the record returned.

If the pointer has not been initialized via DB_FIRST, DB_LAST, DB_SET, DB_NEXT, or DB_PREV, log_get will return the first record in the log. If the last log record has already been returned or the log is empty, the log_get function will return DB_NOTFOUND.

If the log was opened with the DB_THREAD flag set, calls to log_get with the DB_NEXT flag set will return EINVAL.

DB_PREV
The current log position is moved to the previous record in the log and that record is returned in the data argument. The lsn argument is overwritten with the DB_LSN of the record returned.

If the pointer has not been initialized via DB_FIRST, DB_LAST, DB_SET, DB_NEXT, or DB_PREV, log_get will return the last record in the log. If the first log record has already been returned or the log is empty, the log_get function will return DB_NOTFOUND.

If the log was opened with the DB_THREAD flag set, calls to log_get with the DB_PREV flag set will return EINVAL.

DB_CURRENT
Return the log record currently referenced by the log.

If the log pointer has not been initialized via DB_FIRST, DB_LAST, DB_SET, DB_NEXT, or DB_PREV, or if the log was opened with the DB_THREAD flag set, log_get will return EINVAL.

DB_SET
Retrieve the record specified by the lsn argument. If the specified DB_LSN is invalid (e.g., does not appear in the log) log_get will return EINVAL.

Otherwise, the log_get function returns the value of errno on failure, and 0 on success.

Errors

If a fatal error occurs in Berkeley DB, the log_get function may fail and return DB_RUNRECOVERY, at which point all subsequent database calls will also return DB_RUNRECOVERY.

The log_get function may fail and return errno for any of the errors specified for the following Berkeley DB and C library functions: abort(3), atoi(3), close(3), closedir(3), fcntl(3), fflush(3), fprintf(3), free(3), getenv(3), getpid(3), getuid(3), isdigit(3), lseek(3), malloc(3), memcpy(3), memset(3), open(3), opendir(3), read(3), readdir(3), realloc(3), sigfillset(3), sigprocmask(3), snprintf(3), stat(3), strchr(3), strerror(3), strlen(3), strncmp(3), unlink(3), vfprintf(3), and vsnprintf(3).

In addition, the log_get function may fail and return errno for the following conditions:

EINVAL
An invalid flag value or parameter was specified.

The DB_FIRST flag was specified and no log files were found.

See Also

log_archive, log_close, log_compare, log_file, log_flush, log_get, log_open, log_put, log_register, log_stat, log_unlink and log_unregister.