VulCode

Sonic: nasze zmiany w projekcie open source

Lekki silnik wyszukiwania w Ruście, alternatywa dla Elasticsearch, która działa w kilku megabajtach pamięci.

Język
Rust
Gwiazdki na GitHubie
21 357
5przyjętych zmian
Od 15.09.2026 do 5.10.2026.
9. miejsce wśród 64 projektów na GitHubie z naszymi zmianami, według gwiazdek. Pierwszy jest Zed (91 587).

Wszystkie zmiany przyjęte w Sonic

Od najnowszej, w brzmieniu z repozytorium projektu. Każdy wiersz otwiera pull request z datą scalenia.

Co zmieniły te poprawki

Kopia zapasowa przez TRIGGER backup działa, gdy magazyn jest w użyciu, kopie obejmują znowu kubełki FST, kanał nie gubi miejsca dla klienta po błędzie odczytu, a dokumentacja opisuje limit nazw i bufor zapisu.

Błąd, poprawka i wniosek

Skrót naszego opisu z Nowinek technicznych: co nie działało, co zmieniliśmy i co z tego wynika dla naszej pracy.

Co nie działało

Kopia zawodziła przy otwartym magazynie

Po zapisie komendą PUSH baza RocksDB zostaje otwarta w puli, a TRIGGER backup próbował otworzyć ją drugi raz i trafiał na zajęty plik LOCK. Na świeżym serwerze nie było jeszcze katalogów magazynów.

Co zmieniliśmy

Kopia z otwartej instancji

Gdy magazyn jest w puli, kopia powstaje z tej instancji po zrzuceniu buforów na dysk. Brakujący katalog jest pomijany zamiast błędu.

match pooled_store {
Some(store) => kv_backup_engine.create_new_backup_flush(&store.database, true),
None => {
let origin_kv = self.open(store_id, |_| {})?;
kv_backup_engine.create_new_backup(&origin_kv)
}
}
Czego nas to nauczyło

Kopia zapasowa robiona w trakcie pracy musi brać spójny stan, a nie blokować magazyn albo czytać go w połowie zapisu.

To ta sama zasada, którą stosujemy w kopiach danych klientów.

Inne projekty z naszymi zmianami: Rust

6 projektów w tej technologii ma nasze przyjęte zmiany. Pasek to gwiazdki repozytorium, obok liczba naszych zmian. Każdy wiersz prowadzi do strony projektu.

Pytania o nasze zmiany w Sonic

Skąd są te zmiany, kto je przyjął i czy poprawimy coś w Twojej bibliotece.

Używasz Sonic w swoim projekcie?

Jeśli coś w nim nie działa, poprawimy to u źródła i zostawimy obejście do czasu wydania. Odpiszemy w godzinę.