From 99d9879cb5c9249a3c9aa9fdbf3672f5278d79fc Mon Sep 17 00:00:00 2001 From: Aditya Manthramurthy Date: Tue, 28 Feb 2017 18:14:16 +0530 Subject: [PATCH] Rename types (#12) * Rename PartInfo -> PartTuple * Rename ListPartInfo -> ObjectPartInfo --- src/Network/Minio.hs | 2 +- src/Network/Minio/Data.hs | 21 ++++++++------------- src/Network/Minio/ListOps.hs | 4 ++-- src/Network/Minio/PutObject.hs | 14 +++++++------- src/Network/Minio/S3API.hs | 12 ++++++------ src/Network/Minio/XmlGenerator.hs | 4 ++-- src/Network/Minio/XmlParser.hs | 2 +- test/LiveServer.hs | 2 +- test/Network/Minio/XmlGenerator/Test.hs | 3 +-- test/Network/Minio/XmlParser/Test.hs | 4 ++-- 10 files changed, 31 insertions(+), 37 deletions(-) diff --git a/src/Network/Minio.hs b/src/Network/Minio.hs index 6cacd77..c7ad652 100644 --- a/src/Network/Minio.hs +++ b/src/Network/Minio.hs @@ -29,7 +29,7 @@ module Network.Minio , BucketInfo(..) , ObjectInfo(..) , UploadInfo(..) - , ListPartInfo(..) + , ObjectPartInfo(..) , UploadId , ObjectData(..) diff --git a/src/Network/Minio/Data.hs b/src/Network/Minio/Data.hs index 75210cc..9c04e5d 100644 --- a/src/Network/Minio/Data.hs +++ b/src/Network/Minio/Data.hs @@ -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 diff --git a/src/Network/Minio/ListOps.hs b/src/Network/Minio/ListOps.hs index b9ea16e..191fa2f 100644 --- a/src/Network/Minio/ListOps.hs +++ b/src/Network/Minio/ListOps.hs @@ -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 diff --git a/src/Network/Minio/PutObject.hs b/src/Network/Minio/PutObject.hs index 9751307..ef93046 100644 --- a/src/Network/Minio/PutObject.hs +++ b/src/Network/Minio/PutObject.hs @@ -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 diff --git a/src/Network/Minio/S3API.hs b/src/Network/Minio/S3API.hs index 89e159c..266ebfb 100644 --- a/src/Network/Minio/S3API.hs +++ b/src/Network/Minio/S3API.hs @@ -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 diff --git a/src/Network/Minio/XmlGenerator.hs b/src/Network/Minio/XmlGenerator.hs index 58b8c04..cf214c9 100644 --- a/src/Network/Minio/XmlGenerator.hs +++ b/src/Network/Minio/XmlGenerator.hs @@ -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 diff --git a/src/Network/Minio/XmlParser.hs b/src/Network/Minio/XmlParser.hs index 67b989d..4811234 100644 --- a/src/Network/Minio/XmlParser.hs +++ b/src/Network/Minio/XmlParser.hs @@ -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 diff --git a/test/LiveServer.hs b/test/LiveServer.hs index 3c963a7..84df675 100644 --- a/test/LiveServer.hs +++ b/test/LiveServer.hs @@ -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 diff --git a/test/Network/Minio/XmlGenerator/Test.hs b/test/Network/Minio/XmlGenerator/Test.hs index 516d075..ab38e35 100644 --- a/test/Network/Minio/XmlGenerator/Test.hs +++ b/test/Network/Minio/XmlGenerator/Test.hs @@ -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 = "\ \\ diff --git a/test/Network/Minio/XmlParser/Test.hs b/test/Network/Minio/XmlParser/Test.hs index 0bc994e..d68286f 100644 --- a/test/Network/Minio/XmlParser/Test.hs +++ b/test/Network/Minio/XmlParser/Test.hs @@ -205,9 +205,9 @@ testParseListPartsResponse = do \" 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