Skip to content

Complete MPU in mountpoint-s3 specifically (awscrt:http) does not follow RFC standard when response does not have content length header #1741

@netapp-zwilliam

Description

@netapp-zwilliam

Mountpoint for Amazon S3 version

mount-s3-1.19.0

AWS Region

third party S3 provider

Describe the running environment

S3 instance is a third party s3 provider.

mount-s3 is mounted on Linux Debian 6.1.148-1

Mountpoint options

mount-s3 <bucket> <dir> --file-mode 0644 --dir-mode 0755 --allow-other --uid 105516 --gid 105516 --allow-delete --allow-overwrite --region us-east-1 --endpoint-url <custom-s3-provider> --force-path-style --cache cache --debug

What happened?

cp on mount-s3 fails with an input/output error due it failing to get the Etag of the object after the complete MPU because mount-s3 did not wait for the body of the Complete MPU POST response.

cp: failed to close 'mount-s3-1.19.0/s3-bucket/10MBfile2': Input/output error

The server returns Connection: CLOSE, without a Content-Length header and without chunked transfer encoding. According to the RFC-9112 standard :

8. Otherwise, this is a response message without a declared message body length, so the message body length is determined by the number of octets received prior to the server closing the connection.

It's supposed to read the entire message until the server closes the connection https://datatracker.ietf.org/doc/html/rfc9112#section-9.6-2

A client that receives a "close" connection option MUST cease sending requests on that connection and close the connection **after reading the response message** containing the "close" connection option; if additional pipelined requests had been sent on the connection, the client SHOULD NOT assume that they will be processed by the server.

Relevant log output

2025-09-17T03:19:46.570758Z TRACE awscrt::http-connection: id=0x7fba040229d0: Incoming message of size 271.
2025-09-17T03:19:46.570767Z TRACE awscrt::http-stream: id=0x7fba04045d40: Incoming response status: 200 (OK).
2025-09-17T03:19:46.570806Z TRACE awscrt::http-stream: id=0x7fba04045d40: Incoming header: Date: Wed, 17 Sep 2025 03:19:46 GMT
2025-09-17T03:19:46.570833Z TRACE awscrt::http-stream: id=0x7fba04045d40: Incoming header: Connection: CLOSE
2025-09-17T03:19:46.570840Z TRACE awscrt::http-stream: id=0x7fba04045d40: Received 'Connection: close' header. This will be the final stream on this connection.
2025-09-17T03:19:46.570844Z TRACE awscrt::http-stream: id=0x7fba04045d40: Incoming header: Server: <redacted>
2025-09-17T03:19:46.570847Z TRACE awscrt::http-stream: id=0x7fba04045d40: Incoming header: x-amz-request-id: #############
2025-09-17T03:19:46.570851Z TRACE awscrt::http-stream: id=0x7fba04045d40: Incoming header: x-amz-id-2: #########
2025-09-17T03:19:46.570858Z TRACE awscrt::http-stream: id=0x7fba04045d40: Incoming header: Content-Type: application/xml
2025-09-17T03:19:46.570860Z TRACE awscrt::http-stream: id=0x7fba04045d40: Main header block done.
2025-09-17T03:19:46.570863Z TRACE awscrt::http-connection: id=0x7fba040229d0: Done reading final stream, no further streams will be read.
2025-09-17T03:19:46.570869Z DEBUG awscrt::http-stream: id=0x7fba04045d40: Client request complete, response status: 200 (OK).

2025-09-17T03:19:46.570957Z TRACE awscrt::http-connection: id=0x7fba040229d0: Current incoming stream is now (nil).
2025-09-17T03:19:46.570961Z TRACE awscrt::http-connection: id=0x7fba040229d0: Decoded 232 bytes of message, 39 bytes remain.
2025-09-17T03:19:46.570963Z ERROR awscrt::http-connection: id=0x7fba040229d0: Cannot process message because connection is shutting down.
2025-09-17T03:19:46.570967Z  INFO awscrt::http-connection: id=0x7fba040229d0: Shutting down connection with error code 2058 (AWS_ERROR_HTTP_CONNECTION_CLOSED).
2025-09-17T03:19:46.570969Z DEBUG awscrt::channel: id=0x7fba04022680: Channel shutdown is already pending, not scheduling another.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions