2018-09-05 14:54:38 -04:00
|
|
|
package timeout
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
"strconv"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
2018-09-26 06:54:23 -04:00
|
|
|
var (
|
|
|
|
// defaultTimeout is the timeout for most operations that is not overridden.
|
|
|
|
defaultTimeout = 4 * time.Minute
|
2018-09-05 14:54:38 -04:00
|
|
|
|
2018-09-26 06:54:23 -04:00
|
|
|
// 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
|
|
|
|
|
|
|
|
// 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
|
|
|
|
)
|
2018-09-05 14:54:38 -04:00
|
|
|
|
|
|
|
func init() {
|
2018-09-26 06:54:23 -04:00
|
|
|
SystemCreate = durationFromEnvironment("HCSSHIM_TIMEOUT_SYSTEMCREATE", SystemCreate)
|
|
|
|
SystemStart = durationFromEnvironment("HCSSHIM_TIMEOUT_SYSTEMSTART", SystemStart)
|
|
|
|
SystemPause = durationFromEnvironment("HCSSHIM_TIMEOUT_SYSTEMPAUSE", SystemPause)
|
|
|
|
SystemResume = durationFromEnvironment("HCSSHIM_TIMEOUT_SYSTEMRESUME", SystemResume)
|
|
|
|
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)
|
2018-09-05 14:54:38 -04:00
|
|
|
if len(envTimeout) > 0 {
|
|
|
|
e, err := strconv.Atoi(envTimeout)
|
|
|
|
if err == nil && e > 0 {
|
2018-09-26 06:54:23 -04:00
|
|
|
return time.Second * time.Duration(e)
|
2018-09-05 14:54:38 -04:00
|
|
|
}
|
|
|
|
}
|
2018-09-26 06:54:23 -04:00
|
|
|
return defaultValue
|
2018-09-05 14:54:38 -04:00
|
|
|
}
|