[Bug 5658] New: I/O error writing to stdout/stderr can lead to abandoned transactions
mercurial-bugs at mercurial-scm.org
mercurial-bugs at mercurial-scm.org
Mon Aug 14 18:51:53 UTC 2017
https://bz.mercurial-scm.org/show_bug.cgi?id=5658
Bug ID: 5658
Summary: I/O error writing to stdout/stderr can lead to
abandoned transactions
Product: Mercurial
Version: 4.2.2
Hardware: All
OS: All
Status: UNCONFIRMED
Keywords: regression
Severity: bug
Priority: urgent
Component: Mercurial
Assignee: bugzilla at mercurial-scm.org
Reporter: gregory.szorc at gmail.com
CC: mercurial-devel at mercurial-scm.org
Upon upgrading various servers at Mozilla from 4.1.2 to 4.2.2, we started
seeing a number of abandoned transactions on the server. This appears to occur
with both SSH and HTTP servers.
I believe e9646ff34d55 and 1bfb9a63b98e are to blame.
Before those changesets, various IOError during ui._write_err() and ui.flush()
were ignored. After those changesets, they get converted into exceptions.
What I think is happening is something like this:
1) Client connects
2) Transaction opened on server
3) Client disconnects via ^C
4) Server-side process keeps going or triggers a KeyboardInterrupt, which
causes the transaction to unwind
5) `self.report(_("transaction abort!\n"))` from transaction._abort (or any
other write or flush on ui) attempts to write to a pipe that has disappeared,
triggering IOError.
6) Post e9646ff34d55 and 1bfb9a63b98e, the IOError/StdioError is unhandled by
transaction.py, leading to an orphaned journal file and abandonded transaction
errors
Essentially, the underlying bug is that IOError on stdout and stderr interfere
with transaction semantics.
--
You are receiving this mail because:
You are on the CC list for the bug.
More information about the Mercurial-devel
mailing list