github.com/minio/minio@v0.0.0-20240328213742-3f72439b8a27/cmd/grid.go (about) 1 // Copyright (c) 2015-2023 MinIO, Inc. 2 // 3 // This file is part of MinIO Object Storage stack 4 // 5 // This program is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU Affero General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // This program is distributed in the hope that it will be useful 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU Affero General Public License for more details. 14 // 15 // You should have received a copy of the GNU Affero General Public License 16 // along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 package cmd 19 20 import ( 21 "context" 22 "crypto/tls" 23 "sync/atomic" 24 25 "github.com/minio/minio/internal/fips" 26 "github.com/minio/minio/internal/grid" 27 xhttp "github.com/minio/minio/internal/http" 28 "github.com/minio/minio/internal/rest" 29 ) 30 31 // globalGrid is the global grid manager. 32 var globalGrid atomic.Pointer[grid.Manager] 33 34 // globalGridStart is a channel that will block startup of grid connections until closed. 35 var globalGridStart = make(chan struct{}) 36 37 func initGlobalGrid(ctx context.Context, eps EndpointServerPools) error { 38 hosts, local := eps.GridHosts() 39 g, err := grid.NewManager(ctx, grid.ManagerOptions{ 40 Dialer: grid.ContextDialer(xhttp.DialContextWithLookupHost(globalDNSCache.LookupHost, xhttp.NewInternodeDialContext(rest.DefaultTimeout, globalTCPOptions))), 41 Local: local, 42 Hosts: hosts, 43 AddAuth: newCachedAuthToken(), 44 AuthRequest: storageServerRequestValidate, 45 BlockConnect: globalGridStart, 46 TLSConfig: &tls.Config{ 47 RootCAs: globalRootCAs, 48 CipherSuites: fips.TLSCiphers(), 49 CurvePreferences: fips.TLSCurveIDs(), 50 }, 51 // Record incoming and outgoing bytes. 52 Incoming: globalConnStats.incInternodeInputBytes, 53 Outgoing: globalConnStats.incInternodeOutputBytes, 54 TraceTo: globalTrace, 55 }) 56 if err != nil { 57 return err 58 } 59 globalGrid.Store(g) 60 return nil 61 }