mitogen: Log why a module is sent or not sent by ModuleResponder

This should not change the logic
pull/1126/head
Alex Willmer 7 days ago
parent f556ec12b1
commit f191f050bf

@ -27,6 +27,8 @@ In progress (unreleased)
* :gh:issue:`1118` CI: Add OS release coverage: CentOS 5 * :gh:issue:`1118` CI: Add OS release coverage: CentOS 5
* :gh:issue:`1118` CI: Add OS release coverage: Debian 12 * :gh:issue:`1118` CI: Add OS release coverage: Debian 12
* :gh:issue:`1118` CI: Add OS release coverage: Ubuntu 22.04, Ubuntu 24.04 * :gh:issue:`1118` CI: Add OS release coverage: Ubuntu 22.04, Ubuntu 24.04
* :gh:issue:`1124` :mod:`mitogen`: Log why a module is sent or not sent by
:class:`mitogen.master.ModuleResponder`
v0.3.33 (2025-11-22) v0.3.33 (2025-11-22)

@ -931,6 +931,31 @@ class ModuleFinder(object):
fullname, _, _ = str_rpartition(to_text(fullname), u'.') fullname, _, _ = str_rpartition(to_text(fullname), u'.')
yield fullname yield fullname
def _reject_related_module(self, requested_fullname, related_fullname):
def _log_reject(reason):
LOG.debug(
'%r: Rejected related module %s of requested module %s: %s',
self, related_fullname, requested_fullname, reason,
)
return reason
try:
related_module = sys.modules[related_fullname]
except KeyError:
return _log_reject('sys.modules entry absent')
# Python 2.x "indirection entry"
if related_module is None:
return _log_reject('sys.modules entry is None')
if is_stdlib_name(related_fullname):
return _log_reject('stdlib module')
if 'six.moves' in related_fullname:
return _log_reject('six.moves avoidence')
return False
def find_related_imports(self, fullname): def find_related_imports(self, fullname):
""" """
Return a list of non-stdlib modules that are directly imported by Return a list of non-stdlib modules that are directly imported by
@ -973,9 +998,7 @@ class ModuleFinder(object):
set( set(
mitogen.core.to_text(name) mitogen.core.to_text(name)
for name in maybe_names for name in maybe_names
if sys.modules.get(name) is not None if not self._reject_related_module(fullname, name)
and not is_stdlib_name(name)
and u'six.moves' not in name # TODO: crap
) )
)) ))
@ -1138,7 +1161,7 @@ class ModuleResponder(object):
self._cache[fullname] = tup self._cache[fullname] = tup
return tup return tup
def _send_load_module(self, stream, fullname): def _send_load_module(self, stream, fullname, reason):
if fullname not in stream.protocol.sent_modules: if fullname not in stream.protocol.sent_modules:
tup = self._build_tuple(fullname) tup = self._build_tuple(fullname)
msg = mitogen.core.Message.pickled( msg = mitogen.core.Message.pickled(
@ -1146,8 +1169,10 @@ class ModuleResponder(object):
dst_id=stream.protocol.remote_id, dst_id=stream.protocol.remote_id,
handle=mitogen.core.LOAD_MODULE, handle=mitogen.core.LOAD_MODULE,
) )
self._log.debug('sending %s (%.2f KiB) to %s', self._log.debug(
fullname, len(msg.data) / 1024.0, stream.name) 'sending %s %s (%.2f KiB) to %s',
reason, fullname, len(msg.data) / 1024.0, stream.name,
)
self._router._async_route(msg) self._router._async_route(msg)
stream.protocol.sent_modules.add(fullname) stream.protocol.sent_modules.add(fullname)
if tup[2] is not None: if tup[2] is not None:
@ -1178,8 +1203,8 @@ class ModuleResponder(object):
# Parent hasn't been sent, so don't load submodule yet. # Parent hasn't been sent, so don't load submodule yet.
continue continue
self._send_load_module(stream, name) self._send_load_module(stream, name, 'related')
self._send_load_module(stream, fullname) self._send_load_module(stream, fullname, 'requested')
except Exception: except Exception:
LOG.debug('While importing %r', fullname, exc_info=True) LOG.debug('While importing %r', fullname, exc_info=True)
self._send_module_load_failed(stream, fullname) self._send_module_load_failed(stream, fullname)

Loading…
Cancel
Save