diff options
author | Joey Hess <joeyh@joeyh.name> | 2016-08-18 16:37:23 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2016-08-18 16:37:23 -0400 |
commit | 845289fdd8fbbed2cbc7eaf7a3d31efe5a8aa80d (patch) | |
tree | 9c0690078b462efc855d7fd42bc0db4e586a6f05 /Types | |
parent | 4e53adca698bde2430f30a6b1bd10bf7cdd52e1e (diff) | |
download | keysafe-845289fdd8fbbed2cbc7eaf7a3d31efe5a8aa80d.tar.gz |
untested moving of upload queues on to servers
There needs to be a 1:1 mapping between upload queues and servers,
otherwise using the upload queue risks two shards for the same object
being uploaded to the same server.
Also, fixed storeShards to give up on StoreAlreadyExists, rather than
trying another storage location. Otherwise, on a name collision,
the shards would be rejected by the servers, and be stored to their upload
queues.
Diffstat (limited to 'Types')
-rw-r--r-- | Types/Storage.hs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/Types/Storage.hs b/Types/Storage.hs index bc11b55..b3f714a 100644 --- a/Types/Storage.hs +++ b/Types/Storage.hs @@ -14,14 +14,21 @@ import Types newtype StorageLocations = StorageLocations [Storage] deriving (Monoid) +-- | Storage interface. This can be used both for local storage, +-- an upload queue, or a remote server. +-- +-- Note that there is no interface to enumerate shards. +-- This is intentional; servers should not allow that. data Storage = Storage { storeShard :: StorableObjectIdent -> Shard -> IO StoreResult , retrieveShard :: ShardNum -> StorableObjectIdent -> IO RetrieveResult , obscureShards :: IO ObscureResult - -- ^ run after making some calls to storeShard/retrieveShard, - -- to avoid correlation attacks + -- ^ Run after making some calls to storeShard/retrieveShard, + -- to avoid correlation attacks. , countShards :: IO CountResult - } -- Note that there is no interface to enumerate shards. + , moveShards :: Storage -> IO () + -- ^ Tries to move all shards from this storage to another one. + } data StoreResult = StoreSuccess | StoreAlreadyExists | StoreFailure String deriving (Show) |