Выпуск встраиваСмой Π‘Π£Π‘Π” libmdbx 0.13.7

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ выпуск Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ libmdbx 0.13.7 (MDBX) с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠΉ встраиваСмой Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… класса ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Код libmdbx распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ всС Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ российский Π­Π»ΡŒΠ±Ρ€ΡƒΡ 2000. Для libmdbx прСдлагаСтся Ρ€Π°Π·Π²ΠΈΡ‚ΠΎΠ΅ API для C++, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ энтузиастами привязки ΠΊ языкам Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala. Из ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… libmdbx, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Isar, Erigon ΠΈ Reth, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ StarkWare ΠΈ Positive Technologies.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ libmdbx являСтся Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π‘Π£Π‘Π” LMDB ΠΈ прСвосходит своСго прародитСля ΠΏΠΎ надёТности, Π½Π°Π±ΠΎΡ€Ρƒ возмоТностСй ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ сравнСнии с LMDB, Π² libmdbx большоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ удСляСтся качСству ΠΊΠΎΠ΄Π°, ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ API, Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ автоматичСским ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌ. ΠŸΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ΡΡ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостности структуры Π‘Π” с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ возмоТностями восстановлСния. ВСхнологичСски libmdbx ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ACID, ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ с Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ядрам ЦПУ. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π°Π²Ρ‚ΠΎΡƒΠΏΠ»ΠΎΡ‚Π½Π΅Π½ΠΈΠ΅, автоматичСскоС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π‘Π”, ΠΎΡ†Π΅Π½ΠΊΠ° ΠΎΠ±ΡŠΡ‘ΠΌΠ° Π²Ρ‹Π±ΠΎΡ€ΠΎΠΊ ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌ (range query estimation).

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ измСнСния:

  • УстранСна критичСская ошибка Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ mdbx_env_resurrect_after_fork() ΠΏΡ€ΠΈ использовании SysV-сСмафоров. ΠŸΡ€ΠΎΡΠ²Π»ΡΠ»Π°ΡΡŒ ошибка Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС пороТдСния Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ процСсса посрСдством fork() Π½Π° Ρ„ΠΎΠ½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉΡΡ ΠΏΠΈΡˆΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ сСмафоров ΠΈ Π΄Π°Π»Π΅Π΅ ΠΊ самым Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ошибкам, Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ поврСТдСния Π‘Π”. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° сущСствовала начиная с появлСния mdbx_env_resurrect_after_fork() ΠΈ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π»Π° macOS, Π° Ρ‚Π°ΠΊΠΆΠ΅ POSIX-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΈ сборкС с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ MDBX_LOCKING=5.
  • УстранСна ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² API копирования Π‘Π”, ΠΏΡ€ΠΎΡΠ²Π»ΡΠ²ΡˆΠ°ΡΡΡ Π½Π° ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ Linux систСмах POSIX (Π² основном Π² macOS), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΏΡ€ΠΈ располоТСнии Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π° Π½Π΅-локальной Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»Π° ΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Ρƒ ошибки EWOULDBLOCK/EAGAIN, Ρ‡Ρ‚ΠΎ обусловлСно Π½Π΅Π΄ΠΎΡ‡Ρ‘Ρ‚ΠΎΠΌ/ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ fcntl(F_SETLK) ΠΈ flock() Π² ядрС ОБ. ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Π·Π°Ρ…Π²Π°Ρ‚Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π² API копирования Π½Π° систСмах POSIX.
  • УстранСна ошибка, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ²ΡˆΠ°Ρ ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΌΡƒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Ρƒ MDBX_BAD_DBI ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ стартС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса послС открытия Π‘Π”.
  • УстранСна ошибка, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ²ΡˆΠ°Ρ ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΌΡƒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Ρƒ MDBX_DBS_FULL ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ ΡƒΠΆΠ΅ достигнутом Π»ΠΈΠΌΠΈΡ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… DBI-дСскрипторов.
  • Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Π° ошибка сборки для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Android ΠΏΡ€ΠΈ явном ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ _FILE_OFFSET_BITS.
  • Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Π° ошибка использования ENOMEM вмСсто MDBX_ENOMEM. Π§Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ Π»ΠΎΠΌΠ°Ρ‚ΡŒ сборку Π½Π° Π½Π΅-POSIX/Windows ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…, Π² зависимости ΠΎΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ/ΠΈΠ»ΠΈ вСрсии SDK.
  • ΠŸΠΎΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ Π»ΠΈΠ±ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΎ нСсколько Π½Π΅Π²Π΅Ρ€Π½Ρ‹Ρ… assert-ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… происходили падСния ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… сборок Π² спСцифичСских ситуациях. Π“Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² ΠΊΠΎΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ txn_end(), txn_lock() ΠΈ txn_unlock() ΠΊΠ°ΠΊ Π½Π° Windows, Ρ‚Π°ΠΊ ΠΈ Π½Π° POSIX.
  • УстранСны нСсущСствСнныС прСдупрСТдСния MSVC. ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ прСдупрСТдСния C5286 ΠΈ C5287.
  • Π”ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ° ΠΎΡ‚ΠΊΠ°Π·Π° ΠΎΡ‚ использования OFD-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π½Π° POSIX-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ…. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΡ€ΠΎΠΌΠ΅ EINVAL ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ ошибок (ENOSYS, ENOIMPL, ENOTSUP, ENOSUPP, EOPNOTSUPP), Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ собранной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ядро/ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€/эмулятор Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².
  • Π’ тСстовый Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΠΏΡ†ΠΈΠΈ Β«β€”numa <num>Β» для привязки стохастичСского тСста ΠΊ NUMA-ΡƒΠ·Π»Ρƒ. Π’ battery/tmux-скриптС Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ явноС распрСдСлСниС ΠΏΠΎ NUMA-ΡƒΠ·Π»Π°ΠΌ, Ρ‡Ρ‚ΠΎ сущСствСнно ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎ ΠšΠŸΠ” ΠΏΡ€ΠΈ тСстировании Π½Π° NUMA-ΠΌΠ°ΡˆΠΈΠ½Π°Ρ….
  • Π’ стохастичСском скриптС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ случайный порядок запуска ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… тСстов.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