fix: add 20s timeout to driver.Status()
							parent
							
								
									12f5db0553
								
							
						
					
					
						commit
						61b69e13f8
					
				| 
						 | 
					@ -23,6 +23,7 @@ import (
 | 
				
			||||||
	"sort"
 | 
						"sort"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"golang.org/x/text/cases"
 | 
						"golang.org/x/text/cases"
 | 
				
			||||||
	"golang.org/x/text/language"
 | 
						"golang.org/x/text/language"
 | 
				
			||||||
| 
						 | 
					@ -354,12 +355,25 @@ func Suggest(options []registry.DriverState) (registry.DriverState, []registry.D
 | 
				
			||||||
// Status returns the status of a driver
 | 
					// Status returns the status of a driver
 | 
				
			||||||
func Status(name string) registry.DriverState {
 | 
					func Status(name string) registry.DriverState {
 | 
				
			||||||
	d := registry.Driver(name)
 | 
						d := registry.Driver(name)
 | 
				
			||||||
	return registry.DriverState{
 | 
						stateChannel := make(chan registry.State)
 | 
				
			||||||
		Name:     d.Name,
 | 
						timeoutChannel := time.After(20 * time.Second)
 | 
				
			||||||
		Default:  d.Default,
 | 
						go func() {
 | 
				
			||||||
		Priority: d.Priority,
 | 
							stateChannel <- registry.Status(name)
 | 
				
			||||||
		State:    registry.Status(name),
 | 
						}()
 | 
				
			||||||
 | 
						select {
 | 
				
			||||||
 | 
						case s := <-stateChannel:
 | 
				
			||||||
 | 
							return registry.DriverState{
 | 
				
			||||||
 | 
								Name:     d.Name,
 | 
				
			||||||
 | 
								Default:  d.Default,
 | 
				
			||||||
 | 
								Priority: d.Priority,
 | 
				
			||||||
 | 
								State:    s,
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						case <-timeoutChannel:
 | 
				
			||||||
 | 
							klog.Infof("time out when checking for status of %s driver", name)
 | 
				
			||||||
 | 
							return registry.DriverState{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// IsAlias checks if an alias belongs to provided driver by name.
 | 
					// IsAlias checks if an alias belongs to provided driver by name.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,6 +20,7 @@ import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"sort"
 | 
						"sort"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/klog/v2"
 | 
						"k8s.io/klog/v2"
 | 
				
			||||||
	"k8s.io/minikube/pkg/minikube/translate"
 | 
						"k8s.io/minikube/pkg/minikube/translate"
 | 
				
			||||||
| 
						 | 
					@ -118,7 +119,17 @@ func Available(vm bool) []DriverState {
 | 
				
			||||||
			klog.Errorf("%q does not implement Status", d.Name)
 | 
								klog.Errorf("%q does not implement Status", d.Name)
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		s := d.Status()
 | 
							stateChannel := make(chan State)
 | 
				
			||||||
 | 
							timeoutChannel := time.After(20 * time.Second)
 | 
				
			||||||
 | 
							go func() {
 | 
				
			||||||
 | 
								stateChannel <- d.Status()
 | 
				
			||||||
 | 
							}()
 | 
				
			||||||
 | 
							s := State{}
 | 
				
			||||||
 | 
							select {
 | 
				
			||||||
 | 
							case <-timeoutChannel:
 | 
				
			||||||
 | 
								klog.Infof("%s status check timeout!", d.Name)
 | 
				
			||||||
 | 
							case s = <-stateChannel:
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		klog.Infof("%s default: %v priority: %d, state: %+v", d.Name, d.Default, d.Priority, s)
 | 
							klog.Infof("%s default: %v priority: %d, state: %+v", d.Name, d.Default, d.Priority, s)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		preference := d.Priority
 | 
							preference := d.Priority
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue