Page MenuHomePhabricator

revlog: introduce a mandatory `_writing` context to update revlog content

Authored by marmoute on May 3 2021, 7:52 AM.



Before this change, various revlog methods where managing the opening and
closing of the revlog files manually and passing the file descriptor alors the
call path. To simplify the tracking of the write operation by a future docket,
we need something more organised. As a result, we introduce a revlog._writing
context manager that will wrap each revlog update operation. The file
descriptor are kept in the existing revlog._writinghandles parameter that
was already used by the addgroup logic.

All this change is internal to the revlog only, the "public" interface is not
affected. The addrevision and addgroup logic are still responsible for
setup up this context. However this new context give us multiple benefits:

  • all writer use a same, unified, logic,
  • this context is programmatically enforced,
  • each write "session" as a clearly identified start and end.

The post-pull sidedata update logic is still doing writing by end and will be
adjusted in a later changesets.

This change affect the concurrency checker test, because register the state of
the file in the transaction sooner in addrevision (about as early as what
addgroup would do), so the abort is rollbacking the other commit. I don't want
to weaken the current main logic.

Diff Detail

rHG Mercurial
No Linters Available
No Unit Test Coverage

Event Timeline

marmoute created this revision.May 3 2021, 7:52 AM
baymax updated this revision to Diff 27520.May 3 2021, 9:44 PM

✅ refresh by Heptapod after a successful CI run (🐙 💚)

baymax updated this revision to Diff 27851.May 11 2021, 1:42 PM

✅ refresh by Heptapod after a successful CI run (🐙 💚)

Alphare accepted this revision.May 17 2021, 5:58 AM
This revision is now accepted and ready to land.May 17 2021, 5:58 AM
baymax updated this revision to Diff 27977.May 17 2021, 7:02 AM

✅ refresh by Heptapod after a successful CI run (🐙 💚)