mirror of
https://github.com/borgbackup/borg.git
synced 2025-02-23 14:41:43 +00:00
fix wrong duration if clock jumps during create
This commit is contained in:
parent
4f0c2ab68c
commit
420c984f05
2 changed files with 9 additions and 6 deletions
|
@ -1,5 +1,5 @@
|
|||
from contextlib import contextmanager
|
||||
from datetime import datetime, timezone
|
||||
from datetime import datetime, timezone, timedelta
|
||||
from getpass import getuser
|
||||
from itertools import groupby
|
||||
import errno
|
||||
|
@ -186,7 +186,7 @@ class IncompatibleFilesystemEncodingError(Error):
|
|||
|
||||
def __init__(self, repository, key, manifest, name, cache=None, create=False,
|
||||
checkpoint_interval=300, numeric_owner=False, noatime=False, noctime=False, progress=False,
|
||||
chunker_params=CHUNKER_PARAMS, start=None, end=None):
|
||||
chunker_params=CHUNKER_PARAMS, start=None, start_monotonic=None, end=None):
|
||||
self.cwd = os.getcwd()
|
||||
self.key = key
|
||||
self.repository = repository
|
||||
|
@ -200,9 +200,12 @@ def __init__(self, repository, key, manifest, name, cache=None, create=False,
|
|||
self.numeric_owner = numeric_owner
|
||||
self.noatime = noatime
|
||||
self.noctime = noctime
|
||||
assert (start is None) == (start_monotonic is None), 'Logic error: if start is given, start_monotonic must be given as well and vice versa.'
|
||||
if start is None:
|
||||
start = datetime.utcnow()
|
||||
start_monotonic = time.monotonic()
|
||||
self.start = start
|
||||
self.start_monotonic = start_monotonic
|
||||
if end is None:
|
||||
end = datetime.utcnow()
|
||||
self.end = end
|
||||
|
@ -302,7 +305,7 @@ def save(self, name=None, timestamp=None):
|
|||
raise self.AlreadyExists(name)
|
||||
self.items_buffer.flush(flush=True)
|
||||
if timestamp is None:
|
||||
self.end = datetime.utcnow()
|
||||
self.end = self.start + timedelta(seconds=time.monotonic() - self.start_monotonic)
|
||||
start = self.start
|
||||
end = self.end
|
||||
else:
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
import argparse
|
||||
import functools
|
||||
import inspect
|
||||
import io
|
||||
import os
|
||||
import re
|
||||
import shlex
|
||||
|
@ -13,6 +12,7 @@
|
|||
import stat
|
||||
import sys
|
||||
import textwrap
|
||||
import time
|
||||
import traceback
|
||||
import collections
|
||||
|
||||
|
@ -263,7 +263,6 @@ def create_inner(archive, cache):
|
|||
if args.progress:
|
||||
archive.stats.show_progress(final=True)
|
||||
if args.stats:
|
||||
archive.end = datetime.utcnow()
|
||||
log_multi(DASHES,
|
||||
str(archive),
|
||||
DASHES,
|
||||
|
@ -276,6 +275,7 @@ def create_inner(archive, cache):
|
|||
self.ignore_inode = args.ignore_inode
|
||||
dry_run = args.dry_run
|
||||
t0 = datetime.utcnow()
|
||||
t0_monotonic = time.monotonic()
|
||||
if not dry_run:
|
||||
key.compressor = Compressor(**args.compression)
|
||||
with Cache(repository, key, manifest, do_files=args.cache_files, lock_wait=self.lock_wait) as cache:
|
||||
|
@ -283,7 +283,7 @@ def create_inner(archive, cache):
|
|||
create=True, checkpoint_interval=args.checkpoint_interval,
|
||||
numeric_owner=args.numeric_owner, noatime=args.noatime, noctime=args.noctime,
|
||||
progress=args.progress,
|
||||
chunker_params=args.chunker_params, start=t0)
|
||||
chunker_params=args.chunker_params, start=t0, start_monotonic=t0_monotonic)
|
||||
create_inner(archive, cache)
|
||||
else:
|
||||
create_inner(None, None)
|
||||
|
|
Loading…
Reference in a new issue