mirror of
https://github.com/minio/minio.git
synced 2025-05-22 18:11:50 -04:00
fix: client errors for DNS service creation errors (#10584)
This commit is contained in:
parent
0d45c38782
commit
5a7f92481e
@ -1956,6 +1956,8 @@ func toAPIErrorCode(ctx context.Context, err error) (apiErr APIErrorCode) {
|
|||||||
apiErr = ErrBackendDown
|
apiErr = ErrBackendDown
|
||||||
case ObjectNameTooLong:
|
case ObjectNameTooLong:
|
||||||
apiErr = ErrKeyTooLongError
|
apiErr = ErrKeyTooLongError
|
||||||
|
case dns.ErrInvalidBucketName:
|
||||||
|
apiErr = ErrInvalidBucketName
|
||||||
default:
|
default:
|
||||||
var ie, iw int
|
var ie, iw int
|
||||||
// This work-around is to handle the issue golang/go#30648
|
// This work-around is to handle the issue golang/go#30648
|
||||||
@ -1992,6 +1994,12 @@ func toAPIError(ctx context.Context, err error) APIError {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var apiErr = errorCodes.ToAPIErr(toAPIErrorCode(ctx, err))
|
var apiErr = errorCodes.ToAPIErr(toAPIErrorCode(ctx, err))
|
||||||
|
e, ok := err.(dns.ErrInvalidBucketName)
|
||||||
|
if ok {
|
||||||
|
code := toAPIErrorCode(ctx, e)
|
||||||
|
apiErr = errorCodes.ToAPIErrWithErr(code, e)
|
||||||
|
}
|
||||||
|
|
||||||
if apiErr.Code == "InternalError" {
|
if apiErr.Code == "InternalError" {
|
||||||
// If we see an internal error try to interpret
|
// If we see an internal error try to interpret
|
||||||
// any underlying errors if possible depending on
|
// any underlying errors if possible depending on
|
||||||
|
@ -22,10 +22,12 @@ import (
|
|||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/dgrijalva/jwt-go"
|
"github.com/dgrijalva/jwt-go"
|
||||||
@ -78,28 +80,39 @@ func (c *OperatorDNS) Put(bucket string) error {
|
|||||||
defer cancel()
|
defer cancel()
|
||||||
e, err := c.endpoint(bucket, false)
|
e, err := c.endpoint(bucket, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return newError(bucket, err)
|
||||||
}
|
}
|
||||||
req, err := http.NewRequestWithContext(ctx, http.MethodPost, e, nil)
|
req, err := http.NewRequestWithContext(ctx, http.MethodPost, e, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return newError(bucket, err)
|
||||||
}
|
}
|
||||||
if err = c.addAuthHeader(req); err != nil {
|
if err = c.addAuthHeader(req); err != nil {
|
||||||
return err
|
return newError(bucket, err)
|
||||||
}
|
}
|
||||||
resp, err := c.httpClient.Do(req)
|
resp, err := c.httpClient.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if derr := c.Delete(bucket); derr != nil {
|
if derr := c.Delete(bucket); derr != nil {
|
||||||
return derr
|
return newError(bucket, derr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
var errorStringBuilder strings.Builder
|
||||||
|
io.Copy(&errorStringBuilder, io.LimitReader(resp.Body, resp.ContentLength))
|
||||||
xhttp.DrainBody(resp.Body)
|
xhttp.DrainBody(resp.Body)
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
return fmt.Errorf("request to create the service for bucket %s, failed with status %s", bucket, resp.Status)
|
errorString := errorStringBuilder.String()
|
||||||
|
return newError(bucket, fmt.Errorf("service create for bucket %s, failed with status %s, error %s", bucket, resp.Status, errorString))
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func newError(bucket string, err error) error {
|
||||||
|
e := Error{bucket, err}
|
||||||
|
if strings.Contains(err.Error(), "invalid bucket name") {
|
||||||
|
return ErrInvalidBucketName(e)
|
||||||
|
}
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
// Delete - Removes DNS entries added in Put().
|
// Delete - Removes DNS entries added in Put().
|
||||||
func (c *OperatorDNS) Delete(bucket string) error {
|
func (c *OperatorDNS) Delete(bucket string) error {
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), defaultOperatorContextTimeout)
|
ctx, cancel := context.WithTimeout(context.Background(), defaultOperatorContextTimeout)
|
||||||
|
@ -16,6 +16,22 @@
|
|||||||
|
|
||||||
package dns
|
package dns
|
||||||
|
|
||||||
|
// Error - DNS related errors error.
|
||||||
|
type Error struct {
|
||||||
|
Bucket string
|
||||||
|
Err error
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrInvalidBucketName for buckets with invalid name
|
||||||
|
type ErrInvalidBucketName Error
|
||||||
|
|
||||||
|
func (e ErrInvalidBucketName) Error() string {
|
||||||
|
return "invalid bucket name error: " + e.Err.Error()
|
||||||
|
}
|
||||||
|
func (e Error) Error() string {
|
||||||
|
return "dns related error: " + e.Err.Error()
|
||||||
|
}
|
||||||
|
|
||||||
// Store dns record store
|
// Store dns record store
|
||||||
type Store interface {
|
type Store interface {
|
||||||
Put(bucket string) error
|
Put(bucket string) error
|
||||||
|
Loading…
x
Reference in New Issue
Block a user