mirror of
				https://github.com/minio/minio.git
				synced 2025-10-30 00:05:02 -04:00 
			
		
		
		
	Add remote Diskinfo caching (#10824)
Add 1 second remote disk info cache. Should decrease need for remote calls a great deal due to how actively it is used now.
This commit is contained in:
		
							parent
							
								
									5c72a34fa8
								
							
						
					
					
						commit
						1e11b4629f
					
				| @ -28,6 +28,7 @@ import ( | ||||
| 	"path" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/minio/minio/cmd/http" | ||||
| 	xhttp "github.com/minio/minio/cmd/http" | ||||
| @ -115,6 +116,8 @@ type storageRESTClient struct { | ||||
| 	endpoint   Endpoint | ||||
| 	restClient *rest.Client | ||||
| 	diskID     string | ||||
| 
 | ||||
| 	diskInfoCache timedValue | ||||
| } | ||||
| 
 | ||||
| // Wrapper to restClient.Call to handle network errors, in case of network error the connection is makred disconnected | ||||
| @ -195,9 +198,13 @@ func (client *storageRESTClient) SetDiskID(id string) { | ||||
| 
 | ||||
| // DiskInfo - fetch disk information for a remote disk. | ||||
| func (client *storageRESTClient) DiskInfo(ctx context.Context) (info DiskInfo, err error) { | ||||
| 	client.diskInfoCache.Once.Do(func() { | ||||
| 		client.diskInfoCache.TTL = time.Second | ||||
| 		client.diskInfoCache.Update = func() (interface{}, error) { | ||||
| 			var info DiskInfo | ||||
| 			respBody, err := client.call(ctx, storageRESTMethodDiskInfo, nil, nil, -1) | ||||
| 			if err != nil { | ||||
| 		return | ||||
| 				return info, err | ||||
| 			} | ||||
| 			defer http.DrainBody(respBody) | ||||
| 			err = gob.NewDecoder(respBody).Decode(&info) | ||||
| @ -208,6 +215,11 @@ func (client *storageRESTClient) DiskInfo(ctx context.Context) (info DiskInfo, e | ||||
| 				return info, toStorageErr(errors.New(info.Error)) | ||||
| 			} | ||||
| 			return info, nil | ||||
| 		} | ||||
| 	}) | ||||
| 	v, err := client.diskInfoCache.Get() | ||||
| 	info = v.(DiskInfo) | ||||
| 	return info, err | ||||
| } | ||||
| 
 | ||||
| // MakeVolBulk - create multiple volumes in a bulk operation. | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user