Retry scp if failed
This commit is contained in:
parent
321fe0567a
commit
8922b3e548
@ -69,6 +69,10 @@ type System struct {
|
|||||||
|
|
||||||
Died bool
|
Died bool
|
||||||
sshAddrPort string
|
sshAddrPort string
|
||||||
|
SCP struct {
|
||||||
|
Retries int
|
||||||
|
RetryTimeout time.Duration
|
||||||
|
}
|
||||||
|
|
||||||
// accessible while qemu is running
|
// accessible while qemu is running
|
||||||
cmd *exec.Cmd
|
cmd *exec.Cmd
|
||||||
@ -112,6 +116,8 @@ func NewSystem(arch arch, kernel Kernel, drivePath string) (q *System, err error
|
|||||||
// Default values
|
// Default values
|
||||||
q.Cpus = 1
|
q.Cpus = 1
|
||||||
q.Memory = 512 // megabytes
|
q.Memory = 512 // megabytes
|
||||||
|
q.SCP.Retries = 16
|
||||||
|
q.SCP.RetryTimeout = time.Second
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -485,14 +491,28 @@ func (q System) scp(user, localPath, remotePath string, recursive bool) (err err
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (q System) scpWithRetry(user, localPath, remotePath string, recursive bool) (err error) {
|
||||||
|
for retries := q.SCP.Retries; retries > 0; retries-- {
|
||||||
|
err = q.scp(user, localPath, remotePath, recursive)
|
||||||
|
if err == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
q.log.Warn().Err(err).Msg("scp: failed")
|
||||||
|
time.Sleep(q.SCP.RetryTimeout)
|
||||||
|
q.log.Warn().Msgf("scp: %d retries left", retries)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// CopyFile from local machine to remote via scp
|
// CopyFile from local machine to remote via scp
|
||||||
func (q System) CopyFile(user, localPath, remotePath string) (err error) {
|
func (q System) CopyFile(user, localPath, remotePath string) (err error) {
|
||||||
return q.scp(user, localPath, remotePath, false)
|
return q.scpWithRetry(user, localPath, remotePath, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CopyDirectory from local machine to remote via scp
|
// CopyDirectory from local machine to remote via scp
|
||||||
func (q System) CopyDirectory(user, localPath, remotePath string) (err error) {
|
func (q System) CopyDirectory(user, localPath, remotePath string) (err error) {
|
||||||
return q.scp(user, localPath, remotePath, true)
|
return q.scpWithRetry(user, localPath, remotePath, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CopyAndInsmod copy kernel module to temporary file on qemu then insmod it
|
// CopyAndInsmod copy kernel module to temporary file on qemu then insmod it
|
||||||
|
Loading…
Reference in New Issue
Block a user