| package timeout | |
| import ( | |
| "os" | |
| "strconv" | |
| "time" | |
| ) | |
| var ( | |
| // defaultTimeout is the timeout for most operations that is not overridden. | |
| defaultTimeout = 4 * time.Minute | |
| // defaultTimeoutTestdRetry is the retry loop timeout for testd to respond | |
| // for a disk to come online in LCOW. | |
| defaultTimeoutTestdRetry = 5 * time.Second | |
| ) | |
| // External variables for HCSShim consumers to use. | |
| var ( | |
| // SystemCreate is the timeout for creating a compute system | |
| SystemCreate time.Duration = defaultTimeout | |
| // SystemStart is the timeout for starting a compute system | |
| SystemStart time.Duration = defaultTimeout | |
| // SystemPause is the timeout for pausing a compute system | |
| SystemPause time.Duration = defaultTimeout | |
| // SystemResume is the timeout for resuming a compute system | |
| SystemResume time.Duration = defaultTimeout | |
| // SystemSave is the timeout for saving a compute system | |
| SystemSave time.Duration = defaultTimeout | |
| // SyscallWatcher is the timeout before warning of a potential stuck platform syscall. | |
| SyscallWatcher time.Duration = defaultTimeout | |
| // Tar2VHD is the timeout for the tar2vhd operation to complete | |
| Tar2VHD time.Duration = defaultTimeout | |
| // ExternalCommandToStart is the timeout for external commands to start | |
| ExternalCommandToStart = defaultTimeout | |
| // ExternalCommandToComplete is the timeout for external commands to complete. | |
| // Generally this means copying data from their stdio pipes. | |
| ExternalCommandToComplete = defaultTimeout | |
| // TestDRetryLoop is the timeout for testd retry loop when onlining a SCSI disk in LCOW | |
| TestDRetryLoop = defaultTimeoutTestdRetry | |
| ) | |
| func init() { | |
| SystemCreate = durationFromEnvironment("HCSSHIM_TIMEOUT_SYSTEMCREATE", SystemCreate) | |
| SystemStart = durationFromEnvironment("HCSSHIM_TIMEOUT_SYSTEMSTART", SystemStart) | |
| SystemPause = durationFromEnvironment("HCSSHIM_TIMEOUT_SYSTEMPAUSE", SystemPause) | |
| SystemResume = durationFromEnvironment("HCSSHIM_TIMEOUT_SYSTEMRESUME", SystemResume) | |
| SystemSave = durationFromEnvironment("HCSSHIM_TIMEOUT_SYSTEMSAVE", SystemSave) | |
| SyscallWatcher = durationFromEnvironment("HCSSHIM_TIMEOUT_SYSCALLWATCHER", SyscallWatcher) | |
| Tar2VHD = durationFromEnvironment("HCSSHIM_TIMEOUT_TAR2VHD", Tar2VHD) | |
| ExternalCommandToStart = durationFromEnvironment("HCSSHIM_TIMEOUT_EXTERNALCOMMANDSTART", ExternalCommandToStart) | |
| ExternalCommandToComplete = durationFromEnvironment("HCSSHIM_TIMEOUT_EXTERNALCOMMANDCOMPLETE", ExternalCommandToComplete) | |
| TestDRetryLoop = durationFromEnvironment("HCSSHIM_TIMEOUT_TESTDRETRYLOOP", TestDRetryLoop) | |
| } | |
| func durationFromEnvironment(env string, defaultValue time.Duration) time.Duration { | |
| envTimeout := os.Getenv(env) | |
| if len(envTimeout) > 0 { | |
| e, err := strconv.Atoi(envTimeout) | |
| if err == nil && e > 0 { | |
| return time.Second * time.Duration(e) | |
| } | |
| } | |
| return defaultValue | |
| } |