libmdbx  0.13.0.37 (2024-04-04T17:32:49+03:00)
One of the fastest compact embeddable key-value ACID database without WAL.
Checking and Recovery

Classes

struct  MDBX_chk_line_t
 Виртуальная строка отчета, формируемого при проверке целостности базы данных. More...
 
struct  MDBX_chk_issue_t
 Проблема обнаруженная при проверке целостности базы данных. More...
 
struct  MDBX_chk_scope_t
 Иерархический контекст при проверке целостности базы данных. More...
 
struct  MDBX_chk_histogram
 Гистограмма с некоторой статистической информацией, собираемой при проверке целостности БД. More...
 
struct  MDBX_chk_subdb_t
 Информация о некоторой таблицей ключ-значение, при проверке целостности базы данных. More...
 
struct  MDBX_chk_context_t
 Контекст проверки целостности базы данных. More...
 
struct  MDBX_chk_callbacks_t
 Набор функций обратного вызова используемых при проверке целостности базы данных. More...
 
union  MDBX_chk_scope_t.usr_z
 
union  MDBX_chk_scope_t.usr_v
 
union  MDBX_chk_scope_t.usr_o
 
struct  MDBX_chk_histogram.ranges
 
struct  MDBX_chk_subdb_t.pages
 
struct  MDBX_chk_subdb_t.histogram
 
struct  MDBX_chk_context_t.result
 

Typedefs

typedef struct MDBX_chk_user_subdb_cookie MDBX_chk_user_subdb_cookie_t
 Пользовательский тип для привязки дополнительных данных, связанных с некоторой таблицей ключ-значение, при проверке целостности базы данных. More...
 

Enumerations

enum  MDBX_chk_flags_t {
  MDBX_CHK_DEFAULTS = 0 , MDBX_CHK_READWRITE = 1 , MDBX_CHK_SKIP_BTREE_TRAVERSAL = 2 , MDBX_CHK_SKIP_KV_TRAVERSAL = 4 ,
  MDBX_CHK_IGNORE_ORDER = 8
}
 Флаги/опции для проверки целостности базы данных. More...
 
enum  MDBX_chk_severity {
  MDBX_chk_severity_prio_shift = 4 , MDBX_chk_severity_kind_mask = 0xF , MDBX_chk_fatal = 0x00u , MDBX_chk_error = 0x11u ,
  MDBX_chk_warning = 0x22u , MDBX_chk_notice = 0x33u , MDBX_chk_result = 0x44u , MDBX_chk_resolution = 0x55u ,
  MDBX_chk_processing = 0x56u , MDBX_chk_info = 0x67u , MDBX_chk_verbose = 0x78u , MDBX_chk_details = 0x89u ,
  MDBX_chk_extra = 0x9Au
}
 Уровни логирование/детализации информации, поставляемой через обратные вызовы при проверке целостности базы данных. More...
 
enum  MDBX_chk_stage {
  MDBX_chk_none , MDBX_chk_init , MDBX_chk_lock , MDBX_chk_meta ,
  MDBX_chk_traversal_tree , MDBX_chk_traversal_freedb , MDBX_chk_space , MDBX_chk_traversal_maindb ,
  MDBX_chk_traversal_subdbs , MDBX_chk_conclude , MDBX_chk_unlock , MDBX_chk_finalize
}
 Стадии проверки, сообщаемые через обратные вызовы при проверке целостности базы данных. More...
 

Functions

LIBMDBX_API int mdbx_txn_lock (MDBX_env *env, bool dont_wait)
 Acquires write-transaction lock. Provided for custom and/or complex locking scenarios. More...
 
LIBMDBX_API int mdbx_txn_unlock (MDBX_env *env)
 Releases write-transaction lock. Provided for custom and/or complex locking scenarios. More...
 
LIBMDBX_API int mdbx_env_open_for_recovery (MDBX_env *env, const char *pathname, unsigned target_meta, bool writeable)
 Open an environment instance using specific meta-page for checking and recovery. More...
 
