Skip to content

Commit b4c6f7c

Browse files
JkLondonIlya Miheev
andauthored
v13.4 for testing in e3 (#172)
Co-authored-by: Ilya Miheev <ilya.miheev@lamoda.ru>
1 parent 0ef3458 commit b4c6f7c

File tree

19 files changed

+1656
-2090
lines changed

19 files changed

+1656
-2090
lines changed

mdbxdist/CMakeLists.txt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,6 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git"
149149
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tree-ops.c"
150150
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/txl.c"
151151
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/txl.h"
152-
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/txn-basal.c"
153-
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/txn-nested.c"
154-
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/txn-ro.c"
155152
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/txn.c"
156153
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/unaligned.h"
157154
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/utils.c"
@@ -841,9 +838,6 @@ else()
841838
"${MDBX_SOURCE_DIR}/tree-ops.c"
842839
"${MDBX_SOURCE_DIR}/txl.c"
843840
"${MDBX_SOURCE_DIR}/txl.h"
844-
"${MDBX_SOURCE_DIR}/txn-basal.c"
845-
"${MDBX_SOURCE_DIR}/txn-nested.c"
846-
"${MDBX_SOURCE_DIR}/txn-ro.c"
847841
"${MDBX_SOURCE_DIR}/txn.c"
848842
"${MDBX_SOURCE_DIR}/unaligned.h"
849843
"${MDBX_SOURCE_DIR}/utils.c"

mdbxdist/ChangeLog.md

Lines changed: 16 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -4,91 +4,49 @@ ChangeLog
44
English version [by liar Google](https://libmdbx-dqdkfa-ru.translate.goog/md__change_log.html?_x_tr_sl=ru&_x_tr_tl=en)
55
and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/libmdbx.dqdkfa.ru/md__change_log.html).
66

7-
## v0.14.1 в активной разработке без конкретизации даты выпуска
7+
## v0.13.4 "Sigma Boy" от 2025-02-14
88

9-
Первый выпуск в новом кусте/линейке версий с добавлением функционала, расширением API и внутренними переработками.
9+
Поддерживающий выпуск стабильной ветки с исправлением обнаруженных ошибок и устранением недочётов.
1010

1111
Благодарности:
1212

13+
- [Алексею Костюку (aka Keller)](https://t.me/keller18306) за сообщения об ошибках и недочетах.
1314
- [Erigon](https://docs.erigon.tech/) за спонсорство.
1415
- [Alain Picard](https://github.com/castortech) for support [Java bindings](https://github.com/castortech/mdbxjni) and MacOS universal binaries patch for CMake build scenario.
1516
- [Alex Sharov](https://github.com/AskAlexSharov) за сообщение об ошибках и тестирование.
1617
- [Виктору Логунову](https://t.me/vl_username) за сообщение об опечатки в имени переменной в Conan-рецепте.
1718

1819
Новое:
1920

20-
- Добавлена опция сборки `MDBX_NOSUCCESS_PURE_COMMIT` предназначенная для отладки кода пользователя.
21-
По-умолчанию опция выключена и при фиксации пустых транзакции возвращается `MDBX_SUCCESS`.
22-
При включении опции, фиксация пишущих транзакций без каких-либо изменений считается нештатным поведением, с возвратом из `mdbx_txn_commit()` кода `MDBX_RESULT_TRUE` вместо `MDBX_SUCCESS`.
23-
Таким образом, у пользователя появляется возможность легко диагностировать лишние/ненужные транзакции записи.
24-
25-
- Добавлена опция сборки `MDBX_ENABLE_NON_READONLY_EXPORT` позволяющая использовать в режиме чтения-записи БД расположенных в файловых системах экспортированных через NFS.
26-
По-умолчанию опция выключена и при открытии в неэксклюзивном режиме чтения-записи БД расположенных файловых системах доступных извне по NFS будет возвращаться ошибка `MDBX_EREMOTE`.
27-
Включение опции позволяет открывать БД в описанных выше ситуациях, но риск чтения неверных данных на удалённой стороне ложится на пользователя.
28-
2921
- Поддержка MacOS universal binaries при сборке посредством CMake.
3022

31-
Изменение поведения:
32-
33-
- Теперь при вставке данных в dupsort-таблицу CoW копирование целевых страниц выполняется после проверки отсутствия добавляемого значения среди уже присутствующих multi-значений (aka дубликатов).
34-
В результате вставка уже присутствующих "дубликатов" не приводит к каким-либо изменениям в БД и принципиально увеличивает производительность в таких сценариях.
35-
В текущем понимании, добавленная проверка не приводит к заметному увеличению накладных расходов и, как следствие, не приводит к снижению производительности в сценариях с обычным/регулярным обновлением и/или вставкой данных.
36-
37-
- Использование системного кода ошибки `EREMOTEIO` ("Remote I/O error") вместо `ENOTBLK` ("Block device required") в качестве `MDBX_EREMOTE` для индикации ошибочной ситуации открытия БД расположенной на сетевом носителе.
38-
3923
Исправления:
4024

4125
- Устранён регресс допускающий SIGSEGV в операциях обновления после вытеснения/spilling страниц в больших транзакциях.
4226
Ошибка присутствует в выпусках v0.13.1, v0.13.2, v0.13.3 и оставалась незамеченной из-за специфических условий и низкой вероятности проявления.
43-
Более подробная информация в описании коммита `cb8eec6d11cdab4f7d3cf87913e8009149dcf60b`.
44-
45-
Прочие доработки:
27+
Более подробная информация в описании коммита `a060057e480aa5196c7d5c00ea441c962e3b952d`.
4628

47-
- Существенный рефакторинг с реструктуризацией кода, переименованием внутренних структур, их полей и внутренних функций.
29+
- Исправлена опечатка в документации в упоминании `mdbx_env_resurrect_after_fork()`.
4830

49-
- Доработка использования LTO в CMake-сценариях: использование `-flto=auto` для GCC >= 11.4, расслабление условий для включения LTO для CLANG на Linux, расширение поиска `LLVMgold.so` в относительных lib-директориях.
31+
- Исправлена опечатка в условном операторе внутри `cursor_touch()`.
32+
При переделке курсоров было пропущено отрицание в условии, при оценке количества страниц, которые могут потребоваться для выполнения операции.
33+
В текущем понимании ошибка не приводила к каким-либо проблемам, ибо оценка делает по верхней границе с существенным запасом, а в худшем
34+
случае это могло приводить к прерыванию транзакции из-за достижения ограничения на кол-во грязных страниц.
5035

51-
--------------------------------------------------------------------------------
52-
53-
## v0.14.0 от 2023-03-13
36+
- Корректировка излишне строгого условия в assert-проверке внутри `recalculate_subpage_thresholds()`.
37+
Ошибка могла проявляться только в отладочных сборках при выставлении определенной комбинации предельных значений опций `MDBX_opt_subpage_limit`,
38+
`MDBX_opt_subpage_room_threshold`, `MDBX_opt_subpage_reserve_prereq`, `MDBX_opt_subpage_reserve_limit`.
5439

55-
Технический тэг, отмечающий начало ветки `0.14`
56-
с новым функционалом и изменением API.
40+
- Исправление опечатки в Conan-рецепте в коде протокольно-отладочного вывода в имени переменной `version_json_pathname`.
5741

58-
Запланированные новые возможности 0.14:
59-
60-
1. Ранняя (не-отложенная) очистка GC и рефакторинг обновления GC. Самостоятельной видимой для пользователя ценности не имеет, но требуется для последующих пунктов.
61-
Будет реализовано в 0.14.1.
62-
63-
2. Явная дефрагментация БД. В API будет добавлена функция с двумя парами параметров:
64-
- минимальный (требуемый) объём дефрагментации (уменьшения БД) и минимальное время, которое следует потратить;
65-
- максимальный (ограничивающий) объём дефрагментации и максимальной время, которое допустимо потратить.
66-
67-
Упрощенно, алгоритмически явная дефрагментация сводится к сканированию b-tree с формированием списка страниц расположенных близко к концу БД, а затем копирование этих страниц в не-используемые, но расположенные ближе к началу БД.
68-
В результате, после фиксации дефрагментирующей транзакции оригиналы скопированных страниц становятся не-используемыми, а размер БД может быть уменьшен за счет отсечения ни-используемых страниц в конце используемого пространства.
69-
Будет реализовано в 0.14.2.
70-
71-
3. Нелинейная переработка GC, без остановки переработки мусора на старом MVCC-снимке используемом долгой транзакцией чтения.
72-
73-
После реализации запланированного, любая длительная читающая транзакция по-прежнему будет удерживать от переработки используемый/читаемый MVCC-снимок данных (все образующие его страницы БД), но позволит перерабатывать все неиспользуемые MVCC-снимки, как до читаемого, так и после.
74-
Это позволит устранить [один из основных архитектурных недостатков](https://libmdbx.dqdkfa.ru/intro.html#long-lived-read) унаследованных от LMDB и связанных с ростом размера БД пропорционально объёму производимых изменений данных на фоне долго работающей транзакции чтения.
75-
76-
Будет реализовано предположительно в 0.14.3, 0.14.4 или даже в 0.15.x.
77-
Перенос в 0.15.x оправдан возможностью переноса функционала дефрагментации в stable-ветку, но посмотри как пойдут дела.
78-
79-
********************************************************************************
42+
--------------------------------------------------------------------------------
8043

8144
## v0.13.3 "Королёв" от 2025-01-12
8245

8346
Поддерживающий выпуск с исправлением обнаруженных ошибок и устранением недочетов
8447
в день рождения и в память об [Серге́е Па́вловиче Королёве](https://ru.wikipedia.org/wiki/Королёв,_Сергей_Павлович),
8548
советском учёном и Главном конструкторе ракетно-космических систем.
8649

87-
Одновременно с этим релизом:
88-
89-
- Ветка `0.12.x` перестаёт поддерживаться и отправляется в `архив/0.12`.
90-
- Ветка `0.13.x` получает статус стабильной и вливается в `stable`.
91-
9250
Благодарности:
9351

9452
- [Алексею Костюку (aka Keller)](https://t.me/keller18306) за сообщения об ошибках и недочетах.
@@ -150,7 +108,7 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/libmdbx
150108
Однако, улучшить ситуацию пока не представляется возможным, как минимум
151109
до доступности boot_id хостовой системы изнутри LXC-контейнера.
152110

153-
- Устранена ошибка неверной обработки попытки запуска вложенной читающей транзакции.
111+
- Устранёна ошибка неверной обработки попытки запуска вложенной читающей транзакции.
154112
Теперь в таких ситуациях возвращается ошибка `MDBX_EINVAL`, так как вложенность
155113
поддерживается только для транзакций чтения-записи.
156114

@@ -175,7 +133,7 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/libmdbx
175133
Однако, при поиске/позиционировании это не является ошибкой для таблиц с ключами переменного размера.
176134

177135
- Если посредством `mdbx_env_set_option(MDBX_opt_txn_dp_limit)` пользователем не задано собственно значение,
178-
то теперь выполняется подстройка dirty-pages-limit при старте каждой не-вложенной пишущей транзакций,
136+
то выполняется подстройка dirty-pages-limit при старте каждой не-вложенной пишущей транзакций,
179137
исходя из объёма доступного ОЗУ и размера БД.
180138

181139
- Теперь в режиме `MDBX_NOSTICKYTHREADS` допускается commit/abort вложенных транзакций из любого треда/потока.

mdbxdist/VERSION.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{ "git_describe": "v0.14.0-53-g4730abe3", "git_timestamp": "2025-02-11T14:01:10+03:00", "git_tree": "045bfa04a0690584d8256d2d8ea3dffb1325b7d0", "git_commit": "4730abe3e55c95e53e05d2ffbd83ed6a7cb21fe5", "semver": "0.14.0.53" }
1+
{ "git_describe": "v0.13.4-0-g75122b31", "git_timestamp": "2025-02-14T12:56:12+03:00", "git_tree": "9b87c2c14d40bb9e9963b46c3d8d328a3f4ebe7d", "git_commit": "75122b311d3672409823d2477564689ec0be082c", "semver": "0.13.4" }

mdbxdist/cmake/compiler.cmake

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -502,11 +502,7 @@ if(CMAKE_COMPILER_IS_GNU${CMAKE_PRIMARY_LANG}
502502
AND CMAKE_GCC_RANLIB
503503
AND gcc_lto_wrapper)
504504
message(STATUS "Found GCC's LTO toolset: ${gcc_lto_wrapper}, ${CMAKE_GCC_AR}, ${CMAKE_GCC_RANLIB}")
505-
if(CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER_VERSION VERSION_LESS 11.4)
506-
set(GCC_LTO_CFLAGS "-flto -fno-fat-lto-objects -fuse-linker-plugin")
507-
else()
508-
set(GCC_LTO_CFLAGS "-flto=auto -fno-fat-lto-objects -fuse-linker-plugin")
509-
endif()
505+
set(GCC_LTO_CFLAGS "-flto -fno-fat-lto-objects -fuse-linker-plugin")
510506
set(GCC_LTO_AVAILABLE TRUE)
511507
message(STATUS "Link-Time Optimization by GCC is available")
512508
else()
@@ -545,21 +541,13 @@ if(CMAKE_COMPILER_IS_CLANG)
545541
if(regexp_valid)
546542
string(REGEX REPLACE "(^|\n.*)(.*programs: =)([^\n]+)((\n.*)|$)" "\\3" list ${clang_search_dirs})
547543
string(REPLACE ":" ";" list "${list}")
548-
set(libs_extra_subdirs "lib;../lib;lib64;../lib64;lib32;../lib32")
549544
foreach(dir IN LISTS list)
550545
get_filename_component(dir "${dir}" REALPATH)
551546
if(dir MATCHES ".*llvm.*" OR dir MATCHES ".*clang.*")
552-
set(list_suffix "")
547+
list(APPEND clang_bindirs "${dir}")
553548
else()
554-
set(list_suffix "_x")
549+
list(APPEND clang_bindirs_x "${dir}")
555550
endif()
556-
list(APPEND clang_bindirs${list_suffix} "${dir}")
557-
foreach(subdir IN LISTS libs_extra_subdirs)
558-
get_filename_component(subdir "${dir}/${subdir}" REALPATH)
559-
if(EXISTS "${subdir}")
560-
list(APPEND clang_libdirs${list_suffix} "${subdir}")
561-
endif()
562-
endforeach()
563551
endforeach()
564552
list(APPEND clang_bindirs "${clang_bindirs_x}")
565553
list(REMOVE_DUPLICATES clang_bindirs)
@@ -571,11 +559,10 @@ if(CMAKE_COMPILER_IS_CLANG)
571559
foreach(dir IN LISTS list)
572560
get_filename_component(dir "${dir}" REALPATH)
573561
if(dir MATCHES ".*llvm.*" OR dir MATCHES ".*clang.*")
574-
set(list_suffix "")
562+
list(APPEND clang_libdirs "${dir}")
575563
else()
576-
set(list_suffix "_x")
564+
list(APPEND clang_libdirs_x "${dir}")
577565
endif()
578-
list(APPEND clang_libdirs${list_suffix} "${dir}")
579566
endforeach()
580567
list(APPEND clang_libdirs "${clang_libdirs_x}")
581568
list(REMOVE_DUPLICATES clang_libdirs)
@@ -668,7 +655,9 @@ if(CMAKE_COMPILER_IS_CLANG)
668655
if(CMAKE_CLANG_AR
669656
AND CMAKE_CLANG_NM
670657
AND CMAKE_CLANG_RANLIB
671-
AND ((CLANG_LTO_PLUGIN AND CMAKE_LD_GOLD) OR CMAKE_CLANG_LD OR APPLE))
658+
AND ((CLANG_LTO_PLUGIN AND CMAKE_LD_GOLD)
659+
OR (CMAKE_CLANG_LD AND NOT (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_NAME STREQUAL "Linux"))
660+
OR APPLE))
672661
if(ANDROID AND CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER_VERSION VERSION_LESS 12)
673662
set(CLANG_LTO_AVAILABLE FALSE)
674663
message(

mdbxdist/man1/mdbx_chk.1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
.\" Copyright 2015-2025 Leonid Yuriev <leo@yuriev.ru>.
22
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
3-
.TH MDBX_CHK 1 "2025-01-14" "MDBX 0.14"
3+
.TH MDBX_CHK 1 "2024-08-29" "MDBX 0.13"
44
.SH NAME
55
mdbx_chk \- MDBX checking tool
66
.SH SYNOPSIS

mdbxdist/man1/mdbx_copy.1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
.\" Copyright 2015,2016 Peter-Service R&D LLC <http://billing.ru/>.
33
.\" Copyright 2012-2015 Howard Chu, Symas Corp. All Rights Reserved.
44
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
5-
.TH MDBX_COPY 1 "2025-01-14" "MDBX 0.14"
5+
.TH MDBX_COPY 1 "2024-08-29" "MDBX 0.13"
66
.SH NAME
77
mdbx_copy \- MDBX environment copy tool
88
.SH SYNOPSIS

mdbxdist/man1/mdbx_drop.1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
.\" Copyright 2021-2025 Leonid Yuriev <leo@yuriev.ru>.
22
.\" Copyright 2014-2021 Howard Chu, Symas Corp. All Rights Reserved.
33
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
4-
.TH MDBX_DROP 1 "2025-01-14" "MDBX 0.14"
4+
.TH MDBX_DROP 1 "2024-08-29" "MDBX 0.13"
55
.SH NAME
66
mdbx_drop \- MDBX database delete tool
77
.SH SYNOPSIS

mdbxdist/man1/mdbx_dump.1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
.\" Copyright 2015,2016 Peter-Service R&D LLC <http://billing.ru/>.
33
.\" Copyright 2014-2015 Howard Chu, Symas Corp. All Rights Reserved.
44
.\" Copying restrictions apply. See COPYRIGHT/LICENSE.
5-
.TH MDBX_DUMP 1 "2025-01-14" "MDBX 0.14"
5+
.TH MDBX_DUMP 1 "2024-08-29" "MDBX 0.13"
66
.SH NAME
77
mdbx_dump \- MDBX environment export tool
88
.SH SYNOPSIS

0 commit comments

Comments
 (0)