summaryrefslogtreecommitdiffhomepage
path: root/Types
diff options
context:
space:
mode:
authorJoey Hess <joeyh@joeyh.name>2016-08-18 16:37:23 -0400
committerJoey Hess <joeyh@joeyh.name>2016-08-18 16:37:23 -0400
commit845289fdd8fbbed2cbc7eaf7a3d31efe5a8aa80d (patch)
tree9c0690078b462efc855d7fd42bc0db4e586a6f05 /Types
parent4e53adca698bde2430f30a6b1bd10bf7cdd52e1e (diff)
downloadkeysafe-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.hs13
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)