hooks update

This commit is contained in:
bigeagle 2014-10-19 00:36:27 +08:00
parent b0e4648dc3
commit 3629448b3b
4 changed files with 24 additions and 7 deletions

View File

@ -17,10 +17,10 @@ class BtrfsHook(JobHook):
self.working_dir = working_dir
self.gc_dir = gc_dir
def before_job(self):
def before_job(self, *args, **kwargs):
self._create_working_snapshot()
def after_job(self):
def after_job(self, *args, **kwargs):
self._commit_changes()
def _ensure_subvolume(self):

View File

@ -4,10 +4,10 @@
class JobHook(object):
def before_job(self):
def before_job(self, *args, **kwargs):
raise NotImplementedError("")
def after_job(self):
def after_job(self, *args, **kwargs):
raise NotImplementedError("")
# vim: ts=4 sw=4 sts=4 expandtab

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# -*- coding:utf-8 -*-
import sh
import sys
import signal
@ -28,10 +29,20 @@ def run_job(sema, child_q, manager_q, provider):
hook.before_job()
provider.run()
provider.wait()
try:
provider.wait()
except sh.ErrorReturnCode:
status = "fail"
else:
status = "success"
for hook in provider.hooks[::-1]:
hook.after_job()
try:
hook.after_job(status=status)
except Exception:
import traceback
traceback.print_exc()
sema.release()
aquired = False

View File

@ -9,6 +9,7 @@ from multiprocessing import Process, Semaphore, Queue
from . import jobs
from .mirror_provider import RsyncProvider, ShellProvider
from .btrfs_snapshot import BtrfsHook
from .hook import JobHook
class MirrorConfig(object):
@ -145,6 +146,7 @@ class TUNASync(object):
self.processes = {}
self.semaphore = Semaphore(self._settings.getint("global", "concurrent"))
self.channel = Queue()
self._hooks = []
self.mirror_root = self._settings.get("global", "mirror_root")
self.use_btrfs = self._settings.getboolean("global", "use_btrfs")
@ -155,8 +157,12 @@ class TUNASync(object):
self.btrfs_gc_dir_tmpl = self._settings.get(
"btrfs", "gc_dir")
def add_hook(self, h):
assert isinstance(h, JobHook)
self._hooks.append(h)
def hooks(self):
return []
return self._hooks
@property
def mirrors(self):