Trying to download a large file (~1.5GB) from S3, where it takes some time to process the response, leads to a Too little data for declared Content-Length exception.
I personally witnessed the error within 3 minutes of starting the download, but reports from other teammates suggest that this can happen instantly (the delay before the error occurs seems random).
Downloading a large file should work, regardless of size and time it takes to process.
version: '3.3'
services:
localstack:
image: localstack/localstack:3.4.0
restart: unless-stopped
ports:
- "4566:4566"
environment:
- DEBUG=1
volumes:
- ./localstack/localstack-script.sh:/etc/localstack/init/ready.d/script.sh # Init script
- localstack:/var/lib/localstack"
networks:
internal:
volumes:
localstack:
Notice the download succeed.
Notice the download fail.
- OS: Ubuntu 24.04
- LocalStack:
LocalStack version: 3.4.0
LocalStack Docker image sha: (could not find in logs)
LocalStack build date: 2024-04-25
LocalStack build git hash: 6f971ac81
I've tried to find the fault in my code for a few days now but I can't find anything obvious. The logs are just cryptic enough for me to suggest that this might be a bug with LocalStack itself.
I included OpenCSV code in the example, as that is the most obvious way to make it fail for us.
Some additional information:
java.lang.RuntimeException: Error parsing CSV line: 6430053, values: [...]
at com.opencsv.bean.concurrent.LineExecutor.checkExceptions(LineExecutor.java:64) ~[opencsv-5.9.jar:na]
at com.opencsv.bean.concurrent.IntolerantThreadPoolExecutor.areMoreResultsAvailable(IntolerantThreadPoolExecutor.java:303) ~[opencsv-5.9.jar:na]
at com.opencsv.bean.concurrent.IntolerantThreadPoolExecutor.tryAdvance(IntolerantThreadPoolExecutor.java:313) ~[opencsv-5.9.jar:na]
at com.opencsv.bean.concurrent.LineExecutor.tryAdvance(LineExecutor.java:24) ~[opencsv-5.9.jar:na]
at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na]
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) ~[na:na]
at com.opencsv.bean.CsvToBean.parse(CsvToBean.java:126) ~[opencsv-5.9.jar:na]
at [...]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169) ~[spring-messaging-6.1.8.jar:6.1.8]
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119) ~[spring-messaging-6.1.8.jar:6.1.8]
at io.awspring.cloud.sqs.listener.adapter.AbstractMethodInvokingListenerAdapter.invokeHandler(AbstractMethodInvokingListenerAdapter.java:56) ~[spring-cloud-aws-sqs-3.1.1.jar:3.1.1]
at io.awspring.cloud.sqs.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:41) ~[spring-cloud-aws-sqs-3.1.1.jar:3.1.1]
at io.awspring.cloud.sqs.listener.AsyncComponentAdapters$BlockingMessageListenerAdapter.lambda$onMessage$0(AsyncComponentAdapters.java:208) ~[spring-cloud-aws-sqs-3.1.1.jar:3.1.1]
at io.awspring.cloud.sqs.listener.AsyncComponentAdapters$AbstractThreadingComponentAdapter.runInSameThread(AsyncComponentAdapters.java:120) ~[spring-cloud-aws-sqs-3.1.1.jar:3.1.1]
at io.awspring.cloud.sqs.listener.AsyncComponentAdapters$AbstractThreadingComponentAdapter.execute(AsyncComponentAdapters.java:111) ~[spring-cloud-aws-sqs-3.1.1.jar:3.1.1]
at io.awspring.cloud.sqs.listener.AsyncComponentAdapters$BlockingMessageListenerAdapter.onMessage(AsyncComponentAdapters.java:208) ~[spring-cloud-aws-sqs-3.1.1.jar:3.1.1]
at io.awspring.cloud.sqs.listener.pipeline.MessageListenerExecutionStage.process(MessageListenerExecutionStage.java:49) ~[spring-cloud-aws-sqs-3.1.1.jar:3.1.1]
at io.awspring.cloud.sqs.listener.pipeline.MessageProcessingPipelineBuilder$ComposingMessagePipelineStage.lambda$process$0(MessageProcessingPipelineBuilder.java:80) ~[spring-cloud-aws-sqs-3.1.1.jar:3.1.1]
at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2341) ~[na:na]
at io.awspring.cloud.sqs.listener.pipeline.MessageProcessingPipelineBuilder$ComposingMessagePipelineStage.process(MessageProcessingPipelineBuilder.java:80) ~[spring-cloud-aws-sqs-3.1.1.jar:3.1.1]
at io.awspring.cloud.sqs.listener.pipeline.MessageProcessingPipelineBuilder$FutureComposingMessagePipelineStage.process(MessageProcessingPipelineBuilder.java:104) ~[spring-cloud-aws-sqs-3.1.1.jar:3.1.1]
at io.awspring.cloud.sqs.listener.pipeline.MessageProcessingPipelineBuilder$FutureComposingMessagePipelineStage.process(MessageProcessingPipelineBuilder.java:104) ~[spring-cloud-aws-sqs-3.1.1.jar:3.1.1]
at io.awspring.cloud.sqs.listener.pipeline.MessageProcessingPipelineBuilder$FutureComposingMessagePipelineStage.process(MessageProcessingPipelineBuilder.java:104) ~[spring-cloud-aws-sqs-3.1.1.jar:3.1.1]
at io.awspring.cloud.sqs.listener.pipeline.MessageProcessingPipelineBuilder$FutureComposingMessagePipelineStage.process(MessageProcessingPipelineBuilder.java:104) ~[spring-cloud-aws-sqs-3.1.1.jar:3.1.1]
at io.awspring.cloud.sqs.listener.sink.AbstractMessageProcessingPipelineSink.lambda$execute$0(AbstractMessageProcessingPipelineSink.java:99) ~[spring-cloud-aws-sqs-3.1.1.jar:3.1.1]
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run$$$capture(CompletableFuture.java:1768) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
Caused by: org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body (expected: 1,348,550,980; received: 1,107,689,472)
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:178) ~[httpcore-4.4.16.jar:4.4.16]
at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:135) ~[httpclient-4.5.13.jar:4.5.13]
at java.base/java.io.FilterInputStream.read(FilterInputStream.java:119) ~[na:na]
at java.base/java.io.FilterInputStream.read(FilterInputStream.java:119) ~[na:na]
at software.amazon.awssdk.core.io.SdkFilterInputStream.read(SdkFilterInputStream.java:66) ~[sdk-core-2.21.46.jar:na]
at software.amazon.awssdk.core.internal.metrics.BytesReadTrackingInputStream.read(BytesReadTrackingInputStream.java:49) ~[sdk-core-2.21.46.jar:na]
at java.base/java.io.FilterInputStream.read(FilterInputStream.java:119) ~[na:na]
at software.amazon.awssdk.core.io.SdkFilterInputStream.read(SdkFilterInputStream.java:66) ~[sdk-core-2.21.46.jar:na]
at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:350) ~[na:na]
at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:393) ~[na:na]
at java.base/sun.nio.cs.StreamDecoder.lockedRead(StreamDecoder.java:217) ~[na:na]
at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:171) ~[na:na]
at java.base/java.io.InputStreamReader.read(InputStreamReader.java:188) ~[na:na]
at java.base/java.io.BufferedReader.fill(BufferedReader.java:160) ~[na:na]
at java.base/java.io.BufferedReader.implReadLine(BufferedReader.java:370) ~[na:na]
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:347) ~[na:na]
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:436) ~[na:na]
at com.opencsv.stream.reader.LineReader.readLine(LineReader.java:41) ~[opencsv-5.9.jar:na]
at com.opencsv.CSVReader.getNextLine(CSVReader.java:367) ~[opencsv-5.9.jar:na]
at com.opencsv.CSVReader.primeNextRecord(CSVReader.java:235) ~[opencsv-5.9.jar:na]
at com.opencsv.CSVReader.flexibleRead(CSVReader.java:610) ~[opencsv-5.9.jar:na]
at com.opencsv.CSVReader.readNext(CSVReader.java:204) ~[opencsv-5.9.jar:na]
at com.opencsv.bean.concurrent.SingleLineReader.readNextLine(SingleLineReader.java:49) ~[opencsv-5.9.jar:na]
at com.opencsv.bean.concurrent.CompleteFileReader.run(CompleteFileReader.java:91) ~[opencsv-5.9.jar:na]
... 1 common frames omitted
2024-06-10T06:41:20.323 ERROR --- [-functhread6] hypercorn.error : Error in ASGI Framework
2024-06-10T06:41:20.337746830Z Traceback (most recent call last):
2024-06-10T06:41:20.337765833Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/hypercorn/asyncio/tcp_server.py", line 95, in _read_data
2024-06-10T06:41:20.337782785Z data = await asyncio.wait_for(self.reader.read(MAX_RECV), self.config.read_timeout)
2024-06-10T06:41:20.337798631Z ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-06-10T06:41:20.337815464Z File "/usr/local/lib/python3.11/asyncio/tasks.py", line 452, in wait_for
2024-06-10T06:41:20.337831584Z return await fut
2024-06-10T06:41:20.337847489Z ^^^^^^^^^
2024-06-10T06:41:20.337863233Z File "/usr/local/lib/python3.11/asyncio/streams.py", line 711, in read
2024-06-10T06:41:20.337878846Z await self._wait_for_data('read')
2024-06-10T06:41:20.337894271Z File "/usr/local/lib/python3.11/asyncio/streams.py", line 543, in _wait_for_data
2024-06-10T06:41:20.337910381Z await self._waiter
2024-06-10T06:41:20.337925697Z File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 1061, in write
2024-06-10T06:41:20.337941297Z n = self._sock.send(data)
2024-06-10T06:41:20.337957015Z ^^^^^^^^^^^^^^^^^^^^^
2024-06-10T06:41:20.337972872Z TimeoutError: timed out
2024-06-10T06:41:20.337988824Z
2024-06-10T06:41:20.338004097Z During handling of the above exception, another exception occurred:
2024-06-10T06:41:20.338019924Z
2024-06-10T06:41:20.338035452Z Traceback (most recent call last):
2024-06-10T06:41:20.338050828Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/hypercorn/asyncio/task_group.py", line 27, in _handle
2024-06-10T06:41:20.338067274Z await app(scope, receive, send, sync_spawn, call_soon)
2024-06-10T06:41:20.338083156Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/hypercorn/app_wrappers.py", line 34, in __call__
2024-06-10T06:41:20.338099637Z await self.app(scope, receive, send)
2024-06-10T06:41:20.338115389Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/rolo/gateway/asgi.py", line 75, in __call__
2024-06-10T06:41:20.338134029Z return await self.adapter(scope, receive, send)
2024-06-10T06:41:20.338150053Z ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-06-10T06:41:20.338165938Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/rolo/asgi.py", line 540, in __call__
2024-06-10T06:41:20.338182178Z return await self.handle_http(scope, receive, send)
2024-06-10T06:41:20.338197687Z ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-06-10T06:41:20.338213495Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/rolo/asgi.py", line 611, in handle_http
2024-06-10T06:41:20.338229503Z await response.close()
2024-06-10T06:41:20.338244961Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/rolo/asgi.py", line 322, in close
2024-06-10T06:41:20.338263097Z await self.send({"type": "http.response.body", "body": b"", "more_body": False})
2024-06-10T06:41:20.338280141Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/hypercorn/protocol/http_stream.py", line 189, in app_send
2024-06-10T06:41:20.338296140Z await self.send(EndBody(stream_id=self.stream_id))
2024-06-10T06:41:20.338311566Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/hypercorn/protocol/h11.py", line 139, in stream_send
2024-06-10T06:41:20.338327500Z await self._send_h11_event(h11.EndOfMessage())
2024-06-10T06:41:20.338342987Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/hypercorn/protocol/h11.py", line 243, in _send_h11_event
2024-06-10T06:41:20.338359314Z data = self.connection.send(event)
2024-06-10T06:41:20.338375307Z ^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-06-10T06:41:20.338391162Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/h11/_connection.py", line 512, in send
2024-06-10T06:41:20.338406735Z data_list = self.send_with_data_passthrough(event)
2024-06-10T06:41:20.338422149Z ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-06-10T06:41:20.338437790Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/h11/_connection.py", line 545, in send_with_data_passthrough
2024-06-10T06:41:20.338453262Z writer(event, data_list.append)
2024-06-10T06:41:20.338468551Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/h11/_writers.py", line 67, in __call__
2024-06-10T06:41:20.338484611Z self.send_eom(event.headers, write)
2024-06-10T06:41:20.338500225Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/h11/_writers.py", line 96, in send_eom
2024-06-10T06:41:20.338516486Z raise LocalProtocolError("Too little data for declared Content-Length")
2024-06-10T06:41:20.338532629Z h11._util.LocalProtocolError: Too little data for declared Content-Length
2024-06-10T06:41:20.339861427Z 2024-06-10T06:41:20.323 ERROR --- [-functhread6] hypercorn.error : Error in ASGI Framework
2024-06-10T06:41:20.339891878Z Traceback (most recent call last):
2024-06-10T06:41:20.339909165Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/hypercorn/asyncio/tcp_server.py", line 95, in _read_data
2024-06-10T06:41:20.339929814Z data = await asyncio.wait_for(self.reader.read(MAX_RECV), self.config.read_timeout)
2024-06-10T06:41:20.339946045Z ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-06-10T06:41:20.339961740Z File "/usr/local/lib/python3.11/asyncio/tasks.py", line 452, in wait_for
2024-06-10T06:41:20.339977820Z return await fut
2024-06-10T06:41:20.339993261Z ^^^^^^^^^
2024-06-10T06:41:20.340008428Z File "/usr/local/lib/python3.11/asyncio/streams.py", line 711, in read
2024-06-10T06:41:20.340024048Z await self._wait_for_data('read')
2024-06-10T06:41:20.340039473Z File "/usr/local/lib/python3.11/asyncio/streams.py", line 543, in _wait_for_data
2024-06-10T06:41:20.340055464Z await self._waiter
2024-06-10T06:41:20.340071326Z File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 1061, in write
2024-06-10T06:41:20.340087085Z n = self._sock.send(data)
2024-06-10T06:41:20.340102471Z ^^^^^^^^^^^^^^^^^^^^^
2024-06-10T06:41:20.340117850Z TimeoutError: timed out
2024-06-10T06:41:20.340132991Z
2024-06-10T06:41:20.340148083Z During handling of the above exception, another exception occurred:
2024-06-10T06:41:20.340163668Z
2024-06-10T06:41:20.340179002Z Traceback (most recent call last):
2024-06-10T06:41:20.340194423Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/hypercorn/asyncio/task_group.py", line 27, in _handle
2024-06-10T06:41:20.340210148Z await app(scope, receive, send, sync_spawn, call_soon)
2024-06-10T06:41:20.340225872Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/hypercorn/app_wrappers.py", line 34, in __call__
2024-06-10T06:41:20.340241588Z await self.app(scope, receive, send)
2024-06-10T06:41:20.340256994Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/rolo/gateway/asgi.py", line 75, in __call__
2024-06-10T06:41:20.340272897Z return await self.adapter(scope, receive, send)
2024-06-10T06:41:20.340288601Z ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-06-10T06:41:20.340304245Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/rolo/asgi.py", line 540, in __call__
2024-06-10T06:41:20.340319913Z return await self.handle_http(scope, receive, send)
2024-06-10T06:41:20.340335239Z ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-06-10T06:41:20.340350586Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/rolo/asgi.py", line 611, in handle_http
2024-06-10T06:41:20.340366408Z await response.close()
2024-06-10T06:41:20.340381930Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/rolo/asgi.py", line 322, in close
2024-06-10T06:41:20.340398964Z await self.send({"type": "http.response.body", "body": b"", "more_body": False})
2024-06-10T06:41:20.340415610Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/hypercorn/protocol/http_stream.py", line 189, in app_send
2024-06-10T06:41:20.340431540Z await self.send(EndBody(stream_id=self.stream_id))
2024-06-10T06:41:20.340447112Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/hypercorn/protocol/h11.py", line 139, in stream_send
2024-06-10T06:41:20.340463163Z await self._send_h11_event(h11.EndOfMessage())
2024-06-10T06:41:20.340478776Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/hypercorn/protocol/h11.py", line 243, in _send_h11_event
2024-06-10T06:41:20.340494329Z data = self.connection.send(event)
2024-06-10T06:41:20.340509719Z ^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-06-10T06:41:20.340524989Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/h11/_connection.py", line 512, in send
2024-06-10T06:41:20.340540818Z data_list = self.send_with_data_passthrough(event)
2024-06-10T06:41:20.340556874Z ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2024-06-10T06:41:20.340572689Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/h11/_connection.py", line 545, in send_with_data_passthrough
2024-06-10T06:41:20.340588309Z writer(event, data_list.append)
2024-06-10T06:41:20.340603554Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/h11/_writers.py", line 67, in __call__
2024-06-10T06:41:20.340619180Z self.send_eom(event.headers, write)
2024-06-10T06:41:20.340634599Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/h11/_writers.py", line 96, in send_eom
2024-06-10T06:41:20.340650378Z raise LocalProtocolError("Too little data for declared Content-Length")
2024-06-10T06:41:20.340666127Z h11._util.LocalProtocolError: Too little data for declared Content-Length
2024-06-10T06:41:20.341936148Z 2024-06-10T06:41:20.338 ERROR --- [-functhread6] asyncio : Unhandled exception in client_connected_cb
2024-06-10T06:41:20.341970439Z transport: <asyncio.sslproto._SSLProtocolTransport object at 0x7135dafa8470>
2024-06-10T06:41:20.341988699Z Traceback (most recent call last):
2024-06-10T06:41:20.342004551Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/hypercorn/asyncio/run.py", line 109, in _server_callback
2024-06-10T06:41:20.342020629Z await TCPServer(app, loop, config, context, reader, writer)
2024-06-10T06:41:20.342036325Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/hypercorn/asyncio/tcp_server.py", line 74, in run
2024-06-10T06:41:20.342052392Z await self._close()
2024-06-10T06:41:20.342068057Z File "/opt/code/localstack/localstack/utils/server/http2_server.py", line 79, in _close
2024-06-10T06:41:20.342084328Z return await _close_orig(self)
2024-06-10T06:41:20.342100231Z ^^^^^^^^^^^^^^^^^^^^^^^
2024-06-10T06:41:20.342115753Z File "/opt/code/localstack/.venv/lib/python3.11/site-packages/hypercorn/asyncio/tcp_server.py", line 117, in _close
2024-06-10T06:41:20.342131420Z await self.writer.wait_closed()
2024-06-10T06:41:20.342146819Z File "/usr/local/lib/python3.11/asyncio/streams.py", line 364, in wait_closed
2024-06-10T06:41:20.342162739Z await self._protocol._get_close_waiter(self)
2024-06-10T06:41:20.342178418Z File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 1061, in write
2024-06-10T06:41:20.342194076Z n = self._sock.send(data)
2024-06-10T06:41:20.342209541Z ^^^^^^^^^^^^^^^^^^^^^
2024-06-10T06:41:20.342225098Z TimeoutError: timed out
Is there an existing issue for this?
Current Behavior
Trying to download a large file (~1.5GB) from S3, where it takes some time to process the response, leads to a
Too little data for declared Content-Lengthexception.I personally witnessed the error within 3 minutes of starting the download, but reports from other teammates suggest that this can happen instantly (the delay before the error occurs seems random).
Expected Behavior
Downloading a large file should work, regardless of size and time it takes to process.
How are you starting LocalStack?
With a docker-compose file
Steps To Reproduce
How are you starting localstack (e.g.,
bin/localstackcommand, arguments, ordocker-compose.yml)Client commands (e.g., AWS SDK code snippet, or sequence of "awslocal" commands)
Upload a large file using
Test::thisWorks:Notice the download succeed.
Upload a large file using
Test::thisFails:Notice the download fail.
Environment
Anything else?
I've tried to find the fault in my code for a few days now but I can't find anything obvious. The logs are just cryptic enough for me to suggest that this might be a bug with LocalStack itself.
I included OpenCSV code in the example, as that is the most obvious way to make it fail for us.
Some additional information:
readAllBytesseems to work.Thread.sleep()(to simulate processing while the Response is open) and the error didn't occur.The log from my application is (shortened):
The log from LocalStack is: