Mercurial > public > mercurial-scm > hg
diff mercurial/revlogutils/nodemap.py @ 44636:c70bcaf7927b
nodemap: automatically "vacuum" the persistent nodemap when too sparse
We arbitrarily pick "10%" as the threshold.
Differential Revision: https://phab.mercurial-scm.org/D8193
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 26 Mar 2020 11:55:06 +0100 |
parents | 99ea74cbed74 |
children | ed475420e0af |
line wrap: on
line diff
--- a/mercurial/revlogutils/nodemap.py Fri Feb 28 03:18:57 2020 +0100 +++ b/mercurial/revlogutils/nodemap.py Thu Mar 26 11:55:06 2020 +0100 @@ -143,13 +143,16 @@ data_changed_count, data, ) = revlog.index.nodemap_data_incremental() + new_length = target_docket.data_length + len(data) + new_unused = target_docket.data_unused + data_changed_count if src_docket != target_docket: data = None + elif new_length <= (new_unused * 10): # under 10% of unused data + data = None else: datafile = _rawdata_filepath(revlog, target_docket) # EXP-TODO: if this is a cache, this should use a cache vfs, not a # store vfs - new_length = target_docket.data_length + len(data) tr.add(datafile, target_docket.data_length) with revlog.opener(datafile, b'r+') as fd: fd.seek(target_docket.data_length) @@ -162,7 +165,7 @@ fd.flush() new_data = util.buffer(util.mmapread(fd, new_length)) target_docket.data_length = new_length - target_docket.data_unused += data_changed_count + target_docket.data_unused = new_unused if data is None: # otherwise fallback to a full new export