@matheusbsbs / matheus-bagliano / commits / 97ffa4fab5
Fork 0

commit-graph.c: store maximum changed paths

For now, we assume that there is a fixed constant describing the maximum number of changed paths we are willing to store in a Bloom filter. Prepare for that to (at least partially) not be the case by making it a member of the 'struct bloom_filter_settings'. This will be helpful in the subsequent patches by reducing the size of test cases that exercise storing too many changed paths, as well as preparing for an eventual future in which this value might change. This patch alone does not cause newly generated Bloom filters to use a custom upper-bound on the maximum number of changed paths a single Bloom filter can hold, that will occur in a later patch. Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Taylor Blau committed Sep 17, 2020 at 09:34 UTC 97ffa4fab504a9c5e3b63ff886686c7f6ccd4e70
3 files changed +16 -3
bloom.h
+10 -1
@@ -28,9 +28,18 @@ struct bloom_filter_settings {
28 * that contain n*b bits.
29 */
30 uint32_t bits_per_entry;
31 +
32 + /*
33 + * The maximum number of changed paths per commit
34 + * before declaring a Bloom filter to be too-large.
35 + *
36 + * Not written to the commit-graph file.
37 + */
38 + uint32_t max_changed_paths;
39 };
40
33 -#define DEFAULT_BLOOM_FILTER_SETTINGS { 1, 7, 10 }
41 +#define DEFAULT_BLOOM_MAX_CHANGES 512
42 +#define DEFAULT_BLOOM_FILTER_SETTINGS { 1, 7, 10, DEFAULT_BLOOM_MAX_CHANGES }
43 #define BITS_PER_WORD 8
44 #define BLOOMDATA_CHUNK_HEADER_SIZE 3 * sizeof(uint32_t)
45
commit-graph.c
+4
@@ -417,6 +417,7 @@ struct commit_graph *parse_commit_graph(struct repository *r,
417 graph->bloom_filter_settings->hash_version = hash_version;
418 graph->bloom_filter_settings->num_hashes = get_be32(data + chunk_offset + 4);
419 graph->bloom_filter_settings->bits_per_entry = get_be32(data + chunk_offset + 8);
420 + graph->bloom_filter_settings->max_changed_paths = DEFAULT_BLOOM_MAX_CHANGES;
421 }
422 break;
423 }
@@ -1194,6 +1195,7 @@ static void trace2_bloom_filter_settings(struct write_commit_graph_context *ctx)
1195 jw_object_intmax(&jw, "hash_version", ctx->bloom_settings->hash_version);
1196 jw_object_intmax(&jw, "num_hashes", ctx->bloom_settings->num_hashes);
1197 jw_object_intmax(&jw, "bits_per_entry", ctx->bloom_settings->bits_per_entry);
1198 + jw_object_intmax(&jw, "max_changed_paths", ctx->bloom_settings->max_changed_paths);
1199 jw_end(&jw);
1200
1201 trace2_data_json("bloom", ctx->r, "settings", &jw);
@@ -1662,6 +1664,8 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx)
1664 bloom_settings.bits_per_entry);
1665 bloom_settings.num_hashes = git_env_ulong("GIT_TEST_BLOOM_SETTINGS_NUM_HASHES",
1666 bloom_settings.num_hashes);
1667 + bloom_settings.max_changed_paths = git_env_ulong("GIT_TEST_BLOOM_SETTINGS_MAX_CHANGED_PATHS",
1668 + bloom_settings.max_changed_paths);
1669 ctx->bloom_settings = &bloom_settings;
1670 }
1671
t/t4216-log-bloom.sh
+2 -2
@@ -169,11 +169,11 @@ test_expect_success 'persist filter settings' '
169 GIT_TEST_BLOOM_SETTINGS_NUM_HASHES=9 \
170 GIT_TEST_BLOOM_SETTINGS_BITS_PER_ENTRY=15 \
171 git commit-graph write --reachable --changed-paths &&
172 - grep "{\"hash_version\":1,\"num_hashes\":9,\"bits_per_entry\":15}" trace2.txt &&
172 + grep "{\"hash_version\":1,\"num_hashes\":9,\"bits_per_entry\":15,\"max_changed_paths\":512" trace2.txt &&
173 GIT_TRACE2_EVENT="$(pwd)/trace2-auto.txt" \
174 GIT_TRACE2_EVENT_NESTING=5 \
175 git commit-graph write --reachable --changed-paths &&
176 - grep "{\"hash_version\":1,\"num_hashes\":9,\"bits_per_entry\":15}" trace2-auto.txt
176 + grep "{\"hash_version\":1,\"num_hashes\":9,\"bits_per_entry\":15,\"max_changed_paths\":512" trace2-auto.txt
177 '
178
179 test_expect_success 'correctly report changes over limit' '