Merge branch 'jn/eoie-ieot'
As the warning message shown by existing versions of Git for unknown index extensions is a bit too alarming, two new extensions are held back and not written by default for the upcoming release. * jn/eoie-ieot: index: make index.threads=true enable ieot and eoie ieot: default to not writing IEOT section eoie: default to not writing EOIE section
This commit is contained in:
commit
cdda0ccebf
@ -1,3 +1,19 @@
|
||||
index.recordEndOfIndexEntries::
|
||||
Specifies whether the index file should include an "End Of Index
|
||||
Entry" section. This reduces index load time on multiprocessor
|
||||
machines but produces a message "ignoring EOIE extension" when
|
||||
reading the index using Git versions before 2.20. Defaults to
|
||||
'true' if index.threads has been explicitly enabled, 'false'
|
||||
otherwise.
|
||||
|
||||
index.recordOffsetTable::
|
||||
Specifies whether the index file should include an "Index Entry
|
||||
Offset Table" section. This reduces index load time on
|
||||
multiprocessor machines but produces a message "ignoring IEOT
|
||||
extension" when reading the index using Git versions before 2.20.
|
||||
Defaults to 'true' if index.threads has been explicitly enabled,
|
||||
'false' otherwise.
|
||||
|
||||
index.threads::
|
||||
Specifies the number of threads to spawn when loading the index.
|
||||
This is meant to reduce index load time on multiprocessor machines.
|
||||
|
17
config.c
17
config.c
@ -2294,22 +2294,25 @@ int git_config_get_fsmonitor(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int git_config_get_index_threads(void)
|
||||
int git_config_get_index_threads(int *dest)
|
||||
{
|
||||
int is_bool, val = 0;
|
||||
int is_bool, val;
|
||||
|
||||
val = git_env_ulong("GIT_TEST_INDEX_THREADS", 0);
|
||||
if (val)
|
||||
return val;
|
||||
if (val) {
|
||||
*dest = val;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!git_config_get_bool_or_int("index.threads", &is_bool, &val)) {
|
||||
if (is_bool)
|
||||
return val ? 0 : 1;
|
||||
*dest = val ? 0 : 1;
|
||||
else
|
||||
return val;
|
||||
*dest = val;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0; /* auto */
|
||||
return 1;
|
||||
}
|
||||
|
||||
NORETURN
|
||||
|
2
config.h
2
config.h
@ -246,11 +246,11 @@ extern int git_config_get_bool(const char *key, int *dest);
|
||||
extern int git_config_get_bool_or_int(const char *key, int *is_bool, int *dest);
|
||||
extern int git_config_get_maybe_bool(const char *key, int *dest);
|
||||
extern int git_config_get_pathname(const char *key, const char **dest);
|
||||
extern int git_config_get_index_threads(int *dest);
|
||||
extern int git_config_get_untracked_cache(void);
|
||||
extern int git_config_get_split_index(void);
|
||||
extern int git_config_get_max_percent_split_change(void);
|
||||
extern int git_config_get_fsmonitor(void);
|
||||
extern int git_config_get_index_threads(void);
|
||||
|
||||
/* This dies if the configured or default date is in the future */
|
||||
extern int git_config_get_expiry(const char *key, const char **output);
|
||||
|
41
read-cache.c
41
read-cache.c
@ -2176,7 +2176,8 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist)
|
||||
|
||||
src_offset = sizeof(*hdr);
|
||||
|
||||
nr_threads = git_config_get_index_threads();
|
||||
if (git_config_get_index_threads(&nr_threads))
|
||||
nr_threads = 1;
|
||||
|
||||
/* TODO: does creating more threads than cores help? */
|
||||
if (!nr_threads) {
|
||||
@ -2689,6 +2690,36 @@ void update_index_if_able(struct index_state *istate, struct lock_file *lockfile
|
||||
rollback_lock_file(lockfile);
|
||||
}
|
||||
|
||||
static int record_eoie(void)
|
||||
{
|
||||
int val;
|
||||
|
||||
if (!git_config_get_bool("index.recordendofindexentries", &val))
|
||||
return val;
|
||||
|
||||
/*
|
||||
* As a convenience, the end of index entries extension
|
||||
* used for threading is written by default if the user
|
||||
* explicitly requested threaded index reads.
|
||||
*/
|
||||
return !git_config_get_index_threads(&val) && val != 1;
|
||||
}
|
||||
|
||||
static int record_ieot(void)
|
||||
{
|
||||
int val;
|
||||
|
||||
if (!git_config_get_bool("index.recordoffsettable", &val))
|
||||
return val;
|
||||
|
||||
/*
|
||||
* As a convenience, the offset table used for threading is
|
||||
* written by default if the user explicitly requested
|
||||
* threaded index reads.
|
||||
*/
|
||||
return !git_config_get_index_threads(&val) && val != 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* On success, `tempfile` is closed. If it is the temporary file
|
||||
* of a `struct lock_file`, we will therefore effectively perform
|
||||
@ -2747,12 +2778,10 @@ static int do_write_index(struct index_state *istate, struct tempfile *tempfile,
|
||||
if (ce_write(&c, newfd, &hdr, sizeof(hdr)) < 0)
|
||||
return -1;
|
||||
|
||||
if (HAVE_THREADS)
|
||||
nr_threads = git_config_get_index_threads();
|
||||
else
|
||||
if (!HAVE_THREADS || git_config_get_index_threads(&nr_threads))
|
||||
nr_threads = 1;
|
||||
|
||||
if (nr_threads != 1) {
|
||||
if (nr_threads != 1 && record_ieot()) {
|
||||
int ieot_blocks, cpus;
|
||||
|
||||
/*
|
||||
@ -2936,7 +2965,7 @@ static int do_write_index(struct index_state *istate, struct tempfile *tempfile,
|
||||
* read. Write it out regardless of the strip_extensions parameter as we need it
|
||||
* when loading the shared index.
|
||||
*/
|
||||
if (offset) {
|
||||
if (offset && record_eoie()) {
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
|
||||
write_eoie_extension(&sb, &eoie_c, offset);
|
||||
|
@ -25,14 +25,17 @@ test_expect_success 'enable split index' '
|
||||
git update-index --split-index &&
|
||||
test-tool dump-split-index .git/index >actual &&
|
||||
indexversion=$(test-tool index-version <.git/index) &&
|
||||
|
||||
# NEEDSWORK: Stop hard-coding checksums.
|
||||
if test "$indexversion" = "4"
|
||||
then
|
||||
own=3527df833c6c100d3d1d921a9a782d62a8be4b58
|
||||
base=746f7ab2ed44fb839efdfbffcf399d0b113fb4cb
|
||||
own=432ef4b63f32193984f339431fd50ca796493569
|
||||
base=508851a7f0dfa8691e9f69c7f055865389012491
|
||||
else
|
||||
own=5e9b60117ece18da410ddecc8b8d43766a0e4204
|
||||
base=4370042739b31cd17a5c5cd6043a77c9a00df113
|
||||
own=8299b0bcd1ac364e5f1d7768efb62fa2da79a339
|
||||
base=39d890139ee5356c7ef572216cebcd27aa41f9df
|
||||
fi &&
|
||||
|
||||
cat >expect <<-EOF &&
|
||||
own $own
|
||||
base $base
|
||||
|
Loading…
Reference in New Issue
Block a user