LIBMDBX_API int mdbx_env_open_for_recoveryW (MDBX_env *env, const wchar_t *pathname, unsigned target_meta, bool writeable)
 Open an environment instance using specific meta-page for checking and recovery. More...
 
LIBMDBX_API int mdbx_env_turn_for_recovery (MDBX_env *env, unsigned target_meta)
 Turn database to the specified meta-page. More...
 
LIBMDBX_API int mdbx_preopen_snapinfoW (const wchar_t *pathname, MDBX_envinfo *info, size_t bytes)
 Получает базовую информацию о БД не открывая её. More...
 
LIBMDBX_API int mdbx_env_chk (MDBX_env *env, const MDBX_chk_callbacks_t *cb, MDBX_chk_context_t *ctx, const enum MDBX_chk_flags_t flags, enum MDBX_chk_severity verbosity, unsigned timeout_seconds_16dot16)
 Проверяет целостность базы данных. More...
 
LIBMDBX_API int mdbx_env_chk_encount_problem (MDBX_chk_context_t *ctx)
 Вспомогательная функция для подсчета проблем детектируемых приложением, в том числе, поступающим к приложению через логирование. More...
 

Detailed Description

Basically this is internal API for mdbx_chk tool, etc. You should avoid to use it, except some extremal special cases.


Class Documentation

◆ MDBX_chk_line_t

struct MDBX_chk_line_t

Виртуальная строка отчета, формируемого при проверке целостности базы данных.

See also
mdbx_env_chk()
Class Members
char * begin
struct MDBX_chk_context * ctx
uint8_t empty
char * end
char * out
uint8_t scope_depth
uint8_t severity

◆ MDBX_chk_issue_t

struct MDBX_chk_issue_t

Проблема обнаруженная при проверке целостности базы данных.

See also
mdbx_env_chk()
Class Members
const char * caption
size_t count
struct MDBX_chk_issue * next

◆ MDBX_chk_scope_t

struct MDBX_chk_scope_t

Иерархический контекст при проверке целостности базы данных.

See also
mdbx_env_chk()
Class Members
struct MDBX_chk_internal * internal
MDBX_chk_issue_t * issues
const void * object
enum MDBX_chk_stage stage
size_t subtotal_issues
union MDBX_chk_scope_t usr_o
union MDBX_chk_scope_t usr_v
union MDBX_chk_scope_t usr_z
enum MDBX_chk_severity verbosity

◆ MDBX_chk_histogram

struct MDBX_chk_histogram

Гистограмма с некоторой статистической информацией, собираемой при проверке целостности БД.

See also
mdbx_env_chk()
Class Members
size_t amount
size_t count
size_t ones
size_t pad
struct MDBX_chk_histogram ranges[9]

◆ MDBX_chk_subdb_t

struct MDBX_chk_subdb_t

Информация о некоторой таблицей ключ-значение, при проверке целостности базы данных.

See also
mdbx_env_chk()
Class Members
MDBX_chk_user_subdb_cookie_t * cookie
MDBX_db_flags_t flags
struct MDBX_chk_subdb_t histogram
int id
size_t lost_bytes
MDBX_val name
struct MDBX_chk_subdb_t pages
size_t payload_bytes

◆ MDBX_chk_context_t

struct MDBX_chk_context_t

Контекст проверки целостности базы данных.

See also
mdbx_env_chk()
Class Members
MDBX_env * env
struct MDBX_chk_internal * internal
struct MDBX_chk_context_t result
MDBX_chk_scope_t * scope
uint8_t scope_nesting
MDBX_txn * txn

◆ MDBX_chk_callbacks_t

struct MDBX_chk_callbacks_t

Набор функций обратного вызова используемых при проверке целостности базы данных.

Функции обратного вызова предназначены для организации взаимодействия с кодом приложения. В том числе, для интеграции логики приложения проверяющей целостность стуктуры данных выше уровня ключ-значение, подготовки и структурированного вывода информации как о ходе, так и результатов проверки.

