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(..)
, ObjectInfo(..)
, UploadInfo(..)
, ListPartInfo(..)
, ObjectPartInfo(..)
, UploadId
, ObjectData(..)

View File

@ -157,30 +157,25 @@ type PartNumber = Int16
-- | A type alias to represent an upload-id for multipart upload
type UploadId = Text
-- | A data-type to represent info about a part
data PartInfo = PartInfo PartNumber ETag
deriving (Show, Eq)
instance Ord PartInfo where
(PartInfo a _) `compare` (PartInfo b _) = a `compare` b
-- | A type to represent a part-number and etag.
type PartTuple = (PartNumber, ETag)
-- | Represents result from a listing of object parts of an ongoing
-- multipart upload.
data ListPartsResult = ListPartsResult {
lprHasMore :: Bool
, lprNextPart :: Maybe Int
, lprParts :: [ListPartInfo]
, lprParts :: [ObjectPartInfo]
} deriving (Show, Eq)
-- | Represents information about an object part in an ongoing
-- multipart upload.
data ListPartInfo = ListPartInfo {
piNumber :: PartNumber
, piETag :: ETag
, piSize :: Int64
, piModTime :: UTCTime
data ObjectPartInfo = ObjectPartInfo {
opiNumber :: PartNumber
, opiETag :: ETag
, opiSize :: Int64
, opiModTime :: UTCTime
} deriving (Show, Eq)
-- | 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
-- bucket, object and uploadId.
listIncompleteParts :: Bucket -> Object -> UploadId
-> C.Producer Minio ListPartInfo
-> C.Producer Minio ObjectPartInfo
listIncompleteParts bucket object uploadId = loop Nothing
where
loop :: Maybe Text -> C.Producer Minio ListPartInfo
loop :: Maybe Text -> C.Producer Minio ObjectPartInfo
loop nextPartMarker = do
res <- lift $ listIncompleteParts' bucket object uploadId Nothing
nextPartMarker

View File

@ -108,8 +108,8 @@ selectPartSizes size = uncurry (List.zip3 [1..]) $
-- returns partinfo if part is already uploaded.
checkUploadNeeded :: Payload -> PartNumber
-> Map.Map PartNumber ListPartInfo
-> Minio (Maybe PartInfo)
-> Map.Map PartNumber ObjectPartInfo
-> Minio (Maybe PartTuple)
checkUploadNeeded payload n pmap = do
(md5hash, pSize) <- case payload of
PayloadBS bs -> return (hashMD5 bs, fromIntegral $ B.length bs)
@ -118,8 +118,8 @@ checkUploadNeeded payload n pmap = do
(Just $ fromIntegral size)
case Map.lookup n pmap of
Nothing -> return Nothing
Just (ListPartInfo _ etag size _) -> return $
bool Nothing (Just (PartInfo n etag)) $
Just (ObjectPartInfo _ etag size _) -> return $
bool Nothing (Just (n, etag)) $
md5hash == encodeUtf8 etag && size == pSize
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
-- if there are many.
getExistingUpload :: Bucket -> Object
-> Minio (Maybe UploadId, Map.Map PartNumber ListPartInfo)
-> Minio (Maybe UploadId, Map.Map PartNumber ObjectPartInfo)
getExistingUpload b o = do
uidMay <- (fmap . fmap) uiUploadId $
listIncompleteUploads b (Just o) False C.$$ CC.head
parts <- maybe (return [])
(\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.
copyObjectInternal :: Bucket -> Object -> CopyPartSource
@ -254,7 +254,7 @@ multiPartCopyObject b o cps srcSize = do
copiedParts <- limitedMapConcurrently 10
(\(pn, cps') -> do
(etag, _) <- copyObjectPart b o cps' uid pn []
return $ PartInfo pn etag
return $ (pn, etag)
)
partSources

View File

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

View File

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

View File

@ -160,7 +160,7 @@ parseListPartsResponse xmldata = do
nextPartNum <- parseDecimals $ maybeToList nextPartNumStr
let
partInfos = map (uncurry4 ListPartInfo) $
partInfos = map (uncurry4 ObjectPartInfo) $
zip4 partNumbers partETags partSizes partModTimes
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{
cpSourceRange = Just ((p-1)*mb5, (p-1)*mb5 + (mb5 - 1))
} uid (fromIntegral p) []
return $ PartInfo (fromIntegral p) etag
return $ (fromIntegral p, etag)
step "complete multipart"
void $ completeMultipartUpload bucket copyObj uid parts

View File

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

View File

@ -205,9 +205,9 @@ testParseListPartsResponse = do
\</ListPartsResult>"
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
part2 = ListPartInfo 3 "\"aaaa18db4cc2f85cedef654fccc4a4x8\"" 10485760 modifiedTime2
part2 = ObjectPartInfo 3 "\"aaaa18db4cc2f85cedef654fccc4a4x8\"" 10485760 modifiedTime2
modifiedTime2 = flip UTCTime 74913 $ fromGregorian 2010 11 10
parsedListPartsResult <- runExceptT $ parseListPartsResponse xmldata