borgend/backup.py

changeset 96
de8ac6c470d8
parent 89
51cc2e25af38
child 97
96d5adbe0205
equal deleted inserted replaced
95:41bd7025532f 96:de8ac6c470d8
363 with self._cond: 363 with self._cond:
364 self.last_create_finished=monotonic 364 self.last_create_finished=monotonic
365 self.last_create_when=monotonic 365 self.last_create_when=monotonic
366 else: 366 else:
367 self.logger.info('borg info: Could not discover a previous backup') 367 self.logger.info('borg info: Could not discover a previous backup')
368 with self._cond:
369 self.last_create_finished=-1
370 self.last_create_when=None
368 371
369 def __do_launch(self, op, archive_or_repository, 372 def __do_launch(self, op, archive_or_repository,
370 common_params, op_params, paths=[]): 373 common_params, op_params, paths=[]):
371 374
372 self.logger.debug('Creating BorgInstance') 375 self.logger.debug('Creating BorgInstance')
562 565
563 def __next_operation_unlocked(self): 566 def __next_operation_unlocked(self):
564 if self.backup_interval==0: 567 if self.backup_interval==0:
565 # Manual backup 568 # Manual backup
566 return None 569 return None
567 elif not self.last_create_finished: 570 elif self.last_create_finished==None:
568 # Don't know when last create finished: try to get it from 571 # Don't know when last create finished: try to get it from
569 # archive list. 572 # archive list.
570 if not self.errors.ok() and self.retry_interval==0: 573 if not self.errors.ok() and self.retry_interval==0:
571 # Do not retry in case of errors if retry interval is zero 574 # Do not retry in case of errors if retry interval is zero
572 return None 575 return None
576 tm=dreamtime.MonotonicTime(self.last_operation_finished+self.retry_interval) 579 tm=dreamtime.MonotonicTime(self.last_operation_finished+self.retry_interval)
577 else: 580 else:
578 # Nothing has been attempted: run immediately 581 # Nothing has been attempted: run immediately
579 tm=dreamtime.MonotonicTime.now() 582 tm=dreamtime.MonotonicTime.now()
580 return Operation(Operation.LIST, tm, reason='initial') 583 return Operation(Operation.LIST, tm, reason='initial')
581 elif not self.errors.ok() or not self.last_create_finished: 584 elif self.errors.ok() and self.last_create_finished<0:
582 # Retry create in case of errors 585 # No backup exists; perform initial backup
583 586 tm=dreamtime.MonotonicTime.now()
584 if not self.errors.ok(): 587 return Operation(Operation.CREATE, tm, reason='initial')
585 reason='retry' 588 elif not self.errors.ok():
586 else: 589 # Retry create in case of errors unless retry has been disabled
587 reason='initial'
588
589 if self.retry_interval==0: 590 if self.retry_interval==0:
590 return None 591 return None
591 else: 592 else:
592 basetime = self.last_create_finished or time.monotonic() 593 if self.last_create_finished<0:
594 basetime=time.monotonic()
595 else:
596 basetime=self.last_create_finished
593 tm=dreamtime.MonotonicTime(basetime+self.retry_interval) 597 tm=dreamtime.MonotonicTime(basetime+self.retry_interval)
594 return Operation(Operation.CREATE, tm, reason=reason) 598 return Operation(Operation.CREATE, tm, reason='retry')
595 else: 599 else:
596 # All ok - run create at standard backup interval 600 # All ok - run create at standard backup interval
597 tm=self.timeclass.from_monotonic(self.last_create_when+self.backup_interval) 601 tm=self.timeclass.from_monotonic(self.last_create_when+self.backup_interval)
598 return Operation(Operation.CREATE, tm) 602 return Operation(Operation.CREATE, tm)
599 603

mercurial