Все функции обратного вызова опциональны, неиспользуемые указатели должны быть установлены в nullptr.

Note
Данный API еще не зафиксирован, в последующих версиях могут быть незначительные доработки и изменения.
See also
mdbx_env_chk()

Public Attributes

bool(* check_break )(MDBX_chk_context_t *ctx)
 
int(* scope_push )(MDBX_chk_context_t *ctx, MDBX_chk_scope_t *outer, MDBX_chk_scope_t *inner, const char *fmt, va_list args)
 
int(* scope_conclude )(MDBX_chk_context_t *ctx, MDBX_chk_scope_t *outer, MDBX_chk_scope_t *inner, int err)
 
void(* scope_pop )(MDBX_chk_context_t *ctx, MDBX_chk_scope_t *outer, MDBX_chk_scope_t *inner)
 
void(* issue )(MDBX_chk_context_t *ctx, const char *object, uint64_t entry_number, const char *issue, const char *extra_fmt, va_list extra_args)
 
MDBX_chk_user_subdb_cookie_t *(* subdb_filter )(MDBX_chk_context_t *ctx, const MDBX_val *name, MDBX_db_flags_t flags)
 
int(* subdb_conclude )(MDBX_chk_context_t *ctx, const MDBX_chk_subdb_t *subdb, MDBX_cursor *cursor, int err)
 
void(* subdb_dispose )(MDBX_chk_context_t *ctx, const MDBX_chk_subdb_t *subdb)
 
int(* subdb_handle_kv )(MDBX_chk_context_t *ctx, const MDBX_chk_subdb_t *subdb, size_t entry_number, const MDBX_val *key, const MDBX_val *value)
 
int(* stage_begin )(MDBX_chk_context_t *ctx, enum MDBX_chk_stage)
 
int(* stage_end )(MDBX_chk_context_t *ctx, enum MDBX_chk_stage, int err)
 
MDBX_chk_line_t *(* print_begin )(MDBX_chk_context_t *ctx, enum MDBX_chk_severity severity)
 
void(* print_flush )(MDBX_chk_line_t *)
 
void(* print_done )(MDBX_chk_line_t *)
 
void(* print_chars )(MDBX_chk_line_t *, const char *str, size_t len)
 
void(* print_format )(MDBX_chk_line_t *, const char *fmt, va_list args)
 
void(* print_size )(MDBX_chk_line_t *, const char *prefix, const uint64_t value, const char *suffix)
 

Member Data Documentation

◆ check_break

bool(* MDBX_chk_callbacks_t::check_break) (MDBX_chk_context_t *ctx)

◆ issue

void(* MDBX_chk_callbacks_t::issue) (MDBX_chk_context_t *ctx, const char *object, uint64_t entry_number, const char *issue, const char *extra_fmt, va_list extra_args)

◆ print_begin

MDBX_chk_line_t*(* MDBX_chk_callbacks_t::print_begin) (MDBX_chk_context_t *ctx, enum MDBX_chk_severity severity)

◆ print_chars

void(* MDBX_chk_callbacks_t::print_chars) (MDBX_chk_line_t *, const char *str, size_t len)

◆ print_done

void(* MDBX_chk_callbacks_t::print_done) (MDBX_chk_line_t *)

◆ print_flush

void(* MDBX_chk_callbacks_t::print_flush) (MDBX_chk_line_t *)

◆ print_format

void(* MDBX_chk_callbacks_t::print_format) (MDBX_chk_line_t *, const char *fmt, va_list args)

◆ print_size

void(* MDBX_chk_callbacks_t::print_size) (MDBX_chk_line_t *, const char *prefix, const uint64_t value, const char *suffix)

◆ scope_conclude

int(* MDBX_chk_callbacks_t::scope_conclude) (MDBX_chk_context_t *ctx, MDBX_chk_scope_t *outer, MDBX_chk_scope_t *inner, int err)

◆ scope_pop

