blob: c3cf221bb1e2ac8383d42de3204905d4265a7eaa [file] [log] [blame]
from abc import abstractmethod
from twitter.common.lang import Interface
class BackupInfo(object):
def __init__(self, backup_file, cold_backup):
self.backup_file = backup_file
self.cold_backup = cold_backup
class BackupStore(Interface):
"""
The storage for Mysos executor state backup (i.e. MySQL data, etc.).
Thread-safety: The BackupStore implementation is not expected to be thread-safe and the caller
should be responsible for it.
"""
class Error(Exception): pass
class BackupNotFoundError(Error): pass
@abstractmethod
def restore(self):
"""
Restore the backup.
:return: The BackupInfo object. None if no state is restored.
"""
pass
class BackupStoreProvider(Interface):
@abstractmethod
def from_task(self, task, sandbox):
"""
Factory method that creates a BackupStore instance from 'task' (TaskInfo).
:return: The BackupStore instance.
"""
pass
class NoopBackupStore(BackupStore):
"""Used when no restore is requested."""
def restore(self):
return None # Returning 'None' because no state is restored.
class NoopBackupStoreProvider(BackupStoreProvider):
"""Used when no restore is requested."""
def from_task(self, task, sandbox):
return NoopBackupStore()