backup.py

changeset 54
cfcaa5f6ba33
parent 50
2d8947351727
child 55
407af23d16bb
equal deleted inserted replaced
53:442c558bd632 54:cfcaa5f6ba33
5 import config 5 import config
6 import logging 6 import logging
7 import time 7 import time
8 import keyring 8 import keyring
9 import borgend 9 import borgend
10 import repository
10 from instance import BorgInstance 11 from instance import BorgInstance
11 from threading import Thread, Lock, Condition 12 from threading import Thread, Lock, Condition
12 from scheduler import TerminableThread 13 from scheduler import TerminableThread
13 14
14 logger=borgend.logger.getChild(__name__) 15 logger=borgend.logger.getChild(__name__)
53 54
54 self._name=config.check_string(cfg, 'name', 'Name', loc0) 55 self._name=config.check_string(cfg, 'name', 'Name', loc0)
55 56
56 self.loc='backup target "%s"' % self._name 57 self.loc='backup target "%s"' % self._name
57 58
58 self.repository=config.check_string(cfg, 'repository', 59 reponame=config.check_string(cfg, 'repository',
59 'Target repository', self.loc) 60 'Target repository', self.loc)
61
62 self.repository=repository.get_controller(reponame)
60 63
61 self.archive_prefix=config.check_string(cfg, 'archive_prefix', 64 self.archive_prefix=config.check_string(cfg, 'archive_prefix',
62 'Archive prefix', self.loc) 65 'Archive prefix', self.loc)
63 66
64 self.archive_template=config.check_string(cfg, 'archive_template', 67 self.archive_template=config.check_string(cfg, 'archive_template',
294 else: 297 else:
295 try: 298 try:
296 logger.debug("Launching '%s' on '%s'" % (op['operation'], self._name)) 299 logger.debug("Launching '%s' on '%s'" % (op['operation'], self._name))
297 300
298 if op['operation']=='create': 301 if op['operation']=='create':
299 archive="%s::%s%s" % (self.repository, 302 archive="%s::%s%s" % (self.repository.repository_name,
300 self.archive_prefix, 303 self.archive_prefix,
301 self.archive_template) 304 self.archive_template)
302 305
303 self.__do_launch(op, archive, 306 self.__do_launch(op, archive,
304 self.common_parameters+self.create_parameters, 307 self.common_parameters+self.create_parameters,
305 self.paths) 308 self.paths)
306 elif op['operation']=='prune': 309 elif op['operation']=='prune':
307 self.__do_launch(op, self.repository, 310 self.__do_launch(op, self.repository.repository_name,
308 ([{'prefix': self.archive_prefix}] + 311 ([{'prefix': self.archive_prefix}] +
309 self.common_parameters + 312 self.common_parameters +
310 self.prune_parameters)) 313 self.prune_parameters))
311 else: 314 else:
312 raise NotImplementedError("Invalid operation '%s'" % op['operation']) 315 raise NotImplementedError("Invalid operation '%s'" % op['operation'])
386 self.scheduler.wait_until(now+delay, self._cond, self._name) 389 self.scheduler.wait_until(now+delay, self._cond, self._name)
387 390
388 if self.scheduled_operation: 391 if self.scheduled_operation:
389 op=self.scheduled_operation 392 op=self.scheduled_operation
390 self.scheduled_operation=None 393 self.scheduled_operation=None
391 self.__launch(op) 394 self.repository.queue_action(self._cond, name=self._name,
392 395 action=lambda: self.__launch(op))
393 # Kill a running borg to cause log and result threads to terminate 396 # Kill a running borg to cause log and result threads to terminate
394 if self.borg_instance: 397 if self.borg_instance:
395 logger.debug("Terminating a borg instance") 398 logger.debug("Terminating a borg instance")
396 self.borg_instance.terminate() 399 self.borg_instance.terminate()
397 400

mercurial