module TahoeLAFS.Storage.Server (
StorageServerConfig (StorageServerConfig),
app,
main,
) where
import Control.Exception (
Exception,
throw,
)
import Control.Monad.IO.Class (
liftIO,
)
import Data.Maybe (fromMaybe)
import Network.HTTP.Types (
ByteRanges,
)
import Network.Wai (
Application,
)
import Network.Wai.Handler.Warp (
Port,
defaultSettings,
runSettings,
setPort,
)
import Network.Wai.Handler.WarpTLS (
runTLS,
tlsSettings,
)
import Servant (
Handler,
Server,
serve,
(:<|>) (..),
)
import TahoeLAFS.Storage.API (
AllocateBuckets,
AllocationResult (..),
CBORSet (..),
CorruptionDetails,
LeaseSecret (Write),
QueryRange,
ReadTestWriteResult (..),
ReadTestWriteVectors,
ShareData,
ShareNumber,
StorageAPI,
StorageIndex,
Version (..),
api,
)
import TahoeLAFS.Storage.Backend (WriteImmutableError (MissingUploadSecret))
import qualified TahoeLAFS.Storage.Backend as Backend
import TahoeLAFS.Storage.Backend.Filesystem (
FilesystemBackend (FilesystemBackend),
)
version :: Backend.Backend b => b -> Handler Version
version :: b -> Handler Version
version b
backend =
IO Version -> Handler Version
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (b -> IO Version
forall b. Backend b => b -> IO Version
Backend.version b
backend)
renewLease :: Backend.Backend b => b -> StorageIndex -> Maybe [LeaseSecret] -> Handler ()
renewLease :: b -> StorageIndex -> Maybe [LeaseSecret] -> Handler ()
renewLease b
backend StorageIndex
storageIndex Maybe [LeaseSecret]
secrets = IO () -> Handler ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (b -> StorageIndex -> [LeaseSecret] -> IO ()
forall b. Backend b => b -> StorageIndex -> [LeaseSecret] -> IO ()
Backend.renewLease b
backend StorageIndex
storageIndex ([LeaseSecret] -> Maybe [LeaseSecret] -> [LeaseSecret]
forall a. a -> Maybe a -> a
fromMaybe [] Maybe [LeaseSecret]
secrets))
createImmutableStorageIndex :: Backend.Backend b => b -> StorageIndex -> Maybe [LeaseSecret] -> AllocateBuckets -> Handler AllocationResult
createImmutableStorageIndex :: b
-> StorageIndex
-> Maybe [LeaseSecret]
-> AllocateBuckets
-> Handler AllocationResult
createImmutableStorageIndex b
backend StorageIndex
storageIndex Maybe [LeaseSecret]
secrets AllocateBuckets
params =
IO AllocationResult -> Handler AllocationResult
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (b
-> StorageIndex
-> Maybe [LeaseSecret]
-> AllocateBuckets
-> IO AllocationResult
forall b.
Backend b =>
b
-> StorageIndex
-> Maybe [LeaseSecret]
-> AllocateBuckets
-> IO AllocationResult
Backend.createImmutableStorageIndex b
backend StorageIndex
storageIndex Maybe [LeaseSecret]
secrets AllocateBuckets
params)
writeImmutableShare :: Backend.Backend b => b -> StorageIndex -> ShareNumber -> Maybe [LeaseSecret] -> ShareData -> Maybe ByteRanges -> Handler ()
writeImmutableShare :: b
-> StorageIndex
-> ShareNumber
-> Maybe [LeaseSecret]
-> ShareData
-> Maybe ByteRanges
-> Handler ()
writeImmutableShare b
backend StorageIndex
storage_index ShareNumber
share_number Maybe [LeaseSecret]
secrets ShareData
share_data Maybe ByteRanges
content_ranges =
IO () -> Handler ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (b
-> StorageIndex
-> ShareNumber
-> Maybe [LeaseSecret]
-> ShareData
-> Maybe ByteRanges
-> IO ()
forall b.
Backend b =>
b
-> StorageIndex
-> ShareNumber
-> Maybe [LeaseSecret]
-> ShareData
-> Maybe ByteRanges
-> IO ()
Backend.writeImmutableShare b
backend StorageIndex
storage_index ShareNumber
share_number Maybe [LeaseSecret]
secrets ShareData
share_data Maybe ByteRanges
content_ranges)
abortImmutableUpload :: Backend.Backend b => b -> StorageIndex -> ShareNumber -> Maybe [LeaseSecret] -> Handler ()
abortImmutableUpload :: b
-> StorageIndex -> ShareNumber -> Maybe [LeaseSecret] -> Handler ()
abortImmutableUpload b
backend StorageIndex
storageIndex ShareNumber
shareNum Maybe [LeaseSecret]
secrets = IO () -> Handler ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (b -> StorageIndex -> ShareNumber -> Maybe [LeaseSecret] -> IO ()
forall b.
Backend b =>
b -> StorageIndex -> ShareNumber -> Maybe [LeaseSecret] -> IO ()
Backend.abortImmutableUpload b
backend StorageIndex
storageIndex ShareNumber
shareNum Maybe [LeaseSecret]
secrets)
adviseCorruptImmutableShare :: Backend.Backend b => b -> StorageIndex -> ShareNumber -> CorruptionDetails -> Handler ()
adviseCorruptImmutableShare :: b -> StorageIndex -> ShareNumber -> CorruptionDetails -> Handler ()
adviseCorruptImmutableShare b
backend StorageIndex
storage_index ShareNumber
share_number CorruptionDetails
details =
IO () -> Handler ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (b -> StorageIndex -> ShareNumber -> CorruptionDetails -> IO ()
forall b.
Backend b =>
b -> StorageIndex -> ShareNumber -> CorruptionDetails -> IO ()
Backend.adviseCorruptImmutableShare b
backend StorageIndex
storage_index ShareNumber
share_number CorruptionDetails
details)
getImmutableShareNumbers :: Backend.Backend b => b -> StorageIndex -> Handler (CBORSet ShareNumber)
getImmutableShareNumbers :: b -> StorageIndex -> Handler (CBORSet ShareNumber)
getImmutableShareNumbers b
backend StorageIndex
storage_index =
IO (CBORSet ShareNumber) -> Handler (CBORSet ShareNumber)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (b -> StorageIndex -> IO (CBORSet ShareNumber)
forall b.
Backend b =>
b -> StorageIndex -> IO (CBORSet ShareNumber)
Backend.getImmutableShareNumbers b
backend StorageIndex
storage_index)
readImmutableShare :: Backend.Backend b => b -> StorageIndex -> ShareNumber -> QueryRange -> Handler ShareData
readImmutableShare :: b
-> StorageIndex
-> ShareNumber
-> Maybe ByteRanges
-> Handler ShareData
readImmutableShare b
backend StorageIndex
storage_index ShareNumber
share_number Maybe ByteRanges
qr =
IO ShareData -> Handler ShareData
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (b
-> StorageIndex -> ShareNumber -> Maybe ByteRanges -> IO ShareData
forall b.
Backend b =>
b
-> StorageIndex -> ShareNumber -> Maybe ByteRanges -> IO ShareData
Backend.readImmutableShare b
backend StorageIndex
storage_index ShareNumber
share_number Maybe ByteRanges
qr)
readvAndTestvAndWritev :: Backend.Backend b => b -> StorageIndex -> Maybe [LeaseSecret] -> ReadTestWriteVectors -> Handler ReadTestWriteResult
readvAndTestvAndWritev :: b
-> StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult
readvAndTestvAndWritev b
_ StorageIndex
_ Maybe [LeaseSecret]
Nothing ReadTestWriteVectors
_ = WriteImmutableError -> Handler ReadTestWriteResult
forall a e. Exception e => e -> a
throw WriteImmutableError
MissingUploadSecret
readvAndTestvAndWritev b
_ StorageIndex
_ (Just []) ReadTestWriteVectors
_ = WriteImmutableError -> Handler ReadTestWriteResult
forall a e. Exception e => e -> a
throw WriteImmutableError
MissingUploadSecret
readvAndTestvAndWritev b
backend StorageIndex
storageIndex (Just (Write WriteEnablerSecret
secret : [LeaseSecret]
_)) ReadTestWriteVectors
vectors =
IO ReadTestWriteResult -> Handler ReadTestWriteResult
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (b
-> StorageIndex
-> WriteEnablerSecret
-> ReadTestWriteVectors
-> IO ReadTestWriteResult
forall b.
Backend b =>
b
-> StorageIndex
-> WriteEnablerSecret
-> ReadTestWriteVectors
-> IO ReadTestWriteResult
Backend.readvAndTestvAndWritev b
backend StorageIndex
storageIndex WriteEnablerSecret
secret ReadTestWriteVectors
vectors)
readvAndTestvAndWritev b
backend StorageIndex
storageIndex (Just (LeaseSecret
_ : [LeaseSecret]
ss)) ReadTestWriteVectors
vectors =
b
-> StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult
forall b.
Backend b =>
b
-> StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult
readvAndTestvAndWritev b
backend StorageIndex
storageIndex ([LeaseSecret] -> Maybe [LeaseSecret]
forall a. a -> Maybe a
Just [LeaseSecret]
ss) ReadTestWriteVectors
vectors
readMutableShare :: Backend.Backend b => b -> StorageIndex -> ShareNumber -> QueryRange -> Handler ShareData
readMutableShare :: b
-> StorageIndex
-> ShareNumber
-> Maybe ByteRanges
-> Handler ShareData
readMutableShare b
backend StorageIndex
storage_index ShareNumber
share_numbers Maybe ByteRanges
params =
IO ShareData -> Handler ShareData
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (b
-> StorageIndex -> ShareNumber -> Maybe ByteRanges -> IO ShareData
forall b.
Backend b =>
b
-> StorageIndex -> ShareNumber -> Maybe ByteRanges -> IO ShareData
Backend.readMutableShare b
backend StorageIndex
storage_index ShareNumber
share_numbers Maybe ByteRanges
params)
getMutableShareNumbers :: Backend.Backend b => b -> StorageIndex -> Handler (CBORSet ShareNumber)
getMutableShareNumbers :: b -> StorageIndex -> Handler (CBORSet ShareNumber)
getMutableShareNumbers b
backend StorageIndex
storage_index =
IO (CBORSet ShareNumber) -> Handler (CBORSet ShareNumber)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (b -> StorageIndex -> IO (CBORSet ShareNumber)
forall b.
Backend b =>
b -> StorageIndex -> IO (CBORSet ShareNumber)
Backend.getMutableShareNumbers b
backend StorageIndex
storage_index)
adviseCorruptMutableShare :: Backend.Backend b => b -> StorageIndex -> ShareNumber -> CorruptionDetails -> Handler ()
adviseCorruptMutableShare :: b -> StorageIndex -> ShareNumber -> CorruptionDetails -> Handler ()
adviseCorruptMutableShare b
backend StorageIndex
storage_index ShareNumber
share_number CorruptionDetails
details =
IO () -> Handler ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (b -> StorageIndex -> ShareNumber -> CorruptionDetails -> IO ()
forall b.
Backend b =>
b -> StorageIndex -> ShareNumber -> CorruptionDetails -> IO ()
Backend.adviseCorruptMutableShare b
backend StorageIndex
storage_index ShareNumber
share_number CorruptionDetails
details)
data MisconfiguredTLS = MisconfiguredTLS
deriving (Int -> MisconfiguredTLS -> ShowS
[MisconfiguredTLS] -> ShowS
MisconfiguredTLS -> StorageIndex
(Int -> MisconfiguredTLS -> ShowS)
-> (MisconfiguredTLS -> StorageIndex)
-> ([MisconfiguredTLS] -> ShowS)
-> Show MisconfiguredTLS
forall a.
(Int -> a -> ShowS)
-> (a -> StorageIndex) -> ([a] -> ShowS) -> Show a
showList :: [MisconfiguredTLS] -> ShowS
$cshowList :: [MisconfiguredTLS] -> ShowS
show :: MisconfiguredTLS -> StorageIndex
$cshow :: MisconfiguredTLS -> StorageIndex
showsPrec :: Int -> MisconfiguredTLS -> ShowS
$cshowsPrec :: Int -> MisconfiguredTLS -> ShowS
Show)
instance Exception MisconfiguredTLS
data StorageServerConfig = StorageServerConfig
{ StorageServerConfig -> StorageIndex
storagePath :: FilePath
, StorageServerConfig -> Int
listenPort :: Port
, StorageServerConfig -> Maybe StorageIndex
certificate :: Maybe FilePath
, StorageServerConfig -> Maybe StorageIndex
key :: Maybe FilePath
}
deriving (Int -> StorageServerConfig -> ShowS
[StorageServerConfig] -> ShowS
StorageServerConfig -> StorageIndex
(Int -> StorageServerConfig -> ShowS)
-> (StorageServerConfig -> StorageIndex)
-> ([StorageServerConfig] -> ShowS)
-> Show StorageServerConfig
forall a.
(Int -> a -> ShowS)
-> (a -> StorageIndex) -> ([a] -> ShowS) -> Show a
showList :: [StorageServerConfig] -> ShowS
$cshowList :: [StorageServerConfig] -> ShowS
show :: StorageServerConfig -> StorageIndex
$cshow :: StorageServerConfig -> StorageIndex
showsPrec :: Int -> StorageServerConfig -> ShowS
$cshowsPrec :: Int -> StorageServerConfig -> ShowS
Show, StorageServerConfig -> StorageServerConfig -> Bool
(StorageServerConfig -> StorageServerConfig -> Bool)
-> (StorageServerConfig -> StorageServerConfig -> Bool)
-> Eq StorageServerConfig
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StorageServerConfig -> StorageServerConfig -> Bool
$c/= :: StorageServerConfig -> StorageServerConfig -> Bool
== :: StorageServerConfig -> StorageServerConfig -> Bool
$c== :: StorageServerConfig -> StorageServerConfig -> Bool
Eq)
app :: Backend.Backend b => b -> Application
app :: b -> Application
app b
backend =
Proxy StorageAPI -> Server StorageAPI -> Application
forall api.
HasServer api '[] =>
Proxy api -> Server api -> Application
serve Proxy StorageAPI
api Server StorageAPI
storageServer
where
storageServer :: Server StorageAPI
storageServer :: Server StorageAPI
storageServer =
b -> Handler Version
forall b. Backend b => b -> Handler Version
version b
backend
Handler Version
-> ((StorageIndex -> Maybe [LeaseSecret] -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> AllocateBuckets
-> Handler AllocationResult)
:<|> ((StorageIndex
-> ShareNumber
-> Maybe [LeaseSecret]
-> ShareData
-> Maybe ByteRanges
-> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe [LeaseSecret] -> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> ((StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber
-> Maybe ByteRanges
-> Handler ShareData)
:<|> ((StorageIndex
-> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber
-> CorruptionDetails
-> Handler ())))))))))))
-> Handler Version
:<|> ((StorageIndex -> Maybe [LeaseSecret] -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> AllocateBuckets
-> Handler AllocationResult)
:<|> ((StorageIndex
-> ShareNumber
-> Maybe [LeaseSecret]
-> ShareData
-> Maybe ByteRanges
-> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe [LeaseSecret] -> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> ((StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber
-> Maybe ByteRanges
-> Handler ShareData)
:<|> ((StorageIndex
-> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber
-> CorruptionDetails
-> Handler ())))))))))))
forall a b. a -> b -> a :<|> b
:<|> b -> StorageIndex -> Maybe [LeaseSecret] -> Handler ()
forall b.
Backend b =>
b -> StorageIndex -> Maybe [LeaseSecret] -> Handler ()
renewLease b
backend
(StorageIndex -> Maybe [LeaseSecret] -> Handler ())
-> ((StorageIndex
-> Maybe [LeaseSecret]
-> AllocateBuckets
-> Handler AllocationResult)
:<|> ((StorageIndex
-> ShareNumber
-> Maybe [LeaseSecret]
-> ShareData
-> Maybe ByteRanges
-> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe [LeaseSecret] -> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> ((StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber
-> Maybe ByteRanges
-> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber
-> CorruptionDetails
-> Handler ()))))))))))
-> (StorageIndex -> Maybe [LeaseSecret] -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> AllocateBuckets
-> Handler AllocationResult)
:<|> ((StorageIndex
-> ShareNumber
-> Maybe [LeaseSecret]
-> ShareData
-> Maybe ByteRanges
-> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe [LeaseSecret] -> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> ((StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber
-> Maybe ByteRanges
-> Handler ShareData)
:<|> ((StorageIndex
-> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber
-> CorruptionDetails
-> Handler ()))))))))))
forall a b. a -> b -> a :<|> b
:<|> b
-> StorageIndex
-> Maybe [LeaseSecret]
-> AllocateBuckets
-> Handler AllocationResult
forall b.
Backend b =>
b
-> StorageIndex
-> Maybe [LeaseSecret]
-> AllocateBuckets
-> Handler AllocationResult
createImmutableStorageIndex b
backend
(StorageIndex
-> Maybe [LeaseSecret]
-> AllocateBuckets
-> Handler AllocationResult)
-> ((StorageIndex
-> ShareNumber
-> Maybe [LeaseSecret]
-> ShareData
-> Maybe ByteRanges
-> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe [LeaseSecret] -> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> ((StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber
-> CorruptionDetails
-> Handler ())))))))))
-> (StorageIndex
-> Maybe [LeaseSecret]
-> AllocateBuckets
-> Handler AllocationResult)
:<|> ((StorageIndex
-> ShareNumber
-> Maybe [LeaseSecret]
-> ShareData
-> Maybe ByteRanges
-> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe [LeaseSecret] -> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> ((StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber
-> Maybe ByteRanges
-> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber
-> CorruptionDetails
-> Handler ())))))))))
forall a b. a -> b -> a :<|> b
:<|> b
-> StorageIndex
-> ShareNumber
-> Maybe [LeaseSecret]
-> ShareData
-> Maybe ByteRanges
-> Handler ()
forall b.
Backend b =>
b
-> StorageIndex
-> ShareNumber
-> Maybe [LeaseSecret]
-> ShareData
-> Maybe ByteRanges
-> Handler ()
writeImmutableShare b
backend
(StorageIndex
-> ShareNumber
-> Maybe [LeaseSecret]
-> ShareData
-> Maybe ByteRanges
-> Handler ())
-> ((StorageIndex
-> ShareNumber -> Maybe [LeaseSecret] -> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> ((StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber
-> CorruptionDetails
-> Handler ()))))))))
-> (StorageIndex
-> ShareNumber
-> Maybe [LeaseSecret]
-> ShareData
-> Maybe ByteRanges
-> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe [LeaseSecret] -> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> ((StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber
-> CorruptionDetails
-> Handler ()))))))))
forall a b. a -> b -> a :<|> b
:<|> b
-> StorageIndex -> ShareNumber -> Maybe [LeaseSecret] -> Handler ()
forall b.
Backend b =>
b
-> StorageIndex -> ShareNumber -> Maybe [LeaseSecret] -> Handler ()
abortImmutableUpload b
backend
(StorageIndex -> ShareNumber -> Maybe [LeaseSecret] -> Handler ())
-> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> ((StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())))))))
-> (StorageIndex
-> ShareNumber -> Maybe [LeaseSecret] -> Handler ())
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> ((StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber
-> CorruptionDetails
-> Handler ())))))))
forall a b. a -> b -> a :<|> b
:<|> b
-> StorageIndex
-> ShareNumber
-> Maybe ByteRanges
-> Handler ShareData
forall b.
Backend b =>
b
-> StorageIndex
-> ShareNumber
-> Maybe ByteRanges
-> Handler ShareData
readImmutableShare b
backend
(StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
-> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> ((StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ()))))))
-> (StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> ((StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ()))))))
forall a b. a -> b -> a :<|> b
:<|> b -> StorageIndex -> Handler (CBORSet ShareNumber)
forall b.
Backend b =>
b -> StorageIndex -> Handler (CBORSet ShareNumber)
getImmutableShareNumbers b
backend
(StorageIndex -> Handler (CBORSet ShareNumber))
-> ((StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())))))
-> (StorageIndex -> Handler (CBORSet ShareNumber))
:<|> ((StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())))))
forall a b. a -> b -> a :<|> b
:<|> b -> StorageIndex -> ShareNumber -> CorruptionDetails -> Handler ()
forall b.
Backend b =>
b -> StorageIndex -> ShareNumber -> CorruptionDetails -> Handler ()
adviseCorruptImmutableShare b
backend
(StorageIndex -> ShareNumber -> CorruptionDetails -> Handler ())
-> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ()))))
-> (StorageIndex -> ShareNumber -> CorruptionDetails -> Handler ())
:<|> ((StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ()))))
forall a b. a -> b -> a :<|> b
:<|> b
-> StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult
forall b.
Backend b =>
b
-> StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult
readvAndTestvAndWritev b
backend
(StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
-> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())))
-> (StorageIndex
-> Maybe [LeaseSecret]
-> ReadTestWriteVectors
-> Handler ReadTestWriteResult)
:<|> ((StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())))
forall a b. a -> b -> a :<|> b
:<|> b
-> StorageIndex
-> ShareNumber
-> Maybe ByteRanges
-> Handler ShareData
forall b.
Backend b =>
b
-> StorageIndex
-> ShareNumber
-> Maybe ByteRanges
-> Handler ShareData
readMutableShare b
backend
(StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
-> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ()))
-> (StorageIndex
-> ShareNumber -> Maybe ByteRanges -> Handler ShareData)
:<|> ((StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ()))
forall a b. a -> b -> a :<|> b
:<|> b -> StorageIndex -> Handler (CBORSet ShareNumber)
forall b.
Backend b =>
b -> StorageIndex -> Handler (CBORSet ShareNumber)
getMutableShareNumbers b
backend
(StorageIndex -> Handler (CBORSet ShareNumber))
-> (StorageIndex -> ShareNumber -> CorruptionDetails -> Handler ())
-> (StorageIndex -> Handler (CBORSet ShareNumber))
:<|> (StorageIndex
-> ShareNumber -> CorruptionDetails -> Handler ())
forall a b. a -> b -> a :<|> b
:<|> b -> StorageIndex -> ShareNumber -> CorruptionDetails -> Handler ()
forall b.
Backend b =>
b -> StorageIndex -> ShareNumber -> CorruptionDetails -> Handler ()
adviseCorruptMutableShare b
backend
main :: StorageServerConfig -> IO ()
main :: StorageServerConfig -> IO ()
main StorageServerConfig
config =
Application -> IO ()
run (Application -> IO ()) -> Application -> IO ()
forall a b. (a -> b) -> a -> b
$ FilesystemBackend -> Application
forall b. Backend b => b -> Application
app (StorageIndex -> FilesystemBackend
FilesystemBackend (StorageIndex -> FilesystemBackend)
-> StorageIndex -> FilesystemBackend
forall a b. (a -> b) -> a -> b
$ StorageServerConfig -> StorageIndex
storagePath StorageServerConfig
config)
where
settings :: Settings
settings = Int -> Settings -> Settings
setPort (StorageServerConfig -> Int
listenPort StorageServerConfig
config) Settings
defaultSettings
run :: Application -> IO ()
run Application
a =
case (StorageServerConfig -> Maybe StorageIndex
certificate StorageServerConfig
config, StorageServerConfig -> Maybe StorageIndex
key StorageServerConfig
config) of
(Maybe StorageIndex
Nothing, Maybe StorageIndex
Nothing) -> Settings -> Application -> IO ()
runSettings Settings
settings Application
a
(Just StorageIndex
c, Just StorageIndex
k) -> TLSSettings -> Settings -> Application -> IO ()
runTLS (StorageIndex -> StorageIndex -> TLSSettings
tlsSettings StorageIndex
c StorageIndex
k) Settings
settings Application
a
(Maybe StorageIndex, Maybe StorageIndex)
_ -> MisconfiguredTLS -> IO ()
forall a e. Exception e => e -> a
throw MisconfiguredTLS
MisconfiguredTLS