void(* MDBX_chk_callbacks_t::scope_pop) (MDBX_chk_context_t *ctx, MDBX_chk_scope_t *outer, MDBX_chk_scope_t *inner)

◆ scope_push

int(* MDBX_chk_callbacks_t::scope_push) (MDBX_chk_context_t *ctx, MDBX_chk_scope_t *outer, MDBX_chk_scope_t *inner, const char *fmt, va_list args)

◆ stage_begin

int(* MDBX_chk_callbacks_t::stage_begin) (MDBX_chk_context_t *ctx, enum MDBX_chk_stage)

◆ stage_end

int(* MDBX_chk_callbacks_t::stage_end) (MDBX_chk_context_t *ctx, enum MDBX_chk_stage, int err)

◆ subdb_conclude

int(* MDBX_chk_callbacks_t::subdb_conclude) (MDBX_chk_context_t *ctx, const MDBX_chk_subdb_t *subdb, MDBX_cursor *cursor, int err)

◆ subdb_dispose

void(* MDBX_chk_callbacks_t::subdb_dispose) (MDBX_chk_context_t *ctx, const MDBX_chk_subdb_t *subdb)

◆ subdb_filter

MDBX_chk_user_subdb_cookie_t*(* MDBX_chk_callbacks_t::subdb_filter) (MDBX_chk_context_t *ctx, const MDBX_val *name, MDBX_db_flags_t flags)

◆ subdb_handle_kv

int(* MDBX_chk_callbacks_t::subdb_handle_kv) (MDBX_chk_context_t *ctx, const MDBX_chk_subdb_t *subdb, size_t entry_number, const MDBX_val *key, const MDBX_val *value)

◆ MDBX_chk_scope_t.usr_z

union MDBX_chk_scope_t.usr_z
Class Members
size_t number
void * ptr

◆ MDBX_chk_scope_t.usr_v

union MDBX_chk_scope_t.usr_v
Class Members
size_t number
void * ptr

◆ MDBX_chk_scope_t.usr_o

union MDBX_chk_scope_t.usr_o
Class Members
size_t number
void * ptr

◆ MDBX_chk_histogram.ranges

struct MDBX_chk_histogram.ranges
Class Members
size_t amount
size_t begin
size_t count
size_t end

◆ MDBX_chk_subdb_t.pages

struct MDBX_chk_subdb_t.pages
Class Members
size_t all
size_t branch
size_t empty
size_t leaf
size_t nested_branch
size_t nested_leaf
size_t nested_subleaf
size_t other

◆ MDBX_chk_subdb_t.histogram

struct MDBX_chk_subdb_t.histogram
Class Members
struct MDBX_chk_histogram deep Tree deep histogram.
struct MDBX_chk_histogram key_len Keys length histogram.
struct MDBX_chk_histogram large_pages Histogram of large/overflow pages length.
struct MDBX_chk_histogram nested_tree Histogram of nested trees height, span length for GC.
struct MDBX_chk_histogram val_len Values length histogram.

◆ MDBX_chk_context_t.result

struct MDBX_chk_context_t.result
Class Members
size_t alloc_pages
size_t backed_pages
size_t gc_pages
size_t gc_tree_problems
size_t kv_tree_problems
size_t problems_gc
size_t problems_kv
size_t problems_meta
size_t processed_pages
uint64_t recent_txnid
size_t reclaimable_pages
uint64_t steady_txnid
size_t subdb_processed
size_t subdb_total
const MDBX_chk_subdb_t *const * subdbs

Указатель на массив размером subdb_total с указателями на экземпляры структур MDBX_chk_subdb_t с информацией о всех таблицах ключ-значение, включая MainDB и GC/FreeDB.

size_t total_payload_bytes
size_t total_problems
size_t total_unused_bytes
size_t tree_problems
size_t unused_pages

Typedef Documentation

◆ MDBX_chk_user_subdb_cookie_t

typedef struct MDBX_chk_user_subdb_cookie MDBX_chk_user_subdb_cookie_t

