Skip to content

Commit 28f9377

Browse files
committed
use cluster endpoint API to detect erasure coded setup
1 parent 4c16789 commit 28f9377

File tree

4 files changed

+30
-37
lines changed

4 files changed

+30
-37
lines changed

restapi/config.go

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"crypto/x509"
2121
"io/ioutil"
2222
"net"
23+
"net/url"
2324
"strconv"
2425
"strings"
2526
"time"
@@ -59,27 +60,19 @@ func GetMinIORegion() string {
5960
}
6061

6162
func getMinIOEndpoint() string {
62-
server := getMinIOServer()
63-
if strings.Contains(server, "://") {
64-
parts := strings.Split(server, "://")
65-
if len(parts) > 1 {
66-
server = parts[1]
67-
}
63+
u, err := url.Parse(getMinIOServer())
64+
if err != nil {
65+
panic(err)
6866
}
69-
return server
67+
return u.Host
7068
}
7169

7270
func getMinIOEndpointIsSecure() bool {
73-
server := getMinIOServer()
74-
if strings.Contains(server, "://") {
75-
parts := strings.Split(server, "://")
76-
if len(parts) > 1 {
77-
if parts[0] == "https" {
78-
return true
79-
}
80-
}
71+
u, err := url.Parse(getMinIOServer())
72+
if err != nil {
73+
panic(err)
8174
}
82-
return false
75+
return u.Scheme == "https"
8376
}
8477

8578
// GetHostname gets console hostname set on env variable,

restapi/configure_console.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ func configureFlags(api *operations.ConsoleAPI) {
5858
}
5959

6060
func configureAPI(api *operations.ConsoleAPI) http.Handler {
61-
6261
// Applies when the "x-token" header is set
6362
api.KeyAuth = func(token string, scopes []string) (*models.Principal, error) {
6463
// we are validating the session token by decrypting the claims inside, if the operation succeed that means the jwt

restapi/user_buckets.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -287,11 +287,11 @@ func getBucketVersionedResponse(session *models.Principal, bucketName string) (*
287287
return bucketVResponse, nil
288288
}
289289

290-
var serverBackend madmin.BackendInfo
290+
var serverBackendType madmin.BackendType
291291
var serverBackendOnce sync.Once
292292

293293
func isErasureBackend() bool {
294-
return serverBackend.Type == madmin.Erasure
294+
return serverBackendType == madmin.Erasure
295295
}
296296

297297
// getAccountInfo fetches a list of all buckets allowed to that particular client from MinIO Servers
@@ -302,7 +302,7 @@ func getAccountInfo(ctx context.Context, client MinioAdmin) ([]*models.Bucket, e
302302
}
303303

304304
serverBackendOnce.Do(func() {
305-
serverBackend = info.Server
305+
serverBackendType = info.Server.Type
306306
})
307307

308308
var bucketInfos []*models.Bucket

restapi/user_session.go

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,38 +17,39 @@
1717
package restapi
1818

1919
import (
20-
"context"
20+
"net/http"
21+
"net/url"
2122

2223
"github.com/go-openapi/runtime/middleware"
2324
"github.com/minio/console/models"
2425
"github.com/minio/console/pkg/acl"
2526
"github.com/minio/console/restapi/operations"
2627
"github.com/minio/console/restapi/operations/user_api"
27-
"github.com/minio/madmin-go"
2828
)
2929

30-
func validateDistributedMode(session *models.Principal) bool {
31-
ctx := context.Background()
32-
mAdmin, err := NewMinioAdminClient(session)
33-
34-
// We couldn't create the client, return false
30+
func isErasureMode() bool {
31+
u, err := url.Parse(getMinIOServer())
3532
if err != nil {
36-
return false
33+
panic(err)
3734
}
38-
// create a minioClient interface implementation
39-
client := AdminClient{Client: mAdmin}
35+
u.Path = "/minio/health/cluster"
4036

41-
info, err := client.AccountInfo(ctx)
37+
req, err := http.NewRequest(http.MethodGet, u.String(), nil)
38+
if err != nil {
39+
panic(err)
40+
}
4241

43-
// We couldn't retrieve admin information, default to true for legacy reasons
44-
// TODO: Revert to false after August 15th 2021
42+
clnt := GetConsoleHTTPClient()
43+
resp, err := clnt.Do(req)
4544
if err != nil {
46-
return true
45+
panic(err)
4746
}
4847

49-
backendInfo := info.Server
48+
if resp.StatusCode != http.StatusOK {
49+
return false
50+
}
5051

51-
return backendInfo.Type == madmin.Erasure
52+
return resp.Header.Get("x-minio-write-quorum") != ""
5253
}
5354

5455
func registerSessionHandlers(api *operations.ConsoleAPI) {
@@ -74,7 +75,7 @@ func getSessionResponse(session *models.Principal) (*models.SessionResponse, *mo
7475
Features: getListOfEnabledFeatures(),
7576
Status: models.SessionResponseStatusOk,
7677
Operator: false,
77-
DistributedMode: validateDistributedMode(session),
78+
DistributedMode: isErasureMode(),
7879
}
7980
return sessionResp, nil
8081
}

0 commit comments

Comments
 (0)