D7893: nodemap: update the index with the newly written data (when appropriate)

marmoute (Pierre-Yves David) phabricator at mercurial-scm.org
Wed Jan 15 14:58:28 UTC 2020


marmoute created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  If we are to use mmap to read the nodemap data, and if the python code is
  responsible for the IO, we need to refresh the mmap after each write and provide
  it back to the index.
  
  We start this dance without the mmap first.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D7893

AFFECTED FILES
  mercurial/revlogutils/nodemap.py

CHANGE DETAILS

diff --git a/mercurial/revlogutils/nodemap.py b/mercurial/revlogutils/nodemap.py
--- a/mercurial/revlogutils/nodemap.py
+++ b/mercurial/revlogutils/nodemap.py
@@ -100,6 +100,8 @@
             with revlog.opener(datafile, 'r+') as fd:
                 fd.seek(target_docket.data_length)
                 fd.write(data)
+                fd.seek(0)
+                new_data = fd.read(target_docket.data_length + len(data))
             target_docket.data_length += len(data)
             target_docket.data_unused += data_changed_count
 
@@ -113,6 +115,7 @@
             data = persistent_data(revlog.index)
         # EXP-TODO: if this is a cache, this should use a cache vfs, not a
         # store vfs
+        new_data = data
         with revlog.opener(datafile, 'w') as fd:
             fd.write(data)
         target_docket.data_length = len(data)
@@ -122,6 +125,9 @@
     with revlog.opener(revlog.nodemap_file, 'w', atomictemp=True) as fp:
         fp.write(target_docket.serialize())
     revlog._nodemap_docket = target_docket
+    if util.safehasattr(revlog.index, "update_nodemap_data"):
+        revlog.index.update_nodemap_data(target_docket, new_data)
+
     # EXP-TODO: if the transaction abort, we should remove the new data and
     # reinstall the old one.
 



To: marmoute, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list