`ConnectionClosed` при использовании` getObject` от amazonka-s3 - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть функция

import Control.Lens ((^.))
import Data.Conduit (sinkLazy)
import Network.AWS (MonadAWS, send, sinkBody)
import Network.AWS.S3 (BucketName (..), ObjectKey (..), gorsBody, getObject)
import qualified Data.ByteString.Lazy as LBS


getObjectData :: MonadAWS m => Text -> Text -> m LBS.ByteString
getObjectData b k = do
  resp <- send $ getObject (BucketName b) (ObjectKey k)
  (resp ^. gorsBody) `sinkBody` sinkLazy

, целью которой является получение данных из некоторого объекта на s3 в ленивую строку байтов.

Отправка запроса прошла успешно, и я вижуответ.Конечно, поле gorsBody отображается как RsBody { ConduitM () ByteString (ResourceT IO) () }, потому что это то, что оно есть.

Когда я пытаюсь выполнить последнюю строку функции, я получаю что-то вроде этого:

*** Exception: HttpExceptionRequest Request {
  host                 = "s3.amazonaws.com"
  port                 = 443
  secure               = True
  requestHeaders       = [("Host","s3.amazonaws.com"),("X-Amz-Date","20181121T001938Z"),("X-Amz-Content-SHA256","blah"),("X-Amz-Security-Token","blah"),("Authorization","<REDACTED>")]
  path                 = "/path/to/my/file.txt"
  queryString          = ""
  method               = "GET"
  proxy                = Nothing
  rawBody              = False
  redirectCount        = 0
  responseTimeout      = ResponseTimeoutMicro 70000000
  requestVersion       = HTTP/1.1
}
 ConnectionClosed

Кажется, это может быть связано с ленью;возможно, тело ответа никогда не оценивалось до закрытия соединения.Но это чистая спекуляция, и в любом случае я не уверен, как ее решить.У кого-нибудь есть представление о том, что здесь происходит?Похоже, то, что я делаю, это правильное использование канала amazonka-s3 +.

Я использую lts-11.14 и amazonka-s3-1.6.0.

1 Ответ

0 голосов
/ 21 ноября 2018

Как оказалось, это известная проблема с версией Stackage amazonka-s3, которая еще не была исправлена.Временное решение: обновить зависимости amazonka / core / s3, указав фиксированную версию master:

# stack.yaml
extra-deps:
- git: git@github.com:brendanhay/amazonka
  commit: 248f7b2a7248222cc21cef6194cd1872ba99ac5d
  subdirs:
    - amazonka
    - core
    - amazonka-s3
...