Rilascio del DBMS libmdbx 0.11.7. Trasferimento dello sviluppo su GitFlic dopo il blocco su GitHub

È stata rilasciata la libreria libmdbx 0.11.7 (MDBX) con un'implementazione ad alte prestazioni di un database incorporato compatto di tipo chiave-valore. Il codice di libmdbx è distribuito sotto la licenza OpenLDAP Public License. Sono supportati tutti i sistemi operativi e le architetture attuali, compreso l'Elbrus 2000 russo.

Il rilascio è notevole per la migrazione del progetto al servizio GitFlic, dopo che il 15 aprile 2022 l'amministrazione di GitHub ha rimosso senza preavviso e senza spiegazioni libmdbx insieme a molti altri progetti, bloccando contemporaneamente l'accesso a molti sviluppatori associati a società colpite dalle sanzioni statunitensi. Dal punto di vista degli utenti, tutte le pagine, il repository e i fork del progetto si sono improvvisamente trasformati in una pagina "404", senza possibilità di comunicazioni o chiarimenti.

Purtroppo sono andati persi quasi tutti gli issues, nei quali c'erano molte domande con risposte dettagliate, oltre a numerose discussioni. La perdita di queste informazioni rappresenta l'unico danno oggettivo che l'amministrazione di GitHub è riuscita a infliggere al progetto. Parzialmente, copie delle discussioni rimangono disponibili negli archivi di archive.org.

La perdita di script CI configurati e dell'infrastruttura (disponibile gratuitamente per progetti OpenSource) ha portato a una revisione, unificazione e risoluzione di un piccolo debito tecnico. Ora il CI è stato ripristinato quasi nella sua interezza, tranne per la build e i test di esecuzione per tutte le varianti di BSD e Solaris. Curiosamente, dopo le azioni da parte di GitHub, non sono arrivate spiegazioni o notifiche, a parte il promemoria per il pagamento e i tentativi di addebitare denaro.

Dall'ultimo aggiornamento sul rilascio di libmdbx v0.11.3, oltre al recupero dopo le azioni di GitHub, meritano menzione i seguenti miglioramenti e correzioni:

  • È stato implementato un workaround per l'effetto/defetto di incoerenza nel cache unificato delle pagine e dei buffer nel kernel Linux. Nei sistemi in cui la cache di pagine e buffer è effettivamente unificata, non ha senso per il kernel allocare memoria per due copie di dati durante la scrittura su un file già mappato in memoria. Pertanto, i dati scritti diventano visibili attraverso la mappatura in memoria fino al completamento della chiamata di sistema write(), anche se i dati non sono ancora stati scritti su disco.

    Nel complesso, un comportamento diverso non è razionale, poiché anche con un'unione ritardata, sarà comunque necessario acquisire blocchi per gli elenchi delle pagine, copiare dati o modificare il PTE. Pertanto, la regola tacita di coerenza è stata applicata dal 1989, quando in SRV4 è apparso il unified buffer cache. La scoperta di strani malfunzionamenti in scenari di utilizzo intensivo di libmdbx ha richiesto un grande lavoro. Inizialmente per riprodurre il problema, poi per verificare le ipotesi e controllare le modifiche.

    Oggi possiamo affermare con sicurezza che il problema è stato identificato in modo affidabile, localizzato e risolto in modo sicuro, nonostante la complessità e la specificità dello scenario di riproduzione. Inoltre, il funzionamento del meccanismo di bypass è stato confermato da uno degli sviluppatori di Erigon (Ethereum), nel suo caso, su una build di debug, l'attivazione della protezione si manifestava come un regressione a causa di un'assertion non necessaria.

    È importante notare che nel contesto dell'ampio utilizzo di libmdbx in progetti lavorativi, è fondamentale garantire un funzionamento affidabile, piuttosto che determinare se si tratta di un 'errore o di una caratteristica' e se ci si può fidare di tale coerenza, tanto meno cercare le cause di incoerenza all'interno del kernel Linux. Pertanto, si tratta di risolvere un problema che potrebbe interessare gli utenti.

  • È stato risolto il regresso nell'insorgere dell'errore EXDEV (Cross-device link) durante la copia a caldo del database senza compattazione su un altro filesystem, sia tramite API che con l'utilità mdbx_copy.
  • Kris Zyp ha implementato il supporto di libmdbx in Deno. Kai Wetlesen ha realizzato il pacchettizzo RPM per Fedora. David Bouyssié ha creato i binding per Scala.
  • È stata corretta la gestione del valore definito dall'opzione MDBX_opt_rp_augment_limit durante l'elaborazione di enormi transazioni in grandi database. In precedenza, a causa di un bug, si potevano effettuare azioni superflue, che a volte influenzavano le prestazioni nelle implementazioni di Ethereum (Erigon/Akula/Silkworm) e nei progetti Binance Chain.
  • È stata corretta una serie di piccoli errori, incluso nell'API C++. Risolti molti problemi di compilazione in configurazioni rare ed esotiche. Un elenco completo di tutte le modifiche significative è disponibile nel ChangeLog.
  • In totale sono state apportate 185 modifiche a 89 file, con circa 3300 righe aggiunte e circa 4100 righe rimosse. Maggiore parte delle rimozioni è dovuta alla pulizia di file tecnologici ormai obsoleti legati a GitHub e servizi dipendenti.

Storicamente, libmdbx è una profonda rielaborazione del database LMDB e supera il suo predecessore in affidabilità, funzionalità e prestazioni. Rispetto a LMDB, libmdbx pone un forte accento sulla qualità del codice, sul funzionamento stabile dell'API, sui test e sui controlli automatici. Viene fornuto uno strumento per la verifica dell'integrità della struttura del database con alcune funzionalità di recupero.

Tecnicamente, libmdbx offre ACID, una rigorosa serializzazione delle modifiche e una lettura non bloccante con scalabilità lineare attraverso i core della CPU. Supporta l'autocompattazione, la gestione automatica delle dimensioni del database e la stima del volume delle query per intervallo (range query estimation). Dal 2016 il progetto è finanziato da Positive Technologies e dal 2017 è utilizzato nei suoi prodotti.

Per libmdbx è disponibile un avanzato API C++, oltre a binding supportati da appassionati per i linguaggi Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster