Keluaran DBMS libmdbx 0.11.7. Alihkan Pembangunan ke GitFlic Selepas Lockdown pada GitHub

Pustaka libmdbx 0.11.7 (MDBX) telah dikeluarkan dengan pelaksanaan pangkalan data nilai kunci terbenam padat berprestasi tinggi. Kod libmdbx dilesenkan di bawah Lesen Awam OpenLDAP. Semua sistem pengendalian dan seni bina semasa disokong, serta Elbrus Rusia 2000.

Keluaran ini terkenal kerana pemindahan projek ke perkhidmatan GitFlic selepas pada 15 April 2022, pentadbiran GitHub, tanpa sebarang amaran atau penjelasan, memadamkan libmdbx bersama-sama dengan pelbagai projek lain, sambil menyekat akses kepada banyak pembangun yang dikaitkan dengan syarikat tertakluk kepada sekatan AS. Dari sudut pandangan pengguna, semua halaman, repositori dan garpu projek tiba-tiba bertukar menjadi halaman 404, tanpa kemungkinan sebarang komunikasi dan mengetahui sebabnya.

Malangnya, hampir semua isu, di mana terdapat banyak soalan dengan jawapan terperinci, serta banyak perbincangan, telah hilang. Kehilangan maklumat ini adalah satu-satunya kerosakan objektif yang berjaya ditimbulkan oleh pentadbiran GitHub pada projek itu. Salinan sebahagian daripada perbincangan kekal tersedia di archive.org.

Kehilangan senario dan infrastruktur CI terbina (tersedia untuk projek OpenSource secara percuma) memaksa kami untuk melakukan semakan, penyatuan dan penghapusan hutang teknikal yang kecil. Kini CI telah dipulihkan pada tahap yang hampir sama, kecuali ujian bina dan jalankan untuk semua varian BSD dan Solaris. Biasanya, selepas tindakan itu, GitHub tidak menerima sebarang penjelasan atau pemberitahuan, selain daripada peringatan tentang keperluan untuk pembayaran dan percubaan untuk menghapus kira wang.

Sejak berita terakhir tentang keluaran libmdbx v0.11.3, sebagai tambahan kepada pemulihan daripada tindakan GitHub, penambahbaikan dan pembetulan berikut perlu diperhatikan:

  • Menambah penyelesaian untuk kesan/kecacatan inkoheren yang dikesan dalam halaman gabungan dan cache penimbal dalam kernel Linux. Dalam sistem di mana cache halaman dan penimbal benar-benar digabungkan, tidak ada gunanya kernel membuang memori untuk dua salinan data apabila menulis ke fail yang telah dipetakan ke dalam memori. Oleh itu, data yang sedang ditulis menjadi kelihatan melalui pemetaan memori sebelum panggilan sistem write() selesai, walaupun data belum ditulis ke cakera.

    Secara umum, tingkah laku lain tidak rasional, kerana dengan gabungan tertunda, anda masih perlu mendapatkan kunci untuk senarai halaman, menyalin data atau melaraskan PTE. Oleh itu, peraturan koheren yang tidak dinyatakan telah berkuat kuasa sejak 1989, apabila cache penimbal bersatu muncul dalam SRV4. Oleh itu, mengesan ranap pelik dalam senario eksploitasi libmdbx yang dimuatkan memerlukan banyak kerja. Mula-mula untuk menghasilkan semula masalah, kemudian untuk mengesahkan hipotesis dan ujian penambahbaikan.

    Kini kami dengan yakin boleh mengatakan bahawa masalah itu telah dikenal pasti dengan pasti, disetempatkan dan dihapuskan dengan pasti, walaupun senario pembiakan itu mempunyai kerumitan dan kekhususan. Di samping itu, operasi mekanisme pintasan telah disahkan oleh salah seorang pembangun Erigon (Ethereum); dalam kesnya, pada binaan nyahpepijat, perlindungan telah dicetuskan sebagai regresi disebabkan oleh pemeriksaan tegas yang tidak perlu.

    Perlu diingatkan bahawa dalam konteks penggunaan meluas libmdbx dalam projek pengeluaran, memastikan operasi yang boleh dipercayai pada asasnya adalah lebih penting daripada memikirkan sama ada ia adalah pepijat atau ciri dan sama ada koheren tersebut boleh dipercayai, lebih-lebih lagi mencari punca ketidakselarasan dalam kernel Linux. Oleh itu, di sini kita bercakap tentang membetulkan isu yang mungkin telah menjejaskan pengguna.

  • Regresi ralat EXDEV (Pautan silang peranti) apabila panas menyalin pangkalan data tanpa pemadatan ke sistem fail lain, kedua-dua melalui API dan dengan utiliti mdbx_copy, telah dihapuskan.
  • Kris Zyp melaksanakan sokongan libmdbx dalam Deno. Kai Wetlesen mereka bentuk pembungkusan RPM untuk Fedora. David Bouyssie melaksanakan pengikatan untuk Scala.
  • Pemprosesan tetap nilai yang ditentukan oleh pilihan MDBX_opt_rp_augment_limit apabila memproses transaksi besar dalam pangkalan data yang besar. Sebelum ini, disebabkan ralat, tindakan yang tidak perlu boleh dilakukan, yang kadangkala menjejaskan prestasi dalam pelaksanaan Ethereum (Erigon/Akula/Silkworm) dan projek Binance Chain.
  • Banyak pepijat telah diperbaiki, termasuk dalam C++ API. Memperbaiki banyak isu binaan dalam konfigurasi jarang dan eksotik. Senarai lengkap semua peningkatan ketara tersedia dalam ChangeLog.
  • Sebanyak 185 perubahan telah dibuat kepada 89 fail, β‰ˆ3300 baris telah ditambah, β‰ˆ4100 telah dipadamkan. Lebih banyak telah dialih keluar terutamanya disebabkan oleh pembersihan fail teknologi yang sudah tidak berguna yang dikaitkan dengan GitHub dan perkhidmatan bergantung.

Dari segi sejarah, libmdbx ialah reka bentuk semula mendalam bagi DBMS LMDB dan mengatasi pendahulunya dari segi kebolehpercayaan, set ciri dan prestasi. Berbanding dengan LMDB, libmdbx memberi banyak penekanan pada kualiti kod, kestabilan API, ujian dan semakan automatik. Utiliti untuk menyemak integriti struktur pangkalan data dibekalkan dengan beberapa pilihan pemulihan.

Dari segi teknologi, libmdbx menawarkan ACID, siri perubahan yang kuat dan bacaan tanpa sekatan dengan penskalaan linear merentas teras CPU. Auto-pemadatan, pengurusan saiz pangkalan data automatik dan anggaran pertanyaan julat disokong. Sejak 2016, projek itu telah dibiayai oleh Positive Technologies dan telah digunakan dalam produknya sejak 2017.

libmdbx menawarkan API C++ yang dibangunkan, serta pengikatan yang disokong peminat kepada bahasa Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Sumber: opennet.ru

Tambah komen