Example #1
0
 def test_add_one_finished_task_and_query_for_other(self):
     self.database.register_node('node', 'address', 1111)
     self.database.add_scheduled_task('node', '/home', 4)
     ft1 = FinishedTask('/tmp/backup1', 223.43, datetime.now(), checksum="")
     self.database.register_finished_task('node', '/home', ft1)
     self.assertEqual(self.database.get_node_finished_tasks('node', '/tmp'),
                      [])
Example #2
0
 def test_add_finished_task_errors(self):
     self.database.register_node('node', 'address', 1111)
     self.database.add_scheduled_task('node', '/home', 4)
     ft1 = FinishedTask('/tmp/backup1', 223.43, datetime.now(), checksum="")
     with self.assertRaises(UnexistentNodeError):
         self.database.register_finished_task('node', '/home2', ft1)
     with self.assertRaises(UnexistentNodeError):
         self.database.register_finished_task('node1', '/home', ft1)
Example #3
0
 def _dispatch_running_tasks(self):
     """
     Handles running tasks
     """
     now_running_tasks = {}
     for node_data, task in self.running_tasks.items():
         if not task.is_running():
             if task.backup_is_correct():
                 ft = FinishedTask(
                     result_path=task.write_file_path,
                     kb_size=os.path.getsize(task.write_file_path) / 1024,
                     timestamp=datetime.now(),
                     checksum=BackupFile(task.write_file_path).get_hash())
                 self.database.register_finished_task(
                     node_data[0], node_data[1], ft)
                 BackupScheduler.logger.info(
                     "Backup for node %s and path %s finished succesfully" %
                     node_data)
                 self._reload_schedule()
                 self._clean_backup_path()
             elif task.backup_is_same():
                 ft = self.database.get_node_finished_tasks(
                     node_data[0], node_data[1])[0]
                 ft = FinishedTask(result_path=ft.result_path,
                                   kb_size=ft.kb_size,
                                   timestamp=datetime.now(),
                                   checksum=ft.checksum)
                 self.database.register_finished_task(
                     node_data[0], node_data[1], ft)
                 BackupScheduler.logger.info(
                     "Backup for node %s and path %s finished succesfully" %
                     node_data)
                 self._reload_schedule()
                 self._clean_backup_path()
             else:
                 BackupScheduler.logger.error(
                     "Backup for node %s and path %s failed" % node_data)
         else:
             now_running_tasks[node_data] = task
     self.running_tasks = now_running_tasks
Example #4
0
 def test_error_and_recover(self):
     self.database.register_node('node', 'address', 1111)
     self.database.add_scheduled_task('node', '/home', 4)
     ft1 = FinishedTask('/tmp/backup1', 223.43, datetime.now(), checksum="")
     with self.assertRaises(UnexistentNodeError):
         self.database.register_finished_task('node', '/home2', ft1)
     with self.assertRaises(UnexistentNodeError):
         self.database.get_node_address('node1')
     with self.assertRaises(UnexistentNodeError):
         self.database.add_scheduled_task('node1', '/path', 1)
     self.database = DiskDatabase('/tmp/disk_db_concus')
     self.assertEqual(('address', 1111),
                      self.database.get_node_address('node'))
Example #5
0
 def test_recover_each_step_add_finished_tasks(self):
     self.database.register_node('node', 'address', 1111)
     self.database.add_scheduled_task('node', '/home', 4)
     tasks = []
     for i in range(250):
         ft = FinishedTask('/tmp/backup1',
                           223.43,
                           datetime.now(),
                           checksum="")
         tasks.insert(0, ft)
         self.database.register_finished_task('node', '/home', ft)
         self.database = DiskDatabase('/tmp/disk_db_concus')
     self.assertEqual(
         self.database.get_node_finished_tasks('node', '/home'), tasks)
Example #6
0
    def register_finished_task(self, node_name: str, node_path: str,
                               task: FinishedTask) -> NoReturn:
        """
        Registers a finished task for the node name and path

        :raises:
            UnexistentNodeError: if the node or path do not exist

        :param node_name: the node name
        :param node_path: the node path
        :param task: the finished task
        """
        self._write_operation(
            '_register_finished_task',
            [node_name, node_path, task.to_dict()],
            use_log=True)
Example #7
0
    def get_node_finished_tasks(self, node_name: str,
                                node_path: str) -> List[FinishedTask]:
        """
        List all finished tasks for a node and path

        :param node_name: the node name
        :param node_path: the node path
        :return: a list of finished tasks ordered from most recent to latest
        """
        if node_name not in self.database:
            return []
        if node_path not in self.database[node_name]['finished_tasks']:
            return []
        return [
            FinishedTask.from_dict(ft)
            for ft in self.database[node_name]['finished_tasks'][node_path]
        ]
Example #8
0
 def testToDictFromDict(self):
     ft = FinishedTask('/home', 0, datetime.now(), checksum="")
     self.assertEqual(ft, FinishedTask.from_dict(ft.to_dict()))