Rename types (#12)

* Rename PartInfo -> PartTuple

* Rename ListPartInfo -> ObjectPartInfo
This commit is contained in:
Aditya Manthramurthy 2017-02-28 18:14:16 +05:30 committed by Krishnan Parthasarathi
parent abdc9fe320
commit 99d9879cb5
10 changed files with 31 additions and 37 deletions

View File

@ -29,7 +29,7 @@ module Network.Minio
, BucketInfo(..) , BucketInfo(..)
, ObjectInfo(..) , ObjectInfo(..)
, UploadInfo(..) , UploadInfo(..)
, ListPartInfo(..) , ObjectPartInfo(..)
, UploadId , UploadId
, ObjectData(..) , ObjectData(..)

View File

@ -157,30 +157,25 @@ type PartNumber = Int16
-- | A type alias to represent an upload-id for multipart upload -- | A type alias to represent an upload-id for multipart upload
type UploadId = Text type UploadId = Text
-- | A data-type to represent info about a part -- | A type to represent a part-number and etag.
data PartInfo = PartInfo PartNumber ETag type PartTuple = (PartNumber, ETag)
deriving (Show, Eq)
instance Ord PartInfo where
(PartInfo a _) `compare` (PartInfo b _) = a `compare` b
-- | Represents result from a listing of object parts of an ongoing -- | Represents result from a listing of object parts of an ongoing
-- multipart upload. -- multipart upload.
data ListPartsResult = ListPartsResult { data ListPartsResult = ListPartsResult {
lprHasMore :: Bool lprHasMore :: Bool
, lprNextPart :: Maybe Int , lprNextPart :: Maybe Int
, lprParts :: [ListPartInfo] , lprParts :: [ObjectPartInfo]
} deriving (Show, Eq) } deriving (Show, Eq)
-- | Represents information about an object part in an ongoing -- | Represents information about an object part in an ongoing
-- multipart upload. -- multipart upload.
data ListPartInfo = ListPartInfo { data ObjectPartInfo = ObjectPartInfo {
piNumber :: PartNumber opiNumber :: PartNumber
, piETag :: ETag , opiETag :: ETag
, piSize :: Int64 , opiSize :: Int64
, piModTime :: UTCTime , opiModTime :: UTCTime
} deriving (Show, Eq) } deriving (Show, Eq)
-- | Represents result from a listing of incomplete uploads to a -- | Represents result from a listing of incomplete uploads to a

View File

@ -44,10 +44,10 @@ listIncompleteUploads bucket prefix recurse = loop Nothing Nothing
-- | List object parts of an ongoing multipart upload for given -- | List object parts of an ongoing multipart upload for given
-- bucket, object and uploadId. -- bucket, object and uploadId.
listIncompleteParts :: Bucket -> Object -> UploadId listIncompleteParts :: Bucket -> Object -> UploadId
-> C.Producer Minio ListPartInfo -> C.Producer Minio ObjectPartInfo
listIncompleteParts bucket object uploadId = loop Nothing listIncompleteParts bucket object uploadId = loop Nothing
where where
loop :: Maybe Text -> C.Producer Minio ListPartInfo loop :: Maybe Text -> C.Producer Minio ObjectPartInfo
loop nextPartMarker = do loop nextPartMarker = do
res <- lift $ listIncompleteParts' bucket object uploadId Nothing res <- lift $ listIncompleteParts' bucket object uploadId Nothing
nextPartMarker nextPartMarker

View File

@ -108,8 +108,8 @@ selectPartSizes size = uncurry (List.zip3 [1..]) $
-- returns partinfo if part is already uploaded. -- returns partinfo if part is already uploaded.
checkUploadNeeded :: Payload -> PartNumber checkUploadNeeded :: Payload -> PartNumber
-> Map.Map PartNumber ListPartInfo -> Map.Map PartNumber ObjectPartInfo
-> Minio (Maybe PartInfo) -> Minio (Maybe PartTuple)
checkUploadNeeded payload n pmap = do checkUploadNeeded payload n pmap = do
(md5hash, pSize) <- case payload of (md5hash, pSize) <- case payload of
PayloadBS bs -> return (hashMD5 bs, fromIntegral $ B.length bs) PayloadBS bs -> return (hashMD5 bs, fromIntegral $ B.length bs)
@ -118,8 +118,8 @@ checkUploadNeeded payload n pmap = do
(Just $ fromIntegral size) (Just $ fromIntegral size)
case Map.lookup n pmap of case Map.lookup n pmap of
Nothing -> return Nothing Nothing -> return Nothing
Just (ListPartInfo _ etag size _) -> return $ Just (ObjectPartInfo _ etag size _) -> return $
bool Nothing (Just (PartInfo n etag)) $ bool Nothing (Just (n, etag)) $
md5hash == encodeUtf8 etag && size == pSize md5hash == encodeUtf8 etag && size == pSize
parallelMultipartUpload :: Bucket -> Object -> FilePath -> Int64 parallelMultipartUpload :: Bucket -> Object -> FilePath -> Int64
@ -187,13 +187,13 @@ sequentialMultipartUpload b o sizeMay src = do
-- | Looks for incomplete uploads for an object. Returns the first one -- | Looks for incomplete uploads for an object. Returns the first one
-- if there are many. -- if there are many.
getExistingUpload :: Bucket -> Object getExistingUpload :: Bucket -> Object
-> Minio (Maybe UploadId, Map.Map PartNumber ListPartInfo) -> Minio (Maybe UploadId, Map.Map PartNumber ObjectPartInfo)
getExistingUpload b o = do getExistingUpload b o = do
uidMay <- (fmap . fmap) uiUploadId $ uidMay <- (fmap . fmap) uiUploadId $
listIncompleteUploads b (Just o) False C.$$ CC.head listIncompleteUploads b (Just o) False C.$$ CC.head
parts <- maybe (return []) parts <- maybe (return [])
(\uid -> listIncompleteParts b o uid C.$$ CC.sinkList) uidMay (\uid -> listIncompleteParts b o uid C.$$ CC.sinkList) uidMay
return (uidMay, Map.fromList $ map (\p -> (piNumber p, p)) parts) return (uidMay, Map.fromList $ map (\p -> (opiNumber p, p)) parts)
-- | Copy an object using single or multipart copy strategy. -- | Copy an object using single or multipart copy strategy.
copyObjectInternal :: Bucket -> Object -> CopyPartSource copyObjectInternal :: Bucket -> Object -> CopyPartSource
@ -254,7 +254,7 @@ multiPartCopyObject b o cps srcSize = do
copiedParts <- limitedMapConcurrently 10 copiedParts <- limitedMapConcurrently 10
(\(pn, cps') -> do (\(pn, cps') -> do
(etag, _) <- copyObjectPart b o cps' uid pn [] (etag, _) <- copyObjectPart b o cps' uid pn []
return $ PartInfo pn etag return $ (pn, etag)
) )
partSources partSources

