mirror of
				https://github.com/minio/minio.git
				synced 2025-10-29 15:55:00 -04:00 
			
		
		
		
	progressively report obd results (#9639)
This commit is contained in:
		
							parent
							
								
									43c19a6b82
								
							
						
					
					
						commit
						c121d27f31
					
				| @ -1252,17 +1252,28 @@ func (a adminAPIHandlers) OBDInfoHandler(w http.ResponseWriter, r *http.Request) | |||||||
| 				Error:    errStr, | 				Error:    errStr, | ||||||
| 			} | 			} | ||||||
| 			obdInfo.Perf.DriveInfo = append(obdInfo.Perf.DriveInfo, driveOBD) | 			obdInfo.Perf.DriveInfo = append(obdInfo.Perf.DriveInfo, driveOBD) | ||||||
|  | 			partialWrite(obdInfo) | ||||||
| 
 | 
 | ||||||
| 			// Notify all other MinIO peers to report drive obd numbers | 			// Notify all other MinIO peers to report drive obd numbers | ||||||
| 			driveOBDs := globalNotificationSys.DriveOBDInfo(deadlinedCtx) | 			driveOBDs := globalNotificationSys.DriveOBDInfoChan(deadlinedCtx) | ||||||
| 			obdInfo.Perf.DriveInfo = append(obdInfo.Perf.DriveInfo, driveOBDs...) | 			for obd := range driveOBDs { | ||||||
| 
 | 				obdInfo.Perf.DriveInfo = append(obdInfo.Perf.DriveInfo, obd) | ||||||
|  | 				partialWrite(obdInfo) | ||||||
|  | 			} | ||||||
| 			partialWrite(obdInfo) | 			partialWrite(obdInfo) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if net, ok := vars["perfnet"]; ok && net == "true" && globalIsDistXL { | 		if net, ok := vars["perfnet"]; ok && net == "true" && globalIsDistXL { | ||||||
| 			obdInfo.Perf.Net = append(obdInfo.Perf.Net, globalNotificationSys.NetOBDInfo(deadlinedCtx)) | 			obdInfo.Perf.Net = append(obdInfo.Perf.Net, globalNotificationSys.NetOBDInfo(deadlinedCtx)) | ||||||
| 			obdInfo.Perf.Net = append(obdInfo.Perf.Net, globalNotificationSys.DispatchNetOBDInfo(deadlinedCtx)...) | 			partialWrite(obdInfo) | ||||||
|  | 
 | ||||||
|  | 			netOBDs := globalNotificationSys.DispatchNetOBDChan(deadlinedCtx) | ||||||
|  | 			for obd := range netOBDs { | ||||||
|  | 				obdInfo.Perf.Net = append(obdInfo.Perf.Net, obd) | ||||||
|  | 				partialWrite(obdInfo) | ||||||
|  | 			} | ||||||
|  | 			partialWrite(obdInfo) | ||||||
|  | 
 | ||||||
| 			obdInfo.Perf.NetParallel = globalNotificationSys.NetOBDParallelInfo(deadlinedCtx) | 			obdInfo.Perf.NetParallel = globalNotificationSys.NetOBDParallelInfo(deadlinedCtx) | ||||||
| 			partialWrite(obdInfo) | 			partialWrite(obdInfo) | ||||||
| 		} | 		} | ||||||
|  | |||||||
| @ -864,6 +864,35 @@ func (sys *NotificationSys) DispatchNetOBDInfo(ctx context.Context) []madmin.Ser | |||||||
| 	return serverNetOBDs | 	return serverNetOBDs | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // DispatchNetOBDChan - Net OBD information from other nodes | ||||||
|  | func (sys *NotificationSys) DispatchNetOBDChan(ctx context.Context) chan madmin.ServerNetOBDInfo { | ||||||
|  | 	serverNetOBDs := make(chan madmin.ServerNetOBDInfo) | ||||||
|  | 	wg := sync.WaitGroup{} | ||||||
|  | 
 | ||||||
|  | 	wg.Add(1) | ||||||
|  | 	go func() { | ||||||
|  | 		for _, client := range sys.peerClients { | ||||||
|  | 			if client == nil { | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			serverNetOBD, err := client.DispatchNetOBDInfo(ctx) | ||||||
|  | 			if err != nil { | ||||||
|  | 				serverNetOBD.Addr = client.host.String() | ||||||
|  | 				serverNetOBD.Error = err.Error() | ||||||
|  | 			} | ||||||
|  | 			serverNetOBDs <- serverNetOBD | ||||||
|  | 		} | ||||||
|  | 		wg.Done() | ||||||
|  | 	}() | ||||||
|  | 
 | ||||||
|  | 	go func() { | ||||||
|  | 		wg.Wait() | ||||||
|  | 		close(serverNetOBDs) | ||||||
|  | 	}() | ||||||
|  | 
 | ||||||
|  | 	return serverNetOBDs | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // NetOBDParallelInfo - Performs NetOBD tests | // NetOBDParallelInfo - Performs NetOBD tests | ||||||
| func (sys *NotificationSys) NetOBDParallelInfo(ctx context.Context) madmin.ServerNetOBDInfo { | func (sys *NotificationSys) NetOBDParallelInfo(ctx context.Context) madmin.ServerNetOBDInfo { | ||||||
| 	netOBDs := []madmin.NetOBDInfo{} | 	netOBDs := []madmin.NetOBDInfo{} | ||||||
| @ -923,6 +952,42 @@ func (sys *NotificationSys) DriveOBDInfo(ctx context.Context) []madmin.ServerDri | |||||||
| 	return reply | 	return reply | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // DriveOBDInfoChan - Drive OBD information | ||||||
|  | func (sys *NotificationSys) DriveOBDInfoChan(ctx context.Context) chan madmin.ServerDrivesOBDInfo { | ||||||
|  | 	updateChan := make(chan madmin.ServerDrivesOBDInfo) | ||||||
|  | 	wg := sync.WaitGroup{} | ||||||
|  | 
 | ||||||
|  | 	for _, client := range sys.peerClients { | ||||||
|  | 		if client == nil { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		wg.Add(1) | ||||||
|  | 		go func(client *peerRESTClient) { | ||||||
|  | 			reply, err := client.DriveOBDInfo(ctx) | ||||||
|  | 
 | ||||||
|  | 			addr := client.host.String() | ||||||
|  | 			reqInfo := (&logger.ReqInfo{}).AppendTags("remotePeer", addr) | ||||||
|  | 			ctx := logger.SetReqInfo(GlobalContext, reqInfo) | ||||||
|  | 			logger.LogIf(ctx, err) | ||||||
|  | 
 | ||||||
|  | 			reply.Addr = addr | ||||||
|  | 			if err != nil { | ||||||
|  | 				reply.Error = err.Error() | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			updateChan <- reply | ||||||
|  | 			wg.Done() | ||||||
|  | 		}(client) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	go func() { | ||||||
|  | 		wg.Wait() | ||||||
|  | 		close(updateChan) | ||||||
|  | 	}() | ||||||
|  | 
 | ||||||
|  | 	return updateChan | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // CPUOBDInfo - CPU OBD information | // CPUOBDInfo - CPU OBD information | ||||||
| func (sys *NotificationSys) CPUOBDInfo(ctx context.Context) []madmin.ServerCPUOBDInfo { | func (sys *NotificationSys) CPUOBDInfo(ctx context.Context) []madmin.ServerCPUOBDInfo { | ||||||
| 	reply := make([]madmin.ServerCPUOBDInfo, len(sys.peerClients)) | 	reply := make([]madmin.ServerCPUOBDInfo, len(sys.peerClients)) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user