mirror of
https://github.com/minio/minio.git
synced 2025-11-07 21:02:58 -05:00
Convert more peer <--> peer REST calls (#19004)
* Convert more peer <--> peer REST calls * Clean up in general. * Add JSON wrapper. * Add slice wrapper. * Add option to make handler return nil error if no connection is given, `IgnoreNilConn`. Converts the following: ``` + HandlerGetMetrics + HandlerGetResourceMetrics + HandlerGetMemInfo + HandlerGetProcInfo + HandlerGetOSInfo + HandlerGetPartitions + HandlerGetNetInfo + HandlerGetCPUs + HandlerServerInfo + HandlerGetSysConfig + HandlerGetSysServices + HandlerGetSysErrors + HandlerGetAllBucketStats + HandlerGetBucketStats + HandlerGetSRMetrics + HandlerGetPeerMetrics + HandlerGetMetacacheListing + HandlerUpdateMetacacheListing + HandlerGetPeerBucketMetrics + HandlerStorageInfo + HandlerGetLocks + HandlerBackgroundHealStatus + HandlerGetLastDayTierStats + HandlerSignalService + HandlerGetBandwidth ```
This commit is contained in:
@@ -36,6 +36,7 @@ import (
|
||||
// HandlerID is a handler identifier.
|
||||
// It is used to determine request routing on the server.
|
||||
// Handlers can be registered with a static subroute.
|
||||
// Do NOT remove or change the order of existing handlers.
|
||||
const (
|
||||
// handlerInvalid is reserved to check for uninitialized values.
|
||||
handlerInvalid HandlerID = iota
|
||||
@@ -69,7 +70,6 @@ const (
|
||||
HandlerStopRebalance
|
||||
HandlerLoadRebalanceMeta
|
||||
HandlerLoadTransitionTierConfig
|
||||
|
||||
HandlerDeletePolicy
|
||||
HandlerLoadPolicy
|
||||
HandlerLoadPolicyMapping
|
||||
@@ -78,11 +78,37 @@ const (
|
||||
HandlerDeleteUser
|
||||
HandlerLoadUser
|
||||
HandlerLoadGroup
|
||||
|
||||
HandlerHealBucket
|
||||
HandlerMakeBucket
|
||||
HandlerHeadBucket
|
||||
HandlerDeleteBucket
|
||||
HandlerGetMetrics
|
||||
HandlerGetResourceMetrics
|
||||
HandlerGetMemInfo
|
||||
HandlerGetProcInfo
|
||||
HandlerGetOSInfo
|
||||
HandlerGetPartitions
|
||||
HandlerGetNetInfo
|
||||
HandlerGetCPUs
|
||||
HandlerServerInfo
|
||||
HandlerGetSysConfig
|
||||
HandlerGetSysServices
|
||||
HandlerGetSysErrors
|
||||
HandlerGetAllBucketStats
|
||||
HandlerGetBucketStats
|
||||
HandlerGetSRMetrics
|
||||
HandlerGetPeerMetrics
|
||||
HandlerGetMetacacheListing
|
||||
HandlerUpdateMetacacheListing
|
||||
HandlerGetPeerBucketMetrics
|
||||
HandlerStorageInfo
|
||||
HandlerConsoleLog
|
||||
HandlerListDir
|
||||
HandlerGetLocks
|
||||
HandlerBackgroundHealStatus
|
||||
HandlerGetLastDayTierStats
|
||||
HandlerSignalService
|
||||
HandlerGetBandwidth
|
||||
|
||||
// Add more above here ^^^
|
||||
// If all handlers are used, the type of Handler can be changed.
|
||||
@@ -137,6 +163,28 @@ var handlerPrefixes = [handlerLast]string{
|
||||
HandlerHeadBucket: peerPrefixS3,
|
||||
HandlerDeleteBucket: peerPrefixS3,
|
||||
HandlerHealBucket: healPrefix,
|
||||
HandlerGetMetrics: peerPrefix,
|
||||
HandlerGetResourceMetrics: peerPrefix,
|
||||
HandlerGetMemInfo: peerPrefix,
|
||||
HandlerGetProcInfo: peerPrefix,
|
||||
HandlerGetOSInfo: peerPrefix,
|
||||
HandlerGetPartitions: peerPrefix,
|
||||
HandlerGetNetInfo: peerPrefix,
|
||||
HandlerGetCPUs: peerPrefix,
|
||||
HandlerServerInfo: peerPrefix,
|
||||
HandlerGetSysConfig: peerPrefix,
|
||||
HandlerGetSysServices: peerPrefix,
|
||||
HandlerGetSysErrors: peerPrefix,
|
||||
HandlerGetAllBucketStats: peerPrefix,
|
||||
HandlerGetBucketStats: peerPrefix,
|
||||
HandlerGetSRMetrics: peerPrefix,
|
||||
HandlerGetPeerMetrics: peerPrefix,
|
||||
HandlerGetMetacacheListing: peerPrefix,
|
||||
HandlerUpdateMetacacheListing: peerPrefix,
|
||||
HandlerGetPeerBucketMetrics: peerPrefix,
|
||||
HandlerStorageInfo: peerPrefix,
|
||||
HandlerConsoleLog: peerPrefix,
|
||||
HandlerListDir: storagePrefix,
|
||||
}
|
||||
|
||||
const (
|
||||
@@ -344,9 +392,10 @@ type RoundTripper interface {
|
||||
|
||||
// SingleHandler is a type safe handler for single roundtrip requests.
|
||||
type SingleHandler[Req, Resp RoundTripper] struct {
|
||||
id HandlerID
|
||||
sharedResp bool
|
||||
callReuseReq bool
|
||||
id HandlerID
|
||||
sharedResp bool
|
||||
callReuseReq bool
|
||||
ignoreNilConn bool
|
||||
|
||||
newReq func() Req
|
||||
newResp func() Resp
|
||||
@@ -407,6 +456,17 @@ func (h *SingleHandler[Req, Resp]) AllowCallRequestPool(b bool) *SingleHandler[R
|
||||
return h
|
||||
}
|
||||
|
||||
// IgnoreNilConn will ignore nil connections when calling.
|
||||
// This will make Call return nil instead of ErrDisconnected when the connection is nil.
|
||||
// This may only be set ONCE before use.
|
||||
func (h *SingleHandler[Req, Resp]) IgnoreNilConn() *SingleHandler[Req, Resp] {
|
||||
if h.ignoreNilConn {
|
||||
logger.LogOnceIf(context.Background(), fmt.Errorf("%s: IgnoreNilConn called twice", h.id.String()), h.id.String()+"IgnoreNilConn")
|
||||
}
|
||||
h.ignoreNilConn = true
|
||||
return h
|
||||
}
|
||||
|
||||
// WithSharedResponse indicates it is unsafe to reuse the response
|
||||
// when it has been returned on a handler.
|
||||
// This will disable automatic response recycling/pooling.
|
||||
@@ -476,6 +536,12 @@ type Requester interface {
|
||||
// The response should be returned with PutResponse when no error.
|
||||
// If no deadline is set, a 1-minute deadline is added.
|
||||
func (h *SingleHandler[Req, Resp]) Call(ctx context.Context, c Requester, req Req) (resp Resp, err error) {
|
||||
if c == nil {
|
||||
if h.ignoreNilConn {
|
||||
return resp, nil
|
||||
}
|
||||
return resp, ErrDisconnected
|
||||
}
|
||||
payload, err := req.MarshalMsg(GetByteBuffer()[:0])
|
||||
if err != nil {
|
||||
return resp, err
|
||||
@@ -777,6 +843,9 @@ type Streamer interface {
|
||||
|
||||
// Call the remove with the request and
|
||||
func (h *StreamTypeHandler[Payload, Req, Resp]) Call(ctx context.Context, c Streamer, payload Payload) (st *TypedStream[Req, Resp], err error) {
|
||||
if c == nil {
|
||||
return nil, ErrDisconnected
|
||||
}
|
||||
var payloadB []byte
|
||||
if h.WithPayload {
|
||||
var err error
|
||||
|
||||
Reference in New Issue
Block a user