Blame vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_unique_request_id.go
|
Packit |
63bb0d |
package azblob
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
import (
|
|
Packit |
63bb0d |
"context"
|
|
Packit Service |
3a6627 |
"errors"
|
|
Packit |
63bb0d |
"github.com/Azure/azure-pipeline-go/pipeline"
|
|
Packit |
63bb0d |
)
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// NewUniqueRequestIDPolicyFactory creates a UniqueRequestIDPolicyFactory object
|
|
Packit |
63bb0d |
// that sets the request's x-ms-client-request-id header if it doesn't already exist.
|
|
Packit |
63bb0d |
func NewUniqueRequestIDPolicyFactory() pipeline.Factory {
|
|
Packit |
63bb0d |
return pipeline.FactoryFunc(func(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.PolicyFunc {
|
|
Packit |
63bb0d |
// This is Policy's Do method:
|
|
Packit |
63bb0d |
return func(ctx context.Context, request pipeline.Request) (pipeline.Response, error) {
|
|
Packit |
63bb0d |
id := request.Header.Get(xMsClientRequestID)
|
|
Packit |
63bb0d |
if id == "" { // Add a unique request ID if the caller didn't specify one already
|
|
Packit Service |
3a6627 |
id = newUUID().String()
|
|
Packit Service |
3a6627 |
request.Header.Set(xMsClientRequestID, id)
|
|
Packit |
63bb0d |
}
|
|
Packit Service |
3a6627 |
|
|
Packit Service |
3a6627 |
resp, err := next.Do(ctx, request)
|
|
Packit Service |
3a6627 |
|
|
Packit Service |
3a6627 |
if err == nil && resp != nil {
|
|
Packit Service |
3a6627 |
val := resp.Response().Header.Values(xMsClientRequestID)
|
|
Packit Service |
3a6627 |
if len(val) > 0 {
|
|
Packit Service |
3a6627 |
if val[0] != id {
|
|
Packit Service |
3a6627 |
err = errors.New("client Request ID from request and response does not match")
|
|
Packit Service |
3a6627 |
}
|
|
Packit Service |
3a6627 |
}
|
|
Packit Service |
3a6627 |
}
|
|
Packit Service |
3a6627 |
|
|
Packit Service |
3a6627 |
return resp, err
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
})
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
const xMsClientRequestID = "x-ms-client-request-id"
|