D2463: wireprotoserver: support logging SSH server I/O to a file descriptor
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Mon Feb 26 21:17:02 UTC 2018
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
We will soon introduce a debug command and tests for low-level I/O
behavior of the SSH wire protocol.
To facilitate this, we need to instrument the SSH server so it
can log its I/O as events occur.
We teach the SSH server to convert its stdout and stderr file objects
into file object proxies. We configure these proxies to log to a
file descriptor whose file number is specified via a config option.
The idea is to have a future debug command start the SSH server
process with access to an extra file descriptor that can be used
by the server process to log I/O. Monitoring only the write I/O
will be more robust than monitoring both writes and reads from the
client process because read operations are not deterministic. This
will matter for tests that capture raw I/O activity.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D2463
AFFECTED FILES
mercurial/wireprotoserver.py
CHANGE DETAILS
diff --git a/mercurial/wireprotoserver.py b/mercurial/wireprotoserver.py
--- a/mercurial/wireprotoserver.py
+++ b/mercurial/wireprotoserver.py
@@ -7,6 +7,7 @@
from __future__ import absolute_import
import contextlib
+import os
import struct
import sys
import threading
@@ -588,12 +589,19 @@
state)
class sshserver(object):
- def __init__(self, ui, repo):
+ def __init__(self, ui, repo, logfh=None):
self._ui = ui
self._repo = repo
self._fin = ui.fin
self._fout = ui.fout
+ # Log write I/O to stdout and stderr if configured.
+ if logfh:
+ self._fout = util.makeloggingfileobject(
+ logfh, self._fout, 'o', logdata=True)
+ ui.ferr = util.makeloggingfileobject(
+ logfh, ui.ferr, 'e', logdata=True)
+
hook.redirect(True)
ui.fout = repo.ui.fout = ui.ferr
To: indygreg, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list