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 |