зеркало из https://github.com/microsoft/docker.git
Merge pull request #18752 from cpuguy83/fix_broken_pipe_error_on_download_abrt
Don't log EPIPE errors on client download abort
This commit is contained in:
Коммит
b4e26a96da
|
@ -10,11 +10,13 @@ import (
|
|||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
"sync"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
|
@ -1032,7 +1034,12 @@ func writeDistributionProgress(cancelFunc func(), outStream io.Writer, progressC
|
|||
|
||||
for prog := range progressChan {
|
||||
if err := progressOutput.WriteProgress(prog); err != nil && !operationCancelled {
|
||||
logrus.Errorf("error writing progress to client: %v", err)
|
||||
// don't log broken pipe errors as this is the normal case when a client aborts
|
||||
if isBrokenPipe(err) {
|
||||
logrus.Info("Pull session cancelled")
|
||||
} else {
|
||||
logrus.Errorf("error writing progress to client: %v", err)
|
||||
}
|
||||
cancelFunc()
|
||||
operationCancelled = true
|
||||
// Don't return, because we need to continue draining
|
||||
|
@ -1041,6 +1048,16 @@ func writeDistributionProgress(cancelFunc func(), outStream io.Writer, progressC
|
|||
}
|
||||
}
|
||||
|
||||
func isBrokenPipe(e error) bool {
|
||||
if netErr, ok := e.(*net.OpError); ok {
|
||||
e = netErr.Err
|
||||
if sysErr, ok := netErr.Err.(*os.SyscallError); ok {
|
||||
e = sysErr.Err
|
||||
}
|
||||
}
|
||||
return e == syscall.EPIPE
|
||||
}
|
||||
|
||||
// PullImage initiates a pull operation. image is the repository name to pull, and
|
||||
// tag may be either empty, or indicate a specific tag to pull.
|
||||
func (daemon *Daemon) PullImage(ref reference.Named, metaHeaders map[string][]string, authConfig *types.AuthConfig, outStream io.Writer) error {
|
||||
|
|
Загрузка…
Ссылка в новой задаче