Commit graph

490 commits

Author SHA1 Message Date
Marian Beermann
1bd381a13a format_line: deny conversions (!r, !s, !a) 2017-04-05 00:09:32 +02:00
Marian Beermann
e2e172c74f format_line: clearer error message for unrecognized placeholder 2017-04-05 00:09:32 +02:00
Marian Beermann
1924e33ef5 format_line: deny access to internal objects 2017-04-05 00:09:31 +02:00
Marian Beermann
88dfb3e9c5 serve: fix forced command lines containing BORG_ env vars 2017-04-04 15:25:40 +02:00
Marian Beermann
2ff75d58f2 remove Chunk() 2017-04-04 00:16:15 +02:00
Marian Beermann
69fb9bd403 remove --compression-from 2017-04-04 00:16:15 +02:00
Marian Beermann
929f2760dd change global compression default to lz4 as well
To be consistent with --compression defaults.
2017-04-04 00:16:15 +02:00
Marian Beermann
0847c3f9a5 Unify ComprSpec and CompressionSpec; don't instanciate Compressors right away 2017-04-04 00:16:14 +02:00
Marian Beermann
d1826cca92 Rename CompressionDecider1 -> CompressionDecider 2017-04-03 21:31:28 +02:00
Marian Beermann
0c7410104c Rename Chunk.meta[compress] => Chunk.meta[compressor] 2017-04-03 21:31:28 +02:00
Marian Beermann
88647595ac compress: docs 2017-04-03 21:31:28 +02:00
Marian Beermann
5a20fc08de key: compress(chunk) return data 2017-04-03 21:31:28 +02:00
Marian Beermann
a27f585eaa refactor CompressionDecider2 into a meta Compressor 2017-04-03 21:31:28 +02:00
Thomas Waldmann
bdbcbf7bb8 extract: remove duplicate code
anything at <path> gets nuked already a few lines above, if possible.
2017-04-01 16:56:21 +02:00
Thomas Waldmann
d4e27e2952 extract: small bugfix and refactoring for parent dir creation
make_parent(path) helper to reduce code duplication.
also use it for directories although makedirs can also do it.

bugfix: also create parent dir for device files, if needed.
2017-03-28 23:22:25 +02:00
Thomas Waldmann
ceaf4a8fcf extract: small bugfix and optimization for hardlink masters
if a hardlink master is not in the to-be-extracted subset, the "x"
status was not displayed for it.

also, the matcher was called twice for matching items.
2017-03-28 22:02:54 +02:00
Thomas Waldmann
38860b3f53 lz4 compress: lower max. buffer size, exception handling
on the wheezy32 test machine, a test testing with corrupted data crashed
with a MemoryError when it tried to get a ~800MB large buffer.
MemoryError is now transformed to DecompressionError, so it gets handled
better.

Also, the bound for giving up is now much lower: 1GiB -> 128MiB.
2017-03-27 12:08:54 +02:00
Thomas Waldmann
acd3da62f4 add docstring to do_benchmark_crud 2017-03-27 01:57:52 +02:00
Thomas Waldmann
5bc17148e1 patterns help: mention path full-match in intro 2017-03-27 01:45:04 +02:00
Thomas Waldmann
cb6bfdf4d6 add docs for path full-match patterns 2017-03-27 00:31:08 +02:00
Thomas Waldmann
93feb75411 optimize PathFullPattern matching for O(1) time
For a borg create run using a patterns file with 15.000 PathFullPattern excludes
that excluded almost all files in the input data set:
- before this optimization: ~60s
- after this optimization: ~1s
2017-03-27 00:31:08 +02:00
Thomas Waldmann
ebd928795e add PathFullPattern
not really a pattern (as in potentially having any variable parts) - it just does a full,
precise match, after the usual normalizations.

the reason for adding this is mainly for later optimizations, e.g. via set membership check,
so that a lot of such PathFullPatterns can be "matched" within O(1) time.
2017-03-27 00:31:08 +02:00
Thomas Waldmann
90dd0e8eca fix symlink item fs size computation
a symlink has a 'source' attribute, so it was confused with a hardlink
slave here. see also issue #2343.

also, a symlink's fs size is defined as the length of the target path.
2017-03-26 23:11:14 +02:00
Thomas Waldmann
a9088135aa RemoteRepository: shutdown with timeout 2017-03-26 17:41:41 +02:00
Thomas Waldmann
945880af47 implement async_response, add wait=True for add_chunk/chunk_decref
Before this changeset, async responses were:
- if not an error: ignored
- if an error: raised as response to the arbitrary/unrelated next command

Now, after sending async commands,  the async_response command must be used
to process outstanding responses / exceptions.

We are avoiding to pile up lots of stuff in cases of high latency, because we do NOT
first wait until ALL responses have arrived, but we just can begin to process responses.
Calls with wait=False will just return what we already have received.
Repeated calls with wait=True until None is returned will fetch all responses.

Async commands now actually could have non-exception non-None results, but
this is not used yet. None responses are still dropped.

The motivation for this is to have a clear separation between a request
blowing up because it (itself) failed and failures unrelated to that request /
to that line in the sourcecode.

also: fix processing for async repo obj deletes

exception_ignored is a special object used that is "not None" (as None is used to signal
"finished with processing async results") but also not a potential async response result value.

Also:

added wait=True to chunk_decref() and add_chunk()

