Merge pull request #29150 from vieux/cherry_28026
[1.12.x] a few cherry-picks
This commit is contained in:
commit
f966aae6ae
9 changed files with 73 additions and 51 deletions
|
@ -49,20 +49,23 @@ func GetHTTPErrorStatusCode(err error) int {
|
|||
// If we need to differentiate between different possible error types,
|
||||
// we should create appropriate error types that implement the httpStatusError interface.
|
||||
errStr := strings.ToLower(errMsg)
|
||||
for keyword, status := range map[string]int{
|
||||
"not found": http.StatusNotFound,
|
||||
"no such": http.StatusNotFound,
|
||||
"bad parameter": http.StatusBadRequest,
|
||||
"no command": http.StatusBadRequest,
|
||||
"conflict": http.StatusConflict,
|
||||
"impossible": http.StatusNotAcceptable,
|
||||
"wrong login/password": http.StatusUnauthorized,
|
||||
"unauthorized": http.StatusUnauthorized,
|
||||
"hasn't been activated": http.StatusForbidden,
|
||||
"this node": http.StatusNotAcceptable,
|
||||
for _, status := range []struct {
|
||||
keyword string
|
||||
code int
|
||||
}{
|
||||
{"not found", http.StatusNotFound},
|
||||
{"no such", http.StatusNotFound},
|
||||
{"bad parameter", http.StatusBadRequest},
|
||||
{"no command", http.StatusBadRequest},
|
||||
{"conflict", http.StatusConflict},
|
||||
{"impossible", http.StatusNotAcceptable},
|
||||
{"wrong login/password", http.StatusUnauthorized},
|
||||
{"unauthorized", http.StatusUnauthorized},
|
||||
{"hasn't been activated", http.StatusForbidden},
|
||||
{"this node", http.StatusNotAcceptable},
|
||||
} {
|
||||
if strings.Contains(errStr, keyword) {
|
||||
statusCode = status
|
||||
if strings.Contains(errStr, status.keyword) {
|
||||
statusCode = status.code
|
||||
break
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
FROM fedora:23
|
||||
|
||||
RUN dnf -y upgrade
|
||||
RUN dnf install -y @development-tools fedora-packager
|
||||
RUN dnf install -y btrfs-progs-devel device-mapper-devel glibc-static libseccomp-devel libselinux-devel libtool-ltdl-devel pkgconfig selinux-policy selinux-policy-devel sqlite-devel systemd-devel tar git
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
FROM fedora:24
|
||||
|
||||
RUN dnf -y upgrade
|
||||
RUN dnf install -y @development-tools fedora-packager
|
||||
RUN dnf install -y btrfs-progs-devel device-mapper-devel glibc-static libseccomp-devel libselinux-devel libtool-ltdl-devel pkgconfig selinux-policy selinux-policy-devel sqlite-devel systemd-devel tar git
|
||||
|
||||
|
|
|
@ -49,6 +49,9 @@ for version in "${versions[@]}"; do
|
|||
echo "RUN yum install -y kernel-uek-devel-4.1.12-32.el6uek" >> "$version/Dockerfile"
|
||||
echo >> "$version/Dockerfile"
|
||||
;;
|
||||
fedora:*)
|
||||
echo "RUN ${installer} -y upgrade" >> "$version/Dockerfile"
|
||||
;;
|
||||
*) ;;
|
||||
esac
|
||||
|
||||
|
|
|
@ -30,8 +30,8 @@ func (daemon *Daemon) ContainerStats(ctx context.Context, prefixOrName string, c
|
|||
return err
|
||||
}
|
||||
|
||||
// If the container is not running and requires no stream, return an empty stats.
|
||||
if !container.IsRunning() && !config.Stream {
|
||||
// If the container is either not running or restarting and requires no stream, return an empty stats.
|
||||
if (!container.IsRunning() || container.IsRestarting()) && !config.Stream {
|
||||
return json.NewEncoder(config.OutStream).Encode(&types.Stats{})
|
||||
}
|
||||
|
||||
|
|
|
@ -81,6 +81,7 @@ DEFAULT_BUNDLES=(
|
|||
)
|
||||
|
||||
VERSION=$(< ./VERSION)
|
||||
! BUILDTIME=$(date --rfc-3339 ns 2> /dev/null | sed -e 's/ /T/')
|
||||
if command -v git &> /dev/null && [ -d .git ] && git rev-parse &> /dev/null; then
|
||||
GITCOMMIT=$(git rev-parse --short HEAD)
|
||||
if [ -n "$(git status --porcelain --untracked-files=no)" ]; then
|
||||
|
@ -94,11 +95,6 @@ if command -v git &> /dev/null && [ -d .git ] && git rev-parse &> /dev/null; the
|
|||
git status --porcelain --untracked-files=no
|
||||
echo "#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
|
||||
fi
|
||||
! BUILDTIME=$(date --rfc-3339 ns 2> /dev/null | sed -e 's/ /T/') &> /dev/null
|
||||
if [ -z $BUILDTIME ]; then
|
||||
# If using bash 3.1 which doesn't support --rfc-3389, eg Windows CI
|
||||
BUILDTIME=$(date -u)
|
||||
fi
|
||||
elif [ "$DOCKER_GITCOMMIT" ]; then
|
||||
GITCOMMIT="$DOCKER_GITCOMMIT"
|
||||
else
|
||||
|
|
|
@ -61,7 +61,7 @@ clone git golang.org/x/sys eb2c74142fd19a79b3f237334c7384d5167b1b46 https://gith
|
|||
clone git github.com/docker/go-units 651fc226e7441360384da338d0fd37f2440ffbe3
|
||||
clone git github.com/docker/go-connections fa2850ff103453a9ad190da0df0af134f0314b3d
|
||||
clone git github.com/docker/engine-api 4eca04ae18f4f93f40196a17b9aa6e11262a7269
|
||||
clone git github.com/RackSec/srslog 365bf33cd9acc21ae1c355209865f17228ca534e
|
||||
clone git github.com/RackSec/srslog 456df3a81436d29ba874f3590eeeee25d666f8a5
|
||||
clone git github.com/imdario/mergo 0.2.1
|
||||
|
||||
#get libnetwork packages
|
||||
|
|
|
@ -77,10 +77,7 @@ func DialWithTLSConfig(network, raddr string, priority Priority, tag string, tls
|
|||
tlsConfig: tlsConfig,
|
||||
}
|
||||
|
||||
w.Lock()
|
||||
defer w.Unlock()
|
||||
|
||||
err := w.connect()
|
||||
_, err := w.connect()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
73
vendor/src/github.com/RackSec/srslog/writer.go
vendored
73
vendor/src/github.com/RackSec/srslog/writer.go
vendored
|
@ -8,8 +8,6 @@ import (
|
|||
|
||||
// A Writer is a connection to a syslog server.
|
||||
type Writer struct {
|
||||
sync.Mutex // guards conn
|
||||
|
||||
priority Priority
|
||||
tag string
|
||||
hostname string
|
||||
|
@ -19,28 +17,48 @@ type Writer struct {
|
|||
framer Framer
|
||||
formatter Formatter
|
||||
|
||||
mu sync.RWMutex // guards conn
|
||||
conn serverConn
|
||||
}
|
||||
|
||||
// getConn provides access to the internal conn, protected by a mutex. The
|
||||
// conn is threadsafe, so it can be used while unlocked, but we want to avoid
|
||||
// race conditions on grabbing a reference to it.
|
||||
func (w *Writer) getConn() serverConn {
|
||||
w.mu.RLock()
|
||||
conn := w.conn
|
||||
w.mu.RUnlock()
|
||||
return conn
|
||||
}
|
||||
|
||||
// setConn updates the internal conn, protected by a mutex.
|
||||
func (w *Writer) setConn(c serverConn) {
|
||||
w.mu.Lock()
|
||||
w.conn = c
|
||||
w.mu.Unlock()
|
||||
}
|
||||
|
||||
// connect makes a connection to the syslog server.
|
||||
// It must be called with w.mu held.
|
||||
func (w *Writer) connect() (err error) {
|
||||
if w.conn != nil {
|
||||
func (w *Writer) connect() (serverConn, error) {
|
||||
conn := w.getConn()
|
||||
if conn != nil {
|
||||
// ignore err from close, it makes sense to continue anyway
|
||||
w.conn.close()
|
||||
w.conn = nil
|
||||
conn.close()
|
||||
w.setConn(nil)
|
||||
}
|
||||
|
||||
var conn serverConn
|
||||
var hostname string
|
||||
var err error
|
||||
dialer := w.getDialer()
|
||||
conn, hostname, err = dialer.Call()
|
||||
if err == nil {
|
||||
w.conn = conn
|
||||
w.setConn(conn)
|
||||
w.hostname = hostname
|
||||
}
|
||||
|
||||
return
|
||||
return conn, nil
|
||||
} else {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// SetFormatter changes the formatter function for subsequent messages.
|
||||
|
@ -59,14 +77,17 @@ func (w *Writer) Write(b []byte) (int, error) {
|
|||
return w.writeAndRetry(w.priority, string(b))
|
||||
}
|
||||
|
||||
// WriteWithPriority sends a log message with a custom priority
|
||||
func (w *Writer) WriteWithPriority(p Priority, b []byte) (int, error) {
|
||||
return w.writeAndRetry(p, string(b))
|
||||
}
|
||||
|
||||
// Close closes a connection to the syslog daemon.
|
||||
func (w *Writer) Close() error {
|
||||
w.Lock()
|
||||
defer w.Unlock()
|
||||
|
||||
if w.conn != nil {
|
||||
err := w.conn.close()
|
||||
w.conn = nil
|
||||
conn := w.getConn()
|
||||
if conn != nil {
|
||||
err := conn.close()
|
||||
w.setConn(nil)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
@ -131,29 +152,29 @@ func (w *Writer) Debug(m string) (err error) {
|
|||
func (w *Writer) writeAndRetry(p Priority, s string) (int, error) {
|
||||
pr := (w.priority & facilityMask) | (p & severityMask)
|
||||
|
||||
w.Lock()
|
||||
defer w.Unlock()
|
||||
|
||||
if w.conn != nil {
|
||||
if n, err := w.write(pr, s); err == nil {
|
||||
conn := w.getConn()
|
||||
if conn != nil {
|
||||
if n, err := w.write(conn, pr, s); err == nil {
|
||||
return n, err
|
||||
}
|
||||
}
|
||||
if err := w.connect(); err != nil {
|
||||
|
||||
var err error
|
||||
if conn, err = w.connect(); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return w.write(pr, s)
|
||||
return w.write(conn, pr, s)
|
||||
}
|
||||
|
||||
// write generates and writes a syslog formatted string. It formats the
|
||||
// message based on the current Formatter and Framer.
|
||||
func (w *Writer) write(p Priority, msg string) (int, error) {
|
||||
func (w *Writer) write(conn serverConn, p Priority, msg string) (int, error) {
|
||||
// ensure it ends in a \n
|
||||
if !strings.HasSuffix(msg, "\n") {
|
||||
msg += "\n"
|
||||
}
|
||||
|
||||
err := w.conn.writeString(w.framer, w.formatter, p, w.hostname, w.tag, msg)
|
||||
err := conn.writeString(w.framer, w.formatter, p, w.hostname, w.tag, msg)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue