Commit Graph

31 Commits

Author SHA1 Message Date
Philipp Serr 7b11660f4f Prevent concurrent processing of same blob
... by first adding a preliminary index entry and making this fail if
an index entry for the same blob already exists.

A preliminary index entry is characterized by not yet being associated
with a pack. Until now, these entries where added to the index just
like final index entries using index.Store, which silently overwrites
existing index entries.

This commit adds a new method index.StoreInProgress which refuses to
overwrite existing index entries and allows for creating preliminary
index entries only. The existing method index.Store has not been
changed and continues to silently overwrite existing index entries.
This distinction is important, as otherwise, it would be impossible to
update a preliminary index entry after the blob has been written to a
pack.

Resolves: restic#292
2015-09-27 16:56:49 +02:00
Alexander Neumann d42ff509ba Small refactorings
* use uint instead of uint32 in packs/indexes
 * use ID.Str() for debug messages
 * add ParallelIDWorkFunc
2015-09-05 18:41:58 +02:00
Alexander Neumann 681d7851aa index: use backend.ID instead of string for maps 2015-09-05 18:41:58 +02:00
Alexander Neumann b85927576b Address code review comments 2015-07-26 18:01:20 +02:00
Alexander Neumann bd746a0425 fuse: refactor and add tests for fuse.file 2015-07-26 16:43:42 +02:00
Alexander Neumann 55ddd5317d Reduce memory usage for fuse mount
This changes `repository.LoadBlob()` so that a destination buffer must
be provided, which enables the fuse code to use a buffer from a
`sync.Pool`. In addition, release the buffers when the file is closed.
At the moment, the max memory usage is defined by the max file size that
is read in one go (e.g. with `cat`). It could be further optimized by
implementing a LRU caching scheme.
2015-07-26 14:25:59 +02:00
Alexander Neumann 5cdcc99eba Use array instead of hash for backend.ID
Since backend.ID is always a slice of constant length, use an array
instead of a slice. Mostly, arrays behave as slices, except that an
array cannot be nil, so use `*backend.ID` insteaf of `backend.ID` in
places where the absence of an ID is possible (e.g. for the Subtree of a
Node, which may not present when the node is a file node).

This change allows to directly use backend.ID as the the key for a map,
so that arbitrary data structures (e.g. a Set implemented as a
map[backend.ID]struct{}) can easily be formed.
2015-07-25 18:01:57 +02:00
Matthieu Rakotojaona ca6b7ec533 Add Index.LookupSize 2015-07-19 23:04:18 +02:00
Alexander Neumann 54c4c29a89 Add checker and command 'check' to replace 'fsck' 2015-07-11 16:27:38 +02:00
Alexander Neumann cbcf58f1c0 repository: Improve error message 2015-07-11 16:13:11 +02:00
Florian Weingarten 36a62cf77d Extract chunker 2015-07-08 16:58:23 -04:00
Alexander Neumann 5c1fe5784a repository: Load index in parallel 2015-07-05 11:07:10 +02:00
Alexander Neumann 14d252dfba Allow cancelling parallel workers on files 2015-07-05 11:07:10 +02:00
Alexander Neumann 0b531210eb Add repository.FilesInParallel 2015-07-05 11:07:10 +02:00
Alexander Neumann 885b27fdbb Add test and benchmark for LoadIndex 2015-07-05 11:07:10 +02:00
Alexander Neumann 58600e3bb8 repository: Add comments, silence golint 2015-07-05 11:07:10 +02:00
Alexander Neumann 9a02148daf repository: Rename Save() -> SaveAndEncrypt() 2015-07-05 11:07:10 +02:00
Alexander Neumann 03983f0907 repository: Rename Load() -> LoadAndDecrypt() 2015-07-05 11:07:10 +02:00
Alexander Neumann c553a57e0d repository: Refactor Config 2015-07-05 11:07:10 +02:00
Alexander Neumann 867f6c8e24 repository: Rename receiver: s -> r
No functional changes.
2015-07-05 11:07:10 +02:00
Alexander Neumann 0ad3d71f01 repository: Add more debug to Create() 2015-06-28 13:52:22 +02:00
Alexander Neumann 26e4d2e019 tests: Remove more flags 2015-06-28 13:52:22 +02:00
Alexander Neumann 189a33730a tests: Standardize use of SetupRepo/Teardown 2015-06-28 13:52:22 +02:00
Emil Hessman f96ff37ff5 repository: fix package doc typo 2015-06-28 09:30:33 +02:00
Alexander Neumann 65c3aead3e Add index.Dump() 2015-05-17 20:58:22 +02:00
Alexander Neumann f773feeb04 Remove Repository.Close() and .Location() 2015-05-17 20:58:22 +02:00
Alexander Neumann af381c2ab0 Remove Repository.Remove() 2015-05-17 20:58:22 +02:00
Alexander Neumann eb6dfcf58c Remove Repository.Test() 2015-05-17 20:58:22 +02:00
Alexander Neumann 6e38a8a033 Move FindSnapshot, make Repository.List() return IDs 2015-05-17 20:58:22 +02:00
Alexander Neumann 95536e8a21 Rename 'Repo' -> 'Repository' 2015-05-09 23:59:58 +02:00
Alexander Neumann 232c472836 Move package 'repo' to package 'repository' 2015-05-09 23:52:03 +02:00