diff options
author | Han-Wen Nienhuys <hanwen@google.com> | 2019-08-12 17:33:51 +0200 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2019-11-16 23:16:01 -0800 |
commit | 38586d54d0a2da26d574fec831fce8964205db50 (patch) | |
tree | f725df7edde7b3c86d4f3dd3946018dc44672a62 /org.eclipse.jgit.pgm/src/org | |
parent | 7b73d5eec746f58972585ba5f6364190704a7519 (diff) | |
download | jgit-38586d54d0a2da26d574fec831fce8964205db50.tar.gz jgit-38586d54d0a2da26d574fec831fce8964205db50.zip |
file: implement FileReftableDatabase
Reftable is a binary, block-based storage format for the ref-database.
It provides several advantages over the traditional packed + loose
storage format:
* O(1) write performance, even for deletions and transactions.
* atomic updates to the ref database.
* O(log N) lookup and prefix scans
* free from restrictions imposed by the file system: it is
case-sensitive even on case-insensitive file systems, and has
no inherent limitations for directory/file conflicts
* prefix compression reduces space usage for repetitive ref names,
such as gerrit's refs/changes/xx/xxxxx format.
FileReftableDatabase is based on FileReftableStack, which does
compactions inline. This is simple, and has good median performance,
but every so often it will rewrite the entire ref database.
For testing, a FileReftableTest (mirroring RefUpdateTest) is added to
check for Reftable specific behavior. This must be done separately, as
reflogs have different semantics.
Add a reftable flavor of BatchRefUpdateTest.
Add a FileReftableStackTest to exercise compaction.
Add FileRepository#convertToReftable so existing testdata can be
reused.
CQ: 21007
Change-Id: I1837f268e91c6b446cb0155061727dbaccb714b8
Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Diffstat (limited to 'org.eclipse.jgit.pgm/src/org')
0 files changed, 0 insertions, 0 deletions