diff --git a/noblogsmv/main.py b/noblogsmv/main.py index e279ccf56562565970769549eae23c1ca7709def..bf6ca942e698faf75529d05152240d96b0de0b78 100644 --- a/noblogsmv/main.py +++ b/noblogsmv/main.py @@ -1,3 +1,4 @@ +import glob import logging import optparse import os @@ -39,21 +40,33 @@ def sshcmd(*args): '-o', 'StrictHostKeyChecking=no', '-o', 'ControlMaster=auto', '-o', 'ControlPath=.ssh_ctrl_%h', + '-o', 'ControlPersist=yes', ] + list(args) +def ssh_cleanup(): + log.info('cleaning up SSH control sockets...') + for path in glob.glob('.ssh_ctrl_*'): + subprocess.check_call([ + 'ssh', + '-o', 'ControlMaster=auto', + '-o', 'ControlPath=%s' % path, + '-O', 'exit', + 'unused']) + + class MysqlNoblogs(object): conn = collections.namedtuple('DbData', ['host', 'port', 'user', 'password', 'db']) - def __init__(self, old_host,old_port,old_user,old_pass,old_db, - new_host,new_port,new_user,new_pass,new_db,**kwd): - self.old = self.conn(old_host,old_port,old_user,old_pass, old_db) - self.new = self.conn(new_host,new_port,new_user,new_pass, new_db) + def __init__(self, old_host, old_port, old_user, old_pass, old_db, + new_host, new_port, new_user, new_pass, new_db, **kwd): + self.old = self.conn(old_host, old_port, old_user, old_pass, old_db) + self.new = self.conn(new_host, new_port, new_user, new_pass, new_db) def options(self, conn): - return '-h%s -P%s -u%s -p%s' % (conn.host,conn.port, - conn.user,conn.password) + return '-h%s -P%s -u%s -p%s' % (conn.host, conn.port, + conn.user, conn.password) @property def old_options(self): @@ -180,6 +193,7 @@ def process_rm_data(blog_id, value, progress): class NoblogsStateMachine(state.StateMachine): pass + class NoblogsMoveStateMachine(NoblogsStateMachine): states = { @@ -261,6 +275,8 @@ use the `--recover' option. sm.run() + ssh_cleanup() + if opts.noexit: # This will never return. httpserver.join()