Пользовательский тип для привязки дополнительных данных, связанных с некоторой таблицей ключ-значение, при проверке целостности базы данных.

See also
mdbx_env_chk()

Enumeration Type Documentation

◆ MDBX_chk_flags_t

Флаги/опции для проверки целостности базы данных.

Note
Данный API еще не зафиксирован, в последующих версиях могут быть незначительные доработки и изменения.
See also
mdbx_env_chk()
Enumerator
MDBX_CHK_DEFAULTS 

Режим проверки по-умолчанию, в том числе в режиме только-чтения.

MDBX_CHK_READWRITE 

Проверка в режиме чтения-записи, с захватом блокировки и приостановки пишущих транзакций.

MDBX_CHK_SKIP_BTREE_TRAVERSAL 

Пропустить обход дерева страниц.

MDBX_CHK_SKIP_KV_TRAVERSAL 

Пропустить просмотр записей ключ-значение.

MDBX_CHK_IGNORE_ORDER 

Игнорировать порядок ключей и записей.

Note
Требуется при проверке унаследованных БД созданных с использованием нестандартных (пользовательских) функций сравнения ключей или значений.

◆ MDBX_chk_severity

Уровни логирование/детализации информации, поставляемой через обратные вызовы при проверке целостности базы данных.

See also
mdbx_env_chk()
Enumerator
MDBX_chk_severity_prio_shift 
MDBX_chk_severity_kind_mask 
MDBX_chk_fatal 
MDBX_chk_error 
MDBX_chk_warning 
MDBX_chk_notice 
MDBX_chk_result 
MDBX_chk_resolution 
MDBX_chk_processing 
MDBX_chk_info 
MDBX_chk_verbose 
MDBX_chk_details 
MDBX_chk_extra 

◆ MDBX_chk_stage

Стадии проверки, сообщаемые через обратные вызовы при проверке целостности базы данных.

See also
mdbx_env_chk()
Enumerator
MDBX_chk_none 
MDBX_chk_init 
MDBX_chk_lock 
MDBX_chk_meta 
MDBX_chk_traversal_tree 
MDBX_chk_traversal_freedb 
MDBX_chk_space 
MDBX_chk_traversal_maindb 
MDBX_chk_traversal_subdbs 
MDBX_chk_conclude 
MDBX_chk_unlock 
MDBX_chk_finalize 

Function Documentation

◆ mdbx_env_chk()

LIBMDBX_API int mdbx_env_chk ( MDBX_env env,
const MDBX_chk_callbacks_t cb,
MDBX_chk_context_t ctx,
const enum MDBX_chk_flags_t  flags,
enum MDBX_chk_severity  verbosity,
unsigned  timeout_seconds_16dot16 
)

Проверяет целостность базы данных.

Взаимодействие с кодом приложения реализуется через функции обратного вызова, предоставляемые приложением посредством параметра cb. В ходе такого взаимодействия приложение может контролировать ход проверки, в том числе, пропускать/фильтровать обработку отдельных элементов, а также реализовать дополнительную верификацию структуры и/или информации с учетом назначения и семантической значимости для приложения. Например, приложение может выполнить проверку собственных индексов и корректность записей в БД. Именно с этой целью функционал проверки целостности был доработан для интенсивного использования обратных вызовов и перенесен из утилиты mdbx_chk в основную библиотеку.

Проверка выполняется в несколько стадий, начиная с инициализации и до завершения, более подробно см MDBX_chk_stage. О начале и завершении каждой стадии код приложения уведомляется через соответствующие функции обратного вызова, более подробно см MDBX_chk_callbacks_t.

Parameters
[in]envУказатель на экземпляр среды.
[in]cbНабор функций обратного вызова.
[in,out]ctxКонтекст проверки целостности базы данных, где будут формироваться результаты проверки.
[in]flagsФлаги/опции проверки целостности базы данных.
[in]verbosityНеобходимый уровень детализации информации о ходе и результатах проверки.
[in]timeout_seconds_16dot16Ограничение длительности в 1/65536 долях секунды для выполнения проверки, либо 0 при отсутствии ограничения.
Returns
Нулевое значение в случае успеха, иначе код ошибки.

