mirror of https://github.com/borgbackup/borg.git
emit a warning if we have a slow msgpack installed
the reason for a slow msgpack can be: - pip install: missing compiler (gcc) - pip install: missing compiler parts (e.g. gcc-c++) - pip install: cached wheel package that was built while the compiler wasn't present - distribution package: badly built msgpack package
This commit is contained in:
parent
3c2dee6eb6
commit
3490469734
|
@ -19,7 +19,7 @@ from .helpers import Error, location_validator, format_time, format_file_size, \
|
||||||
format_file_mode, ExcludePattern, IncludePattern, exclude_path, adjust_patterns, to_localtime, timestamp, \
|
format_file_mode, ExcludePattern, IncludePattern, exclude_path, adjust_patterns, to_localtime, timestamp, \
|
||||||
get_cache_dir, get_keys_dir, format_timedelta, prune_within, prune_split, \
|
get_cache_dir, get_keys_dir, format_timedelta, prune_within, prune_split, \
|
||||||
Manifest, remove_surrogates, update_excludes, format_archive, check_extension_modules, Statistics, \
|
Manifest, remove_surrogates, update_excludes, format_archive, check_extension_modules, Statistics, \
|
||||||
is_cachedir, bigint_to_int, ChunkerParams, CompressionSpec, have_cython, \
|
is_cachedir, bigint_to_int, ChunkerParams, CompressionSpec, have_cython, is_slow_msgpack, \
|
||||||
EXIT_SUCCESS, EXIT_WARNING, EXIT_ERROR
|
EXIT_SUCCESS, EXIT_WARNING, EXIT_ERROR
|
||||||
from .logger import create_logger, setup_logging
|
from .logger import create_logger, setup_logging
|
||||||
logger = create_logger()
|
logger = create_logger()
|
||||||
|
@ -1015,6 +1015,8 @@ Type "Yes I am sure" if you understand this and want to continue.\n""")
|
||||||
RemoteRepository.remote_path = args.remote_path
|
RemoteRepository.remote_path = args.remote_path
|
||||||
RemoteRepository.umask = args.umask
|
RemoteRepository.umask = args.umask
|
||||||
update_excludes(args)
|
update_excludes(args)
|
||||||
|
if is_slow_msgpack():
|
||||||
|
logger.warning("Using a pure-python msgpack! This will result in lower performance.")
|
||||||
return args.func(args)
|
return args.func(args)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,8 @@ if have_cython():
|
||||||
from . import crypto
|
from . import crypto
|
||||||
import msgpack
|
import msgpack
|
||||||
|
|
||||||
|
import msgpack.fallback
|
||||||
|
|
||||||
|
|
||||||
# return codes returned by borg command
|
# return codes returned by borg command
|
||||||
# when borg is killed by signal N, rc = 128 + N
|
# when borg is killed by signal N, rc = 128 + N
|
||||||
|
@ -791,3 +793,7 @@ def int_to_bigint(value):
|
||||||
if value.bit_length() > 63:
|
if value.bit_length() > 63:
|
||||||
return value.to_bytes((value.bit_length() + 9) // 8, 'little', signed=True)
|
return value.to_bytes((value.bit_length() + 9) // 8, 'little', signed=True)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
def is_slow_msgpack():
|
||||||
|
return msgpack.Packer is msgpack.fallback.Packer
|
||||||
|
|
|
@ -7,9 +7,10 @@ import os
|
||||||
import pytest
|
import pytest
|
||||||
import sys
|
import sys
|
||||||
import msgpack
|
import msgpack
|
||||||
|
import msgpack.fallback
|
||||||
|
|
||||||
from ..helpers import adjust_patterns, exclude_path, Location, format_file_size, format_timedelta, IncludePattern, ExcludePattern, make_path_safe, \
|
from ..helpers import adjust_patterns, exclude_path, Location, format_file_size, format_timedelta, IncludePattern, ExcludePattern, make_path_safe, \
|
||||||
prune_within, prune_split, get_cache_dir, Statistics, \
|
prune_within, prune_split, get_cache_dir, Statistics, is_slow_msgpack, \
|
||||||
StableDict, int_to_bigint, bigint_to_int, parse_timestamp, CompressionSpec, ChunkerParams
|
StableDict, int_to_bigint, bigint_to_int, parse_timestamp, CompressionSpec, ChunkerParams
|
||||||
from . import BaseTestCase
|
from . import BaseTestCase
|
||||||
|
|
||||||
|
@ -480,3 +481,14 @@ def test_file_size_precision():
|
||||||
assert format_file_size(1234, precision=1) == '1.2 kB' # rounded down
|
assert format_file_size(1234, precision=1) == '1.2 kB' # rounded down
|
||||||
assert format_file_size(1254, precision=1) == '1.3 kB' # rounded up
|
assert format_file_size(1254, precision=1) == '1.3 kB' # rounded up
|
||||||
assert format_file_size(999990000, precision=1) == '1.0 GB' # and not 999.9 MB or 1000.0 MB
|
assert format_file_size(999990000, precision=1) == '1.0 GB' # and not 999.9 MB or 1000.0 MB
|
||||||
|
|
||||||
|
|
||||||
|
def test_is_slow_msgpack():
|
||||||
|
saved_packer = msgpack.Packer
|
||||||
|
try:
|
||||||
|
msgpack.Packer = msgpack.fallback.Packer
|
||||||
|
assert is_slow_msgpack()
|
||||||
|
finally:
|
||||||
|
msgpack.Packer = saved_packer
|
||||||
|
# this assumes that we have fast msgpack on test platform:
|
||||||
|
assert not is_slow_msgpack()
|
||||||
|
|
Loading…
Reference in New Issue