View File

@ -27,7 +27,7 @@ module Network.Minio.S3API
-- * Multipart Upload APIs -- * Multipart Upload APIs
-------------------------- --------------------------
, UploadId , UploadId
, PartInfo , PartTuple
, Payload(..) , Payload(..)
, PartNumber , PartNumber
, CopyPartSource(..) , CopyPartSource(..)
@ -171,7 +171,7 @@ newMultipartUpload bucket object headers = do
-- | PUT a part of an object as part of a multipart upload. -- | PUT a part of an object as part of a multipart upload.
putObjectPart :: Bucket -> Object -> UploadId -> PartNumber -> [HT.Header] putObjectPart :: Bucket -> Object -> UploadId -> PartNumber -> [HT.Header]
-> Payload -> Minio PartInfo -> Payload -> Minio PartTuple
putObjectPart bucket object uploadId partNumber headers payload = do putObjectPart bucket object uploadId partNumber headers payload = do
resp <- executeRequest $ resp <- executeRequest $
def { riMethod = HT.methodPut def { riMethod = HT.methodPut
@ -185,7 +185,7 @@ putObjectPart bucket object uploadId partNumber headers payload = do
etag = getETagHeader rheaders etag = getETagHeader rheaders
maybe maybe
(throwM $ ValidationError MErrVETagHeaderNotFound) (throwM $ ValidationError MErrVETagHeaderNotFound)
(return . PartInfo partNumber) etag (return . (partNumber, )) etag
where where
params = [ params = [
("uploadId", Just uploadId) ("uploadId", Just uploadId)
@ -230,16 +230,16 @@ copyObjectSingle bucket object cps headers = do
parseCopyObjectResponse $ NC.responseBody resp parseCopyObjectResponse $ NC.responseBody resp
-- | Complete a multipart upload. -- | Complete a multipart upload.
completeMultipartUpload :: Bucket -> Object -> UploadId -> [PartInfo] completeMultipartUpload :: Bucket -> Object -> UploadId -> [PartTuple]
-> Minio ETag -> Minio ETag
completeMultipartUpload bucket object uploadId partInfo = do completeMultipartUpload bucket object uploadId partTuple = do
resp <- executeRequest $ resp <- executeRequest $
def { riMethod = HT.methodPost def { riMethod = HT.methodPost
, riBucket = Just bucket , riBucket = Just bucket
, riObject = Just object , riObject = Just object
, riQueryParams = mkOptionalParams params , riQueryParams = mkOptionalParams params
, riPayload = PayloadBS $ , riPayload = PayloadBS $
mkCompleteMultipartUploadRequest partInfo mkCompleteMultipartUploadRequest partTuple
} }
parseCompleteMultipartUploadResponse $ NC.responseBody resp parseCompleteMultipartUploadResponse $ NC.responseBody resp
where where

View File

@ -26,13 +26,13 @@ mkCreateBucketConfig location = LBS.toStrict $ renderLBS def bucketConfig
bucketConfig = Document (Prologue [] Nothing []) root [] bucketConfig = Document (Prologue [] Nothing []) root []
-- | Create a completeMultipartUpload request body XML -- | Create a completeMultipartUpload request body XML
mkCompleteMultipartUploadRequest :: [PartInfo] -> ByteString mkCompleteMultipartUploadRequest :: [PartTuple] -> ByteString
mkCompleteMultipartUploadRequest partInfo = mkCompleteMultipartUploadRequest partInfo =
LBS.toStrict $ renderLBS def cmur LBS.toStrict $ renderLBS def cmur
where where
root = Element "CompleteMultipartUpload" M.empty $ root = Element "CompleteMultipartUpload" M.empty $
map (NodeElement . mkPart) partInfo map (NodeElement . mkPart) partInfo
mkPart (PartInfo n etag) = Element "Part" M.empty mkPart (n, etag) = Element "Part" M.empty
[ NodeElement $ Element "PartNumber" M.empty [ NodeElement $ Element "PartNumber" M.empty
[NodeContent $ T.pack $ show n] [NodeContent $ T.pack $ show n]
, NodeElement $ Element "ETag" M.empty , NodeElement $ Element "ETag" M.empty

View File

@ -160,7 +160,7 @@ parseListPartsResponse xmldata = do
nextPartNum <- parseDecimals $ maybeToList nextPartNumStr nextPartNum <- parseDecimals $ maybeToList nextPartNumStr
let let
partInfos = map (uncurry4 ListPartInfo) $ partInfos = map (uncurry4 ObjectPartInfo) $
zip4 partNumbers partETags partSizes partModTimes zip4 partNumbers partETags partSizes partModTimes
return $ ListPartsResult hasMore (listToMaybe nextPartNum) partInfos return $ ListPartsResult hasMore (listToMaybe nextPartNum) partInfos

View File

@ -336,7 +336,7 @@ liveServerUnitTests = testGroup "Unit tests against a live server"
(etag, _) <- copyObjectPart bucket copyObj cps{ (etag, _) <- copyObjectPart bucket copyObj cps{
cpSourceRange = Just ((p-1)*mb5, (p-1)*mb5 + (mb5 - 1)) cpSourceRange = Just ((p-1)*mb5, (p-1)*mb5 + (mb5 - 1))
} uid (fromIntegral p) [] } uid (fromIntegral p) []
return $ PartInfo (fromIntegral p) etag return $ (fromIntegral p, etag)
step "complete multipart" step "complete multipart"
void $ completeMultipartUpload bucket copyObj uid parts void $ completeMultipartUpload bucket copyObj uid parts

View File

@ -8,7 +8,6 @@ import Test.Tasty.HUnit
import Lib.Prelude import Lib.Prelude
import Network.Minio.XmlGenerator import Network.Minio.XmlGenerator
import Network.Minio.Data
xmlGeneratorTests :: TestTree xmlGeneratorTests :: TestTree
xmlGeneratorTests = testGroup "XML Generator Tests" xmlGeneratorTests = testGroup "XML Generator Tests"
@ -29,7 +28,7 @@ testMkCreateBucketConfig = do
testMkCompleteMultipartUploadRequest :: Assertion testMkCompleteMultipartUploadRequest :: Assertion
testMkCompleteMultipartUploadRequest = testMkCompleteMultipartUploadRequest =
assertEqual "completeMultipartUpload xml should match: " expected $ assertEqual "completeMultipartUpload xml should match: " expected $
mkCompleteMultipartUploadRequest [PartInfo 1 "abc"] mkCompleteMultipartUploadRequest [(1, "abc")]
where where
expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\ expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
\<CompleteMultipartUpload>\ \<CompleteMultipartUpload>\

View File

@ -205,9 +205,9 @@ testParseListPartsResponse = do
\</ListPartsResult>" \</ListPartsResult>"
expectedListResult = ListPartsResult True (Just 3) [part1, part2] expectedListResult = ListPartsResult True (Just 3) [part1, part2]
part1 = ListPartInfo 2 "\"7778aef83f66abc1fa1e8477f296d394\"" 10485760 modifiedTime1 part1 = ObjectPartInfo 2 "\"7778aef83f66abc1fa1e8477f296d394\"" 10485760 modifiedTime1
modifiedTime1 = flip UTCTime 74914 $ fromGregorian 2010 11 10 modifiedTime1 = flip UTCTime 74914 $ fromGregorian 2010 11 10
part2 = ListPartInfo 3 "\"aaaa18db4cc2f85cedef654fccc4a4x8\"" 10485760 modifiedTime2 part2 = ObjectPartInfo 3 "\"aaaa18db4cc2f85cedef654fccc4a4x8\"" 10485760 modifiedTime2
modifiedTime2 = flip UTCTime 74913 $ fromGregorian 2010 11 10 modifiedTime2 = flip UTCTime 74913 $ fromGregorian 2010 11 10
parsedListPartsResult <- runExceptT $ parseListPartsResponse xmldata parsedListPartsResult <- runExceptT $ parseListPartsResponse xmldata