mirror of
https://github.com/minio/minio.git
synced 2024-12-24 06:05:55 -05:00
storage: Implement GetDiskID request in REST server side (#9720)
GetDiskID() in storage rest client does not really issue a REST request to the remote disk, but returns an in-memory value instead. However, GetDiskID() should return an error when format.json is not found or for other similar issues (unmounted disks, etc..) GetDiskID() is only called when formatting disks and getting storage informatio, hence this commit should not have a performance degradation.
This commit is contained in:
parent
661068d1a2
commit
375b79f11b
@ -31,7 +31,7 @@ type StorageAPI interface {
|
||||
IsLocal() bool
|
||||
Hostname() string // Returns host name if remote host.
|
||||
Close() error
|
||||
GetDiskID() (string, error)
|
||||
GetDiskID() (string, error) // Could be expensive
|
||||
SetDiskID(id string)
|
||||
|
||||
DiskInfo() (info DiskInfo, err error)
|
||||
|
@ -177,7 +177,19 @@ func (client *storageRESTClient) CrawlAndGetDataUsage(ctx context.Context, cache
|
||||
}
|
||||
|
||||
func (client *storageRESTClient) GetDiskID() (string, error) {
|
||||
return client.diskID, nil
|
||||
respBody, err := client.call(storageRESTMethodGetDiskID, nil, nil, -1)
|
||||
if err != nil {
|
||||
// Ignore when other nodes does not support GetDiskID call, this check
|
||||
// can be removed when the storage API version is bumped.
|
||||
if strings.Contains(err.Error(), "404 page not found") {
|
||||
return client.diskID, nil
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
defer http.DrainBody(respBody)
|
||||
var s string
|
||||
err = gob.NewDecoder(respBody).Decode(&s)
|
||||
return s, err
|
||||
}
|
||||
|
||||
func (client *storageRESTClient) SetDiskID(id string) {
|
||||
|
@ -24,6 +24,7 @@ const (
|
||||
|
||||
const (
|
||||
storageRESTMethodDiskInfo = "/diskinfo"
|
||||
storageRESTMethodGetDiskID = "/getdiskid"
|
||||
storageRESTMethodCrawlAndGetDataUsage = "/crawlandgetdatausage"
|
||||
storageRESTMethodMakeVol = "/makevol"
|
||||
storageRESTMethodMakeVolBulk = "/makevolbulk"
|
||||
|
@ -132,6 +132,22 @@ func (s *storageRESTServer) DiskInfoHandler(w http.ResponseWriter, r *http.Reque
|
||||
gob.NewEncoder(w).Encode(info)
|
||||
}
|
||||
|
||||
// GetDiskIDHandler - returns disk id.
|
||||
func (s *storageRESTServer) GetDiskIDHandler(w http.ResponseWriter, r *http.Request) {
|
||||
if err := storageServerRequestValidate(r); err != nil {
|
||||
s.writeErrorResponse(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
info, err := s.storage.GetDiskID()
|
||||
if err != nil {
|
||||
s.writeErrorResponse(w, err)
|
||||
return
|
||||
}
|
||||
defer w.(http.Flusher).Flush()
|
||||
gob.NewEncoder(w).Encode(info)
|
||||
}
|
||||
|
||||
func (s *storageRESTServer) CrawlAndGetDataUsageHandler(w http.ResponseWriter, r *http.Request) {
|
||||
if !s.IsValid(w, r) {
|
||||
return
|
||||
@ -784,6 +800,7 @@ func registerStorageRESTHandlers(router *mux.Router, endpointZones EndpointZones
|
||||
subrouter := router.PathPrefix(path.Join(storageRESTPrefix, endpoint.Path)).Subrouter()
|
||||
|
||||
subrouter.Methods(http.MethodPost).Path(storageRESTVersionPrefix + storageRESTMethodDiskInfo).HandlerFunc(httpTraceHdrs(server.DiskInfoHandler))
|
||||
subrouter.Methods(http.MethodPost).Path(storageRESTVersionPrefix + storageRESTMethodGetDiskID).HandlerFunc(httpTraceHdrs(server.GetDiskIDHandler))
|
||||
subrouter.Methods(http.MethodPost).Path(storageRESTVersionPrefix + storageRESTMethodCrawlAndGetDataUsage).HandlerFunc(httpTraceHdrs(server.CrawlAndGetDataUsageHandler))
|
||||
subrouter.Methods(http.MethodPost).Path(storageRESTVersionPrefix + storageRESTMethodMakeVol).HandlerFunc(httpTraceHdrs(server.MakeVolHandler)).Queries(restQueries(storageRESTVolume)...)
|
||||
subrouter.Methods(http.MethodPost).Path(storageRESTVersionPrefix + storageRESTMethodMakeVolBulk).HandlerFunc(httpTraceHdrs(server.MakeVolBulkHandler)).Queries(restQueries(storageRESTVolumes)...)
|
||||
|
Loading…
Reference in New Issue
Block a user