mirror of
https://github.com/versity/versitygw.git
synced 2026-09-22 16:04:15 +00:00
The body stream is now wrapped in a `bodyStreamTracker` before the handler touches it, which remembers the stream's first terminal result rather than asking fasthttp a second, unsafe question. `io.EOF` means the body was read out in full and the connection is still in sync; no terminal result means the handler stopped partway, so the leftovers are drained the way a `Content-Length` body already was; a framing error means nothing decodable is left and the connection cannot carry another request. `fasthttp.Request.SetBodyStream` cannot install the wrapper, as it releases the current `*requestStream` back to its pool, so `requestBodyStream` is now the accessor every body reader takes the stream from. Broken framing no longer gives up on draining either. The connection is closed either way, so a bounded read off the raw socket costs nothing and lets the client finish its write and read the S3 error instead of a reset.
44 lines
1.9 KiB
Go
44 lines
1.9 KiB
Go
// Copyright 2023 Versity Software
|
|
// This file is licensed under the Apache License, Version 2.0
|
|
// (the "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
|
|
package utils
|
|
|
|
import "github.com/versity/versitygw/internal/httpctx"
|
|
|
|
// Region, StartTime, IsRoot, Account, AccessKey context locals
|
|
// are set to default values in middlewares.SetDefaultValues
|
|
// to avoid the nil interface conversions
|
|
type ContextKey = httpctx.ContextKey
|
|
|
|
const (
|
|
ContextKeyRegion = httpctx.ContextKeyRegion
|
|
ContextKeyStartTime = httpctx.ContextKeyStartTime
|
|
ContextKeyIsRoot = httpctx.ContextKeyIsRoot
|
|
ContextKeyRootAccessKey = httpctx.ContextKeyRootAccessKey
|
|
ContextKeyAccount = httpctx.ContextKeyAccount
|
|
ContextKeyAuthenticated = httpctx.ContextKeyAuthenticated
|
|
ContextKeyPublicBucket = httpctx.ContextKeyPublicBucket
|
|
ContextKeyParsedAcl = httpctx.ContextKeyParsedAcl
|
|
ContextKeySkipResBodyLog = httpctx.ContextKeySkipResBodyLog
|
|
ContextKeyBodyReader = httpctx.ContextKeyBodyReader
|
|
ContextKeyBodyStream = httpctx.ContextKeyBodyStream
|
|
ContextKeySkip = httpctx.ContextKeySkip
|
|
ContextKeyStack = httpctx.ContextKeyStack
|
|
ContextKeyBucketOwner = httpctx.ContextKeyBucketOwner
|
|
ContextKeyObjectPostResult = httpctx.ContextKeyObjectPostResult
|
|
ContextKeyRequestID = httpctx.ContextKeyRequestID
|
|
ContextKeyHostID = httpctx.ContextKeyHostID
|
|
ContextKeyWebsiteConfig = httpctx.ContextKeyWebsiteConfig
|
|
)
|