summaryrefslogtreecommitdiff
path: root/bloom.h
diff options
context:
space:
mode:
authorGarima Singh <garima.singh@microsoft.com>2020-04-06 16:59:50 (GMT)
committerJunio C Hamano <gitster@pobox.com>2020-04-06 18:08:37 (GMT)
commit1217c03e7b87b15f2c78af5b1e1915a675050454 (patch)
treee19c660138425048b891a39028c6b6ce567c62d2 /bloom.h
parent76ffbca71a9c89d1e530f734e16a70b3924f4bea (diff)
downloadgit-1217c03e7b87b15f2c78af5b1e1915a675050454.zip
git-1217c03e7b87b15f2c78af5b1e1915a675050454.tar.gz
git-1217c03e7b87b15f2c78af5b1e1915a675050454.tar.bz2
commit-graph: reuse existing Bloom filters during write
Add logic to a) parse Bloom filter information from the commit graph file and, b) re-use existing Bloom filters. See Documentation/technical/commit-graph-format for the format in which the Bloom filter information is written to the commit graph file. To read Bloom filter for a given commit with lexicographic position 'i' we need to: 1. Read BIDX[i] which essentially gives us the starting index in BDAT for filter of commit i+1. It is essentially the index past the end of the filter of commit i. It is called end_index in the code. 2. For i>0, read BIDX[i-1] which will give us the starting index in BDAT for filter of commit i. It is called the start_index in the code. For the first commit, where i = 0, Bloom filter data starts at the beginning, just past the header in the BDAT chunk. Hence, start_index will be 0. 3. The length of the filter will be end_index - start_index, because BIDX[i] gives the cumulative 8-byte words including the ith commit's filter. We toggle whether Bloom filters should be recomputed based on the compute_if_not_present flag. Helped-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Garima Singh <garima.singh@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'bloom.h')
-rw-r--r--bloom.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/bloom.h b/bloom.h
index 85ab8e9..760d712 100644
--- a/bloom.h
+++ b/bloom.h
@@ -32,6 +32,7 @@ struct bloom_filter_settings {
#define DEFAULT_BLOOM_FILTER_SETTINGS { 1, 7, 10 }
#define BITS_PER_WORD 8
+#define BLOOMDATA_CHUNK_HEADER_SIZE 3 * sizeof(uint32_t)
/*
* A bloom_filter struct represents a data segment to
@@ -79,6 +80,7 @@ void add_key_to_filter(const struct bloom_key *key,
void init_bloom_filters(void);
struct bloom_filter *get_bloom_filter(struct repository *r,
- struct commit *c);
+ struct commit *c,
+ int compute_if_not_present);
#endif \ No newline at end of file