◆ mdbx_env_chk_encount_problem()

LIBMDBX_API int mdbx_env_chk_encount_problem ( MDBX_chk_context_t ctx)

Вспомогательная функция для подсчета проблем детектируемых приложением, в том числе, поступающим к приложению через логирование.

See also
mdbx_env_chk()
MDBX_debug_func
Returns
Нулевое значение в случае успеха, иначе код ошибки.

◆ mdbx_env_open_for_recovery()

LIBMDBX_API int mdbx_env_open_for_recovery ( MDBX_env env,
const char *  pathname,
unsigned  target_meta,
bool  writeable 
)

Open an environment instance using specific meta-page for checking and recovery.

This function mostly of internal API for mdbx_chk utility and subject to change at any time. Do not use this function to avoid shooting your own leg(s).

Note
On Windows the mdbx_env_open_for_recoveryW() is recommended to use.

◆ mdbx_env_open_for_recoveryW()

LIBMDBX_API int mdbx_env_open_for_recoveryW ( MDBX_env env,
const wchar_t *  pathname,
unsigned  target_meta,
bool  writeable 
)

Open an environment instance using specific meta-page for checking and recovery.

This function mostly of internal API for mdbx_chk utility and subject to change at any time. Do not use this function to avoid shooting your own leg(s).

Note
On Windows the mdbx_env_open_for_recoveryW() is recommended to use.
Available only on Windows.
See also
mdbx_env_open_for_recovery()

◆ mdbx_env_turn_for_recovery()

LIBMDBX_API int mdbx_env_turn_for_recovery ( MDBX_env env,
unsigned  target_meta 
)

Turn database to the specified meta-page.

This function mostly of internal API for mdbx_chk utility and subject to change at any time. Do not use this function to avoid shooting your own leg(s).

◆ mdbx_preopen_snapinfoW()

LIBMDBX_API int mdbx_preopen_snapinfoW ( const wchar_t *  pathname,
MDBX_envinfo info,
size_t  bytes 
)

Получает базовую информацию о БД не открывая её.

Назначение функции в получении базовой информации без открытия БД и отображения данных в память (что может быть достаточно затратным действием для ядра ОС). Полученная таким образом информация может быть полезной для подстройки опций работы с БД перед её открытием, а также в сценариях файловых менеджерах и прочих вспомогательных утилитах.

Parameters
[in]pathnameПуть к директории или файлу БД.
[out]infoУказатель на структуру MDBX_envinfo для получения информации.
[in]bytesАктуальный размер структуры MDBX_envinfo, это значение используется для обеспечения совместимости ABI.
Note
Заполняется только некоторые поля структуры MDBX_envinfo, значения которых возможно получить без отображения файлов БД в память и без захвата блокировок: размер страницы БД, геометрия БД, размер распределенного места (номер последней распределенной страницы), номер последней транзакции и boot-id.
Warning
Полученная информация является снимком на время выполнения функции и может быть в любой момент изменена работающим с БД процессом. В том числе, нет препятствий к тому, чтобы другой процесс удалил БД и создал её заново с другим размером страницы и/или изменением любых других параметров.
Returns
Ненулевое значение ошибки при сбое и 0 при успешном выполнении.
Note
Available only on Windows.
See also
mdbx_preopen_snapinfo()

◆ mdbx_txn_lock()

LIBMDBX_API int mdbx_txn_lock ( MDBX_env env,
bool  dont_wait 
)

Acquires write-transaction lock. Provided for custom and/or complex locking scenarios.

Returns
A non-zero error value on failure and 0 on success.

◆ mdbx_txn_unlock()

LIBMDBX_API int mdbx_txn_unlock ( MDBX_env env)

Releases write-transaction lock. Provided for custom and/or complex locking scenarios.

Returns
A non-zero error value on failure and 0 on success.