this makes async processing explicit - the default is synchronous and you only
need to be careful and do extra steps for async processing if you explicitly
request async by calling with wait=False (usually for speed reasons).

to process async results, use async_response, see above.
2017-03-26 17:33:19 +02:00
enkore
713889dbfd Merge pull request #2340 from jdchristensen/auto-threshold
With --compression auto,C, only use C if lz4 achieves at least 3% compression
2017-03-26 04:59:42 +02:00
Dan Christensen
48652a65a6 With --compression auto,C, only use C if lz4 achieves at least 3% compression 2017-03-25 19:57:54 -04:00
Thomas Waldmann
1a376ae1f1 PatternMatcher: only normalize the path once
not N times for N patterns.
2017-03-25 23:16:05 +01:00
Thomas Waldmann
126e782998 path normalization: rather use function than decorator
less and less complex code, more flexible usage.
2017-03-25 22:49:39 +01:00
Thomas Waldmann
2414cd4df7 use immutable data structure for the compression spec, fixes #2331
the bug was compr_args.update(compr_spec), helpers.py:2168 - that mutated
the compression spec dict (and not just some local one, but the compr spec
dict parsed from the commandline args).

so a change that was intended just for 1 chunk changed the desired
compression level on the archive scope.

I refactored the stuff to use a namedtuple (which is immutable, so such
effects can not happen again).
2017-03-24 03:09:55 +01:00
Thomas Waldmann
1b008f725c fixup: remove unneeded imports 2017-03-21 02:42:51 +01:00
Thomas Waldmann
b27cc37e85 safe_timestamp: arg is always an int
the Item object already does the bigint_to_int decode when accessing .mtime/.atime/.ctime
2017-03-21 02:40:50 +01:00
Thomas Waldmann
3665cc3024 bigint conversion: add compatibility note 2017-03-21 02:27:20 +01:00
Thomas Waldmann
f708183743 Revert "don't do "bigint" conversion for nanosecond mtime"
This reverts commit 8b2e7ec680.

We still need the bigint stuff for borg 1.0 compatibility.

# Conflicts:
#	src/borg/cache.py
2017-03-21 02:21:32 +01:00
Thomas Waldmann
04dba76fc9 Mostly revert "clean imports, remove unused code"
This reverts commit b7eaeee266.

We still need the bigint stuff for compatibility to borg 1.0 archives.

# Conflicts:
#	src/borg/archive.py
#	src/borg/archiver.py
#	src/borg/helpers.py
#	src/borg/key.py
2017-03-21 02:05:38 +01:00
TW
16e6e3d989 Merge pull request #2288 from ThomasWaldmann/patterns-style-default
support setting the pattern style default in patterns file
2017-03-17 14:09:47 +01:00
TW
10d4c97cad Merge pull request #2309 from ThomasWaldmann/fix-2304
clamp (nano)second values to unproblematic range, fixes #2304
2017-03-16 20:31:39 +01:00
Thomas Waldmann
b7a17a6db7 clamp (nano)second values to unproblematic range, fixes #2304
filesystem -> clamp -> archive (create)
2017-03-16 20:31:05 +01:00
Thomas Waldmann
42371181fc support switching the pattern style default in patterns file 2017-03-16 19:37:48 +01:00
enkore
883a7eefb2 Archive: allocate zeros when needed (#2308)
fixes huge memory usage of mount (8 MiB × number of archives)
2017-03-15 17:08:07 +01:00
Milkey Mouse
2117861738 Securely erase config file, fixes #2257
The SaveFile code, while ensuring atomicity, did not allow for secure
erasure of the config file (containing the old encrypted key). Now it
creates a hardlink to the file, lets SaveFile do its thing, and writes
random data over the old file (via the hardlink). A secure erase is
needed because the config file can contain the old key after changing
one's password.
2017-03-12 12:18:02 +01:00
Thomas Waldmann
23f6a82f1b fix borg key/debug/benchmark crashing without subcommand, fixes #2240 2017-03-12 11:55:43 +01:00
Thomas Waldmann
a842001385 fix error msg, it is --keep-within, not --within 2017-03-12 11:53:42 +01:00
Marian Beermann
cdb4df0885 --log-json: time property on most progress/log objects, remove is_prompt 2017-03-09 21:36:37 +01:00
Marian Beermann
e98b5b20df yes(): handle JSON output 2017-03-09 21:36:37 +01:00
Abdel-Rahman
63b5cbfc99 extract: warning RC for unextracted big extended attributes, followup (#2258)
* Set warning exit code when xattr is too big

* Warnings for more extended attributes errors (ENOTSUP, EACCES)

* Add tests for all xattr warnings
2017-03-08 17:13:42 +01:00
enkore
fc41c98a86 Redo key_creator, key_factory, centralise key knowledge (#2272)
* key: put key metadata (name, storage) into key classses

* keymanager: use key-declared storage types
2017-03-08 17:08:54 +01:00
Mark Edgington
e4391dec54 docs: improve --exclude-if-present and --keep-exclude-tags 2017-03-07 22:32:52 -05:00
Abdel-Rahman
4b33c3fe14 Add return code functions (#2199) 2017-03-05 13:33:42 +01:00
TW
89114d4885 Merge pull request #2198 from Abogical/too-big-xattr
Handle big extended attributes. Fixes #2161
2017-03-04 17:54:58 +01:00