mirror of
https://git.mirrors.martin98.com/https://github.com/ceph/ceph-csi.git
synced 2025-08-02 04:30:41 +08:00

Uses github.com/libopenstorage/secrets to communicate with Vault. This removes the need for maintaining our own limited Vault APIs. By adding the new dependency, several other packages got updated in the process. Unused indirect dependencies have been removed from go.mod. Signed-off-by: Niels de Vos <ndevos@redhat.com>
44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
package retryablehttp
|
|
|
|
import (
|
|
"net/http"
|
|
"sync"
|
|
)
|
|
|
|
// RoundTripper implements the http.RoundTripper interface, using a retrying
|
|
// HTTP client to execute requests.
|
|
//
|
|
// It is important to note that retryablehttp doesn't always act exactly as a
|
|
// RoundTripper should. This is highly dependent on the retryable client's
|
|
// configuration.
|
|
type RoundTripper struct {
|
|
// The client to use during requests. If nil, the default retryablehttp
|
|
// client and settings will be used.
|
|
Client *Client
|
|
|
|
// once ensures that the logic to initialize the default client runs at
|
|
// most once, in a single thread.
|
|
once sync.Once
|
|
}
|
|
|
|
// init initializes the underlying retryable client.
|
|
func (rt *RoundTripper) init() {
|
|
if rt.Client == nil {
|
|
rt.Client = NewClient()
|
|
}
|
|
}
|
|
|
|
// RoundTrip satisfies the http.RoundTripper interface.
|
|
func (rt *RoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
|
|
rt.once.Do(rt.init)
|
|
|
|
// Convert the request to be retryable.
|
|
retryableReq, err := FromRequest(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Execute the request.
|
|
return rt.Client.Do(retryableReq)
|
|
}
|