Commit 461df152 authored by Julien Muchembled's avatar Julien Muchembled

importer: give a title to the 'import' and 'writeback' subprocesses

'title' means both process name and command line.

This is cosmetics so it won't fail if the 'setproctitle' module
is not available.
parent 05bf48de
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import socket import os, socket
from binascii import a2b_hex, b2a_hex from binascii import a2b_hex, b2a_hex
from datetime import timedelta, datetime from datetime import timedelta, datetime
from hashlib import sha1 from hashlib import sha1
...@@ -226,3 +226,25 @@ class cached_property(object): ...@@ -226,3 +226,25 @@ class cached_property(object):
if obj is None: return self if obj is None: return self
value = obj.__dict__[self.func.__name__] = self.func(obj) value = obj.__dict__[self.func.__name__] = self.func(obj)
return value return value
# This module is always imported before multiprocessing is used, and the
# main process does not want to change name when task are run in threads.
spt_pid = os.getpid()
def setproctitle(title):
global spt_pid
pid = os.getpid()
if spt_pid == pid:
return
spt_pid = pid
# Try using https://pypi.org/project/setproctitle/
try:
# On Linux, this is done by clobbering argv, and the main process
# usually has a longer command line than the title of subprocesses.
os.environ['SPT_NOENV'] = '1'
from setproctitle import setproctitle
except ImportError:
return
finally:
del os.environ['SPT_NOENV']
setproctitle(title)
...@@ -463,6 +463,7 @@ class ImporterDatabaseManager(DatabaseManager): ...@@ -463,6 +463,7 @@ class ImporterDatabaseManager(DatabaseManager):
setattr(self, x, getattr(self.db, x)) setattr(self, x, getattr(self.db, x))
def _iter_zodb(self): def _iter_zodb(self):
util.setproctitle('neostorage: import')
p64 = util.p64 p64 = util.p64
u64 = util.u64 u64 = util.u64
tid = p64(self.zodb_tid + 1) if self.zodb_tid else None tid = p64(self.zodb_tid + 1) if self.zodb_tid else None
...@@ -683,6 +684,7 @@ class WriteBack(object): ...@@ -683,6 +684,7 @@ class WriteBack(object):
return self._idle.wait return self._idle.wait
def _run(self): def _run(self):
util.setproctitle('neostorage: write back')
self._db = cPickle.loads(self._db) self._db = cPickle.loads(self._db)
try: try:
@self._db.autoReconnect @self._db.autoReconnect
......
...@@ -38,7 +38,7 @@ extras_require = { ...@@ -38,7 +38,7 @@ extras_require = {
'master': [], 'master': [],
'storage-sqlite': [], 'storage-sqlite': [],
'storage-mysqldb': ['mysqlclient'], 'storage-mysqldb': ['mysqlclient'],
'storage-importer': zodb_require + ['msgpack>=0.5.6'], 'storage-importer': zodb_require + ['msgpack>=0.5.6', 'setproctitle'],
} }
extras_require['tests'] = ['coverage', 'zope.testing', 'psutil>=2', extras_require['tests'] = ['coverage', 'zope.testing', 'psutil>=2',
'neoppod[%s]' % ', '.join(extras_require)] 'neoppod[%s]' % ', '.join(extras_require)]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment