libmdbx 0.11.7 przybywa z migracją projektu do GitFlic, poprawkami błędów i nie tylko

ten wydanie nowej biblioteki libmdbx w wersji 0.11.7, uruchomienie wyróżnia się migracją projektu do usługi GitFlic po tym, jak administracja GitHub usunęła libmdbx wraz z wieloma innymi projektami 15 kwietnia 2022 r. bez żadnego ostrzeżenia ani wyjaśnienia, jednocześnie blokując dostęp wielu programistom powiązanym z firmami objętymi sankcjami USA.

Z punktu widzenia użytkownika wszystkie strony, repozytorium i forki projektu nagle zamieniły się w stronę „404”, bez możliwości komunikacji i bez znalezienia przyczyn.

Niestety prawie wszystkie wersje zostały utracone, w którym było wiele pytań ze szczegółowymi odpowiedziami, a także wiele dyskusji. Utrata tych informacji to jedyna obiektywna szkoda, jaką administracja GitHub zdołała wyrządzić projektowi, chociaż częściowe kopie dyskusji pozostają dostępne w archiwum archive.org.

Utrata wbudowanej infrastruktury CI i skryptów (dostępnych za darmo dla projektów OpenSource) zmusiła nas do przeglądu, ujednolicenia i wyeliminowania niewielkiego długu technicznego. Teraz CI zostało przywrócone do prawie tego samego wolumenu (około 100 konfiguracji kompilacji), z wyjątkiem testów budowania i uruchamiania dla wszystkich wariantów BSD i Solaris. Co znamienne, po działaniach GitHuba nie otrzymano żadnych wyjaśnień ani powiadomień, poza przypomnieniem o konieczności zapłaty.

Główne nowe funkcje libmdbx 0.11.7

Od najnowszych wiadomości o wydaniu libmdbx v0.11.3, oprócz odzyskiwania po akcjach GitHub, warto zwrócić uwagę na następujące ulepszenia i poprawki:

Łącznie dokonano 185 zmian w 89 plikach, dodano około 3300 wierszy, Usunięto około 4100. Usunięto głównie ze względu na wyczyszczenie już bezużytecznych plików technicznych powiązanych z GitHub i usługami zależnymi.

Dodano poprawka dla wykrytego efektu niespójności/wady w połączonej stronie i pamięci podręcznej bufora w jądrze Linux. W systemach, w których pamięci podręczne stron i buforów są naprawdę zunifikowane, nie ma sensu, aby jądro marnowało pamięć na dwie kopie danych, zapisując je do już przydzielonego pliku pamięci. Dlatego zapisane dane stają się widoczne poprzez alokację pamięci przed zakończeniem wywołania systemowego write(), nawet jeśli dane nie zostały jeszcze zapisane na dysku.

W sumie inne zachowanie nie jest racjonalne, ponieważ przy opóźnionym scaleniu nadal musisz łapać blokady dla list stron, kopiować dane lub dostosowywać PTE. Tak więc niewypowiedziana zasada spójności obowiązuje od 1989 roku, kiedy w SVR4 pojawiła się zunifikowana pamięć podręczna bufora. W rezultacie znalezienie dziwnych błędów w zajętych scenariuszach produkcyjnych libmdbx było dużo pracy. Najpierw odtworzenie problemu, następnie weryfikacja hipotez i sprawdzenie usprawnień.

Możemy teraz śmiało powiedzieć, że problem został niezawodnie zidentyfikowany, zlokalizowany i usunięty, pomimo złożoności i specyfiki scenariusza odtwarzania. Również działanie mechanizmu obejścia zostało potwierdzone przez jednego z programistów Erigon (Ethereum), w jego przypadku w kompilacji debugowania ochrona została uruchomiona jako regresja z powodu dodatkowego sprawdzenia asercji.

Należy zauważyć, że w kontekście powszechnego używania libmdbx w działających projektach, fundamentalnie ważniejsze jest zapewnienie niezawodnego działania, niż sprawdzenie, czy jest to błąd, czy funkcja i czy można na takiej spójności polegać zwłaszcza bez szukania przyczyn niespójności w jądrze Linuksa. Więc tutaj mówimy o naprawieniu problemu, który może mieć wpływ na użytkowników.

Naprawiono regresję błędu EXDEV (łącze między urządzeniami) podczas kopiowania bazy danych na gorąco bez kompaktowania do innego systemu plików, zarówno za pośrednictwem interfejsu API, jak i narzędzia mdbx_copy.
Kris Zyp zaimplementował obsługę libmdbx na Deno.

Poprawiono obsługę wartości ustawionej przez opcję MDBX_opt_rp_augment_limit podczas przetwarzania dużych transakcji na dużych bazach danych. Wcześniej, z powodu błędu, niepotrzebne działania mogły być wykonywane, co czasami wpływało na wydajność implementacji Ethereum (Erigon/Akula/Silkworm) i projektów Binance Chain.

Naprawiono wiele błędów, w tym te dla C++ API i naprawiono wiele problemów z kompilacją w rzadkich i egzotycznych konfiguracjach. Pełna lista wszystkich znaczących ulepszeń jest dostępna w ChangeLog.

Na koniec, jeśli chcesz dowiedzieć się więcej na ten temat, możesz zapoznać się ze szczegółami W poniższym linku.


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.