mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #9579 from gyuho/log-output-multiple-files
*: support output logs to multiple files
This commit is contained in:
commit
9c0c3cd606
@ -71,6 +71,9 @@ See [code changes](https://github.com/coreos/etcd/compare/v3.3.0...v3.4.0) and [
|
|||||||
- Previously, `Create(dirpath string, metadata []byte) (*WAL, error)`, now `Create(lg *zap.Logger, dirpath string, metadata []byte) (*WAL, error)`.
|
- Previously, `Create(dirpath string, metadata []byte) (*WAL, error)`, now `Create(lg *zap.Logger, dirpath string, metadata []byte) (*WAL, error)`.
|
||||||
- Remove [`embed.Config.SetupLogging`](https://github.com/coreos/etcd/pull/9572).
|
- Remove [`embed.Config.SetupLogging`](https://github.com/coreos/etcd/pull/9572).
|
||||||
- Now logger is set up automatically based on [`embed.Config.Logger`, `embed.Config.LogOutput`, `embed.Config.Debug` fields](https://github.com/coreos/etcd/pull/9572).
|
- Now logger is set up automatically based on [`embed.Config.Logger`, `embed.Config.LogOutput`, `embed.Config.Debug` fields](https://github.com/coreos/etcd/pull/9572).
|
||||||
|
- Change [`embed.Config.LogOutput` type from `string` to `[]string`](https://github.com/coreos/etcd/pull/9579) to support multiple log outputs.
|
||||||
|
- Now that `log-output` accepts multiple writers, etcd configuration YAML file `log-output` field must be changed to `[]string` type.
|
||||||
|
- Previously, `etcd.config.yaml` can have `log-output: default` field, now must be `log-output: [default]`.
|
||||||
- Remove [`pkg/cors` package](https://github.com/coreos/etcd/pull/9490).
|
- Remove [`pkg/cors` package](https://github.com/coreos/etcd/pull/9490).
|
||||||
- Move `"github.com/coreos/etcd/snap"` to [`"github.com/coreos/etcd/raftsnap"`](https://github.com/coreos/etcd/pull/9211).
|
- Move `"github.com/coreos/etcd/snap"` to [`"github.com/coreos/etcd/raftsnap"`](https://github.com/coreos/etcd/pull/9211).
|
||||||
- Move `"github.com/coreos/etcd/etcdserver/auth"` to [`"github.com/coreos/etcd/etcdserver/v2auth"`](https://github.com/coreos/etcd/pull/9275).
|
- Move `"github.com/coreos/etcd/etcdserver/auth"` to [`"github.com/coreos/etcd/etcdserver/v2auth"`](https://github.com/coreos/etcd/pull/9275).
|
||||||
@ -140,10 +143,11 @@ See [security doc](https://github.com/coreos/etcd/blob/master/Documentation/op-g
|
|||||||
- Add [`--logger`](https://github.com/coreos/etcd/pull/9572) flag to support [structured logger and logging to file](https://github.com/coreos/etcd/issues/9438) in server-side.
|
- Add [`--logger`](https://github.com/coreos/etcd/pull/9572) flag to support [structured logger and logging to file](https://github.com/coreos/etcd/issues/9438) in server-side.
|
||||||
- e.g. `--logger=capnslog --log-output=default` is the default setting and same as previous etcd server logging format.
|
- e.g. `--logger=capnslog --log-output=default` is the default setting and same as previous etcd server logging format.
|
||||||
- TODO: `--logger=zap` is experimental, and journald logging may not work when etcd runs as PID 1.
|
- TODO: `--logger=zap` is experimental, and journald logging may not work when etcd runs as PID 1.
|
||||||
- e.g. `--logger=zap --log-output=/tmp/test.log` will log server operations with [JSON-encoded format](TODO) and writes logs to the specified file `/tmp/test.log`.
|
- e.g. `--logger=zap --log-output=/tmp/test.log` will log server operations in [JSON-encoded format](https://godoc.org/go.uber.org/zap#NewProductionEncoderConfig) and writes logs to the specified file `/tmp/test.log`.
|
||||||
- e.g. `--logger=zap --log-output=default` will log server operations with [JSON-encoded format](TODO) and writes logs to `os.Stderr` (detect systemd journald TODO).
|
- e.g. `--logger=zap --log-output=default` will log server operations in [JSON-encoded format](https://godoc.org/go.uber.org/zap#NewProductionEncoderConfig) and writes logs to `os.Stderr` (detect systemd journald TODO).
|
||||||
- e.g. `--logger=zap --log-output=stderr` will log server operations with [JSON-encoded format](TODO) and writes logs to `os.Stderr` (bypass journald TODO).
|
- e.g. `--logger=zap --log-output=stderr` will log server operations in [JSON-encoded format](https://godoc.org/go.uber.org/zap#NewProductionEncoderConfig) and writes logs to `os.Stderr` (bypass journald TODO).
|
||||||
- e.g. `--logger=zap --log-output=stdout` will log server operations with [JSON-encoded format](TODO) and writes logs to `os.Stdout` (bypass journald TODO).
|
- e.g. `--logger=zap --log-output=stdout` will log server operations in [JSON-encoded format](https://godoc.org/go.uber.org/zap#NewProductionEncoderConfig) and writes logs to `os.Stdout` (bypass journald TODO).
|
||||||
|
- e.g. `--logger=zap --log-output=a.log,b.log,c.log,stdout` [writes server logs to multiple files `a.log`, `b.log` and `c.log` at the same time](https://github.com/coreos/etcd/pull/9579) and outputs to `stdout`, in [JSON-encoded format](https://godoc.org/go.uber.org/zap#NewProductionEncoderConfig).
|
||||||
- e.g. `--logger=zap --log-output=/dev/null` will discard all server logs.
|
- e.g. `--logger=zap --log-output=/dev/null` will discard all server logs.
|
||||||
|
|
||||||
### Added: `embed`
|
### Added: `embed`
|
||||||
|
@ -79,6 +79,26 @@ cfg := &embed.Config{Debug: false}
|
|||||||
-cfg.SetupLogging()
|
-cfg.SetupLogging()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Changed [`embed.Config.LogOutput` type from `string` to `[]string`](https://github.com/coreos/etcd/pull/9579) to support multiple log outputs.
|
||||||
|
|
||||||
|
```diff
|
||||||
|
import "github.com/coreos/etcd/embed"
|
||||||
|
|
||||||
|
cfg := &embed.Config{Debug: false}
|
||||||
|
-cfg.LogOutput = "stderr"
|
||||||
|
+cfg.LogOutput = []string{"stderr"}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Change in `etcd --config-file`
|
||||||
|
|
||||||
|
Now that `log-output` accepts multiple writers, etcd configuration YAML file `log-output` field must be changed to `[]string` type as below:
|
||||||
|
|
||||||
|
```diff
|
||||||
|
# Specify 'stdout' or 'stderr' to skip journald logging even when running under systemd.
|
||||||
|
-log-output: default
|
||||||
|
+log-output: [default]
|
||||||
|
```
|
||||||
|
|
||||||
### Server upgrade checklists
|
### Server upgrade checklists
|
||||||
|
|
||||||
#### Upgrade requirements
|
#### Upgrade requirements
|
||||||
|
@ -23,6 +23,7 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
@ -241,11 +242,12 @@ type Config struct {
|
|||||||
Logger string `json:"logger"`
|
Logger string `json:"logger"`
|
||||||
|
|
||||||
// LogOutput is either:
|
// LogOutput is either:
|
||||||
// - "default" as os.Stderr
|
// - "default" as os.Stderr,
|
||||||
// - "stderr" as os.Stderr
|
// - "stderr" as os.Stderr,
|
||||||
// - "stdout" as os.Stdout
|
// - "stdout" as os.Stdout,
|
||||||
// - file path to append server logs to
|
// - file path to append server logs to.
|
||||||
LogOutput string `json:"log-output"`
|
// It can be multiple when "Logger" is zap.
|
||||||
|
LogOutput []string `json:"log-output"`
|
||||||
// Debug is true, to enable debug level logging.
|
// Debug is true, to enable debug level logging.
|
||||||
Debug bool `json:"debug"`
|
Debug bool `json:"debug"`
|
||||||
|
|
||||||
@ -318,7 +320,7 @@ func NewConfig() *Config {
|
|||||||
loggerMu: new(sync.RWMutex),
|
loggerMu: new(sync.RWMutex),
|
||||||
logger: nil,
|
logger: nil,
|
||||||
Logger: "capnslog",
|
Logger: "capnslog",
|
||||||
LogOutput: DefaultLogOutput,
|
LogOutput: []string{DefaultLogOutput},
|
||||||
Debug: false,
|
Debug: false,
|
||||||
LogPkgLevels: "",
|
LogPkgLevels: "",
|
||||||
}
|
}
|
||||||
@ -380,21 +382,37 @@ func (cfg *Config) setupLogging() error {
|
|||||||
repoLog.SetLogLevel(settings)
|
repoLog.SetLogLevel(settings)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(cfg.LogOutput) != 1 {
|
||||||
|
fmt.Printf("expected only 1 value in 'log-output', got %v\n", cfg.LogOutput)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
// capnslog initially SetFormatter(NewDefaultFormatter(os.Stderr))
|
// capnslog initially SetFormatter(NewDefaultFormatter(os.Stderr))
|
||||||
// where NewDefaultFormatter returns NewJournaldFormatter when syscall.Getppid() == 1
|
// where NewDefaultFormatter returns NewJournaldFormatter when syscall.Getppid() == 1
|
||||||
// specify 'stdout' or 'stderr' to skip journald logging even when running under systemd
|
// specify 'stdout' or 'stderr' to skip journald logging even when running under systemd
|
||||||
switch cfg.LogOutput {
|
output := cfg.LogOutput[0]
|
||||||
|
switch output {
|
||||||
case "stdout":
|
case "stdout":
|
||||||
capnslog.SetFormatter(capnslog.NewPrettyFormatter(os.Stdout, cfg.Debug))
|
capnslog.SetFormatter(capnslog.NewPrettyFormatter(os.Stdout, cfg.Debug))
|
||||||
case "stderr":
|
case "stderr":
|
||||||
capnslog.SetFormatter(capnslog.NewPrettyFormatter(os.Stderr, cfg.Debug))
|
capnslog.SetFormatter(capnslog.NewPrettyFormatter(os.Stderr, cfg.Debug))
|
||||||
case DefaultLogOutput:
|
case DefaultLogOutput:
|
||||||
default:
|
default:
|
||||||
plog.Panicf(`unknown log-output %q (only supports %q, "stdout", "stderr")`, cfg.LogOutput, DefaultLogOutput)
|
plog.Panicf(`unknown log-output %q (only supports %q, "stdout", "stderr")`, output, DefaultLogOutput)
|
||||||
}
|
}
|
||||||
|
|
||||||
case "zap":
|
case "zap":
|
||||||
// TODO: make this more configurable
|
if len(cfg.LogOutput) == 0 {
|
||||||
|
cfg.LogOutput = []string{DefaultLogOutput}
|
||||||
|
}
|
||||||
|
if len(cfg.LogOutput) > 1 {
|
||||||
|
for _, v := range cfg.LogOutput {
|
||||||
|
if v == DefaultLogOutput {
|
||||||
|
panic(fmt.Errorf("multi logoutput for %q is not supported yet", DefaultLogOutput))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: use zapcore to support more features?
|
||||||
lcfg := zap.Config{
|
lcfg := zap.Config{
|
||||||
Level: zap.NewAtomicLevelAt(zap.InfoLevel),
|
Level: zap.NewAtomicLevelAt(zap.InfoLevel),
|
||||||
Development: false,
|
Development: false,
|
||||||
@ -404,35 +422,50 @@ func (cfg *Config) setupLogging() error {
|
|||||||
},
|
},
|
||||||
Encoding: "json",
|
Encoding: "json",
|
||||||
EncoderConfig: zap.NewProductionEncoderConfig(),
|
EncoderConfig: zap.NewProductionEncoderConfig(),
|
||||||
|
|
||||||
|
OutputPaths: make([]string, 0),
|
||||||
|
ErrorOutputPaths: make([]string, 0),
|
||||||
}
|
}
|
||||||
switch cfg.LogOutput {
|
outputPaths, errOutputPaths := make(map[string]struct{}), make(map[string]struct{})
|
||||||
|
for _, v := range cfg.LogOutput {
|
||||||
|
switch v {
|
||||||
case DefaultLogOutput:
|
case DefaultLogOutput:
|
||||||
if syscall.Getppid() == 1 {
|
if syscall.Getppid() == 1 {
|
||||||
// capnslog initially SetFormatter(NewDefaultFormatter(os.Stderr))
|
// capnslog initially SetFormatter(NewDefaultFormatter(os.Stderr))
|
||||||
// where "NewDefaultFormatter" returns "NewJournaldFormatter"
|
// where "NewDefaultFormatter" returns "NewJournaldFormatter"
|
||||||
// when syscall.Getppid() == 1, specify 'stdout' or 'stderr' to
|
// when syscall.Getppid() == 1, specify 'stdout' or 'stderr' to
|
||||||
// skip journald logging even when running under systemd
|
// skip journald logging even when running under systemd
|
||||||
fmt.Println("running under init, which may be systemd!")
|
|
||||||
// TODO: capnlog.NewJournaldFormatter()
|
// TODO: capnlog.NewJournaldFormatter()
|
||||||
lcfg.OutputPaths = []string{"stderr"}
|
fmt.Println("running under init, which may be systemd!")
|
||||||
lcfg.ErrorOutputPaths = []string{"stderr"}
|
outputPaths["stderr"] = struct{}{}
|
||||||
} else {
|
errOutputPaths["stderr"] = struct{}{}
|
||||||
lcfg.OutputPaths = []string{"stderr"}
|
continue
|
||||||
lcfg.ErrorOutputPaths = []string{"stderr"}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
outputPaths["stderr"] = struct{}{}
|
||||||
|
errOutputPaths["stderr"] = struct{}{}
|
||||||
|
|
||||||
case "stderr":
|
case "stderr":
|
||||||
lcfg.OutputPaths = []string{"stderr"}
|
outputPaths["stderr"] = struct{}{}
|
||||||
lcfg.ErrorOutputPaths = []string{"stderr"}
|
errOutputPaths["stderr"] = struct{}{}
|
||||||
|
|
||||||
case "stdout":
|
case "stdout":
|
||||||
lcfg.OutputPaths = []string{"stdout"}
|
outputPaths["stdout"] = struct{}{}
|
||||||
lcfg.ErrorOutputPaths = []string{"stdout"}
|
errOutputPaths["stdout"] = struct{}{}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
lcfg.OutputPaths = []string{cfg.LogOutput}
|
outputPaths[v] = struct{}{}
|
||||||
lcfg.ErrorOutputPaths = []string{cfg.LogOutput}
|
errOutputPaths[v] = struct{}{}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
for v := range outputPaths {
|
||||||
|
lcfg.OutputPaths = append(lcfg.OutputPaths, v)
|
||||||
|
}
|
||||||
|
for v := range errOutputPaths {
|
||||||
|
lcfg.ErrorOutputPaths = append(lcfg.ErrorOutputPaths, v)
|
||||||
|
}
|
||||||
|
sort.Strings(lcfg.OutputPaths)
|
||||||
|
sort.Strings(lcfg.ErrorOutputPaths)
|
||||||
|
|
||||||
if cfg.Debug {
|
if cfg.Debug {
|
||||||
lcfg.Level = zap.NewAtomicLevelAt(zap.DebugLevel)
|
lcfg.Level = zap.NewAtomicLevelAt(zap.DebugLevel)
|
||||||
|
@ -34,14 +34,14 @@ func TestConfigFileOtherFields(t *testing.T) {
|
|||||||
PeerSecurityCfgFile securityConfig `json:"peer-transport-security"`
|
PeerSecurityCfgFile securityConfig `json:"peer-transport-security"`
|
||||||
ForceNewCluster bool `json:"force-new-cluster"`
|
ForceNewCluster bool `json:"force-new-cluster"`
|
||||||
Logger string `json:"logger"`
|
Logger string `json:"logger"`
|
||||||
LogOutput string `json:"log-output"`
|
LogOutputs []string `json:"log-output"`
|
||||||
Debug bool `json:"debug"`
|
Debug bool `json:"debug"`
|
||||||
}{
|
}{
|
||||||
ctls,
|
ctls,
|
||||||
ptls,
|
ptls,
|
||||||
true,
|
true,
|
||||||
"zap",
|
"zap",
|
||||||
"/dev/null",
|
[]string{"/dev/null"},
|
||||||
false,
|
false,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,7 +157,7 @@ func mustCreateCfgFile(t *testing.T, b []byte) *os.File {
|
|||||||
func TestAutoCompactionModeInvalid(t *testing.T) {
|
func TestAutoCompactionModeInvalid(t *testing.T) {
|
||||||
cfg := NewConfig()
|
cfg := NewConfig()
|
||||||
cfg.Logger = "zap"
|
cfg.Logger = "zap"
|
||||||
cfg.LogOutput = "/dev/null"
|
cfg.LogOutput = []string{"/dev/null"}
|
||||||
cfg.Debug = false
|
cfg.Debug = false
|
||||||
cfg.AutoCompactionMode = "period"
|
cfg.AutoCompactionMode = "period"
|
||||||
err := cfg.Validate()
|
err := cfg.Validate()
|
||||||
|
@ -138,7 +138,7 @@ debug: false
|
|||||||
log-package-levels:
|
log-package-levels:
|
||||||
|
|
||||||
# Specify 'stdout' or 'stderr' to skip journald logging even when running under systemd.
|
# Specify 'stdout' or 'stderr' to skip journald logging even when running under systemd.
|
||||||
log-output: default
|
log-output: [default]
|
||||||
|
|
||||||
# Force to create a new one member cluster.
|
# Force to create a new one member cluster.
|
||||||
force-new-cluster: false
|
force-new-cluster: false
|
||||||
|
@ -24,6 +24,7 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/coreos/etcd/embed"
|
"github.com/coreos/etcd/embed"
|
||||||
@ -216,7 +217,7 @@ func newConfig() *config {
|
|||||||
|
|
||||||
// logging
|
// logging
|
||||||
fs.StringVar(&cfg.ec.Logger, "logger", "capnslog", "Specify 'zap' for structured logging or 'capnslog'.")
|
fs.StringVar(&cfg.ec.Logger, "logger", "capnslog", "Specify 'zap' for structured logging or 'capnslog'.")
|
||||||
fs.StringVar(&cfg.ec.LogOutput, "log-output", embed.DefaultLogOutput, "Specify 'stdout' or 'stderr' to skip journald logging even when running under systemd.")
|
fs.Var(flags.NewUniqueStringsValue(embed.DefaultLogOutput), "log-output", "Specify 'stdout' or 'stderr' to skip journald logging even when running under systemd, or list of comma separated output targets.")
|
||||||
fs.BoolVar(&cfg.ec.Debug, "debug", false, "Enable debug-level logging for etcd.")
|
fs.BoolVar(&cfg.ec.Debug, "debug", false, "Enable debug-level logging for etcd.")
|
||||||
fs.StringVar(&cfg.ec.LogPkgLevels, "log-package-levels", "", "(To be deprecated) Specify a particular log level for each etcd package (eg: 'etcdmain=CRITICAL,etcdserver=DEBUG').")
|
fs.StringVar(&cfg.ec.LogPkgLevels, "log-package-levels", "", "(To be deprecated) Specify a particular log level for each etcd package (eg: 'etcdmain=CRITICAL,etcdserver=DEBUG').")
|
||||||
|
|
||||||
@ -304,6 +305,13 @@ func (cfg *config) configFromCmdLine() error {
|
|||||||
|
|
||||||
cfg.ec.CORS = flags.UniqueURLsMapFromFlag(cfg.cf.flagSet, "cors")
|
cfg.ec.CORS = flags.UniqueURLsMapFromFlag(cfg.cf.flagSet, "cors")
|
||||||
cfg.ec.HostWhitelist = flags.UniqueStringsMapFromFlag(cfg.cf.flagSet, "host-whitelist")
|
cfg.ec.HostWhitelist = flags.UniqueStringsMapFromFlag(cfg.cf.flagSet, "host-whitelist")
|
||||||
|
outputs := flags.UniqueStringsMapFromFlag(cfg.cf.flagSet, "log-output")
|
||||||
|
oss := make([]string, 0, len(outputs))
|
||||||
|
for v := range outputs {
|
||||||
|
oss = append(oss, v)
|
||||||
|
}
|
||||||
|
sort.Strings(oss)
|
||||||
|
cfg.ec.LogOutput = oss
|
||||||
|
|
||||||
cfg.ec.ClusterState = cfg.cf.clusterState.String()
|
cfg.ec.ClusterState = cfg.cf.clusterState.String()
|
||||||
cfg.cp.Fallback = cfg.cf.fallback.String()
|
cfg.cp.Fallback = cfg.cf.fallback.String()
|
||||||
|
@ -157,7 +157,7 @@ Logging:
|
|||||||
--logger 'capnslog'
|
--logger 'capnslog'
|
||||||
Specify 'zap' for structured logging or 'capnslog'.
|
Specify 'zap' for structured logging or 'capnslog'.
|
||||||
--log-output 'default'
|
--log-output 'default'
|
||||||
Specify 'stdout' or 'stderr' to skip journald logging even when running under systemd.
|
Specify 'stdout' or 'stderr' to skip journald logging even when running under systemd, or list of comma separated output targets.
|
||||||
--debug 'false'
|
--debug 'false'
|
||||||
Enable debug-level logging for etcd.
|
Enable debug-level logging for etcd.
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ agent-configs:
|
|||||||
pre-vote: true
|
pre-vote: true
|
||||||
initial-corrupt-check: true
|
initial-corrupt-check: true
|
||||||
logger: zap
|
logger: zap
|
||||||
log-output: /tmp/etcd-functional-1/etcd.log
|
log-output: [/tmp/etcd-functional-1/etcd.log]
|
||||||
debug: true
|
debug: true
|
||||||
client-cert-data: ""
|
client-cert-data: ""
|
||||||
client-cert-path: ""
|
client-cert-path: ""
|
||||||
@ -85,7 +85,7 @@ agent-configs:
|
|||||||
pre-vote: true
|
pre-vote: true
|
||||||
initial-corrupt-check: true
|
initial-corrupt-check: true
|
||||||
logger: zap
|
logger: zap
|
||||||
log-output: /tmp/etcd-functional-2/etcd.log
|
log-output: [/tmp/etcd-functional-2/etcd.log]
|
||||||
debug: true
|
debug: true
|
||||||
client-cert-data: ""
|
client-cert-data: ""
|
||||||
client-cert-path: ""
|
client-cert-path: ""
|
||||||
@ -136,7 +136,7 @@ agent-configs:
|
|||||||
pre-vote: true
|
pre-vote: true
|
||||||
initial-corrupt-check: true
|
initial-corrupt-check: true
|
||||||
logger: zap
|
logger: zap
|
||||||
log-output: /tmp/etcd-functional-3/etcd.log
|
log-output: [/tmp/etcd-functional-3/etcd.log]
|
||||||
debug: true
|
debug: true
|
||||||
client-cert-data: ""
|
client-cert-data: ""
|
||||||
client-cert-path: ""
|
client-cert-path: ""
|
||||||
|
@ -85,13 +85,14 @@ func (srv *Server) handleTesterRequest(req *rpcpb.Request) (resp *rpcpb.Response
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// just archive the first file
|
||||||
func (srv *Server) createEtcdLogFile() error {
|
func (srv *Server) createEtcdLogFile() error {
|
||||||
var err error
|
var err error
|
||||||
srv.etcdLogFile, err = os.Create(srv.Member.Etcd.LogOutput)
|
srv.etcdLogFile, err = os.Create(srv.Member.Etcd.LogOutput[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
srv.lg.Info("created etcd log file", zap.String("path", srv.Member.Etcd.LogOutput))
|
srv.lg.Info("created etcd log file", zap.String("path", srv.Member.Etcd.LogOutput[0]))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -664,7 +665,7 @@ func (srv *Server) handle_SIGQUIT_ETCD_AND_ARCHIVE_DATA() (*rpcpb.Response, erro
|
|||||||
// TODO: support separate WAL directory
|
// TODO: support separate WAL directory
|
||||||
if err = archive(
|
if err = archive(
|
||||||
srv.Member.BaseDir,
|
srv.Member.BaseDir,
|
||||||
srv.Member.Etcd.LogOutput,
|
srv.Member.Etcd.LogOutput[0],
|
||||||
srv.Member.Etcd.DataDir,
|
srv.Member.Etcd.DataDir,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -58,7 +58,7 @@ func TestEtcd(t *testing.T) {
|
|||||||
InitialCorruptCheck: true,
|
InitialCorruptCheck: true,
|
||||||
|
|
||||||
Logger: "zap",
|
Logger: "zap",
|
||||||
LogOutput: "/tmp/etcd-functional-1/etcd.log",
|
LogOutput: []string{"/tmp/etcd-functional-1/etcd.log"},
|
||||||
Debug: true,
|
Debug: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,7 +133,7 @@ func TestEtcd(t *testing.T) {
|
|||||||
expc.PreVote = true
|
expc.PreVote = true
|
||||||
expc.ExperimentalInitialCorruptCheck = true
|
expc.ExperimentalInitialCorruptCheck = true
|
||||||
expc.Logger = "zap"
|
expc.Logger = "zap"
|
||||||
expc.LogOutput = "/tmp/etcd-functional-1/etcd.log"
|
expc.LogOutput = []string{"/tmp/etcd-functional-1/etcd.log"}
|
||||||
expc.Debug = true
|
expc.Debug = true
|
||||||
cfg, err := e.EmbedConfig()
|
cfg, err := e.EmbedConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -761,7 +761,7 @@ type Etcd struct {
|
|||||||
InitialCorruptCheck bool `protobuf:"varint,64,opt,name=InitialCorruptCheck,proto3" json:"InitialCorruptCheck,omitempty" yaml:"initial-corrupt-check"`
|
InitialCorruptCheck bool `protobuf:"varint,64,opt,name=InitialCorruptCheck,proto3" json:"InitialCorruptCheck,omitempty" yaml:"initial-corrupt-check"`
|
||||||
Logger string `protobuf:"bytes,71,opt,name=Logger,proto3" json:"Logger,omitempty" yaml:"logger"`
|
Logger string `protobuf:"bytes,71,opt,name=Logger,proto3" json:"Logger,omitempty" yaml:"logger"`
|
||||||
// LogOutput is the log file to store current etcd server logs.
|
// LogOutput is the log file to store current etcd server logs.
|
||||||
LogOutput string `protobuf:"bytes,72,opt,name=LogOutput,proto3" json:"LogOutput,omitempty" yaml:"log-output"`
|
LogOutput []string `protobuf:"bytes,72,rep,name=LogOutput" json:"LogOutput,omitempty" yaml:"log-output"`
|
||||||
Debug bool `protobuf:"varint,73,opt,name=Debug,proto3" json:"Debug,omitempty" yaml:"debug"`
|
Debug bool `protobuf:"varint,73,opt,name=Debug,proto3" json:"Debug,omitempty" yaml:"debug"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1790,12 +1790,21 @@ func (m *Etcd) MarshalTo(dAtA []byte) (int, error) {
|
|||||||
i += copy(dAtA[i:], m.Logger)
|
i += copy(dAtA[i:], m.Logger)
|
||||||
}
|
}
|
||||||
if len(m.LogOutput) > 0 {
|
if len(m.LogOutput) > 0 {
|
||||||
|
for _, s := range m.LogOutput {
|
||||||
dAtA[i] = 0xc2
|
dAtA[i] = 0xc2
|
||||||
i++
|
i++
|
||||||
dAtA[i] = 0x4
|
dAtA[i] = 0x4
|
||||||
i++
|
i++
|
||||||
i = encodeVarintRpc(dAtA, i, uint64(len(m.LogOutput)))
|
l = len(s)
|
||||||
i += copy(dAtA[i:], m.LogOutput)
|
for l >= 1<<7 {
|
||||||
|
dAtA[i] = uint8(uint64(l)&0x7f | 0x80)
|
||||||
|
l >>= 7
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
dAtA[i] = uint8(l)
|
||||||
|
i++
|
||||||
|
i += copy(dAtA[i:], s)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if m.Debug {
|
if m.Debug {
|
||||||
dAtA[i] = 0xc8
|
dAtA[i] = 0xc8
|
||||||
@ -2200,10 +2209,12 @@ func (m *Etcd) Size() (n int) {
|
|||||||
if l > 0 {
|
if l > 0 {
|
||||||
n += 2 + l + sovRpc(uint64(l))
|
n += 2 + l + sovRpc(uint64(l))
|
||||||
}
|
}
|
||||||
l = len(m.LogOutput)
|
if len(m.LogOutput) > 0 {
|
||||||
if l > 0 {
|
for _, s := range m.LogOutput {
|
||||||
|
l = len(s)
|
||||||
n += 2 + l + sovRpc(uint64(l))
|
n += 2 + l + sovRpc(uint64(l))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if m.Debug {
|
if m.Debug {
|
||||||
n += 3
|
n += 3
|
||||||
}
|
}
|
||||||
@ -4859,7 +4870,7 @@ func (m *Etcd) Unmarshal(dAtA []byte) error {
|
|||||||
if postIndex > l {
|
if postIndex > l {
|
||||||
return io.ErrUnexpectedEOF
|
return io.ErrUnexpectedEOF
|
||||||
}
|
}
|
||||||
m.LogOutput = string(dAtA[iNdEx:postIndex])
|
m.LogOutput = append(m.LogOutput, string(dAtA[iNdEx:postIndex]))
|
||||||
iNdEx = postIndex
|
iNdEx = postIndex
|
||||||
case 73:
|
case 73:
|
||||||
if wireType != 0 {
|
if wireType != 0 {
|
||||||
@ -5010,91 +5021,91 @@ var (
|
|||||||
func init() { proto.RegisterFile("rpcpb/rpc.proto", fileDescriptorRpc) }
|
func init() { proto.RegisterFile("rpcpb/rpc.proto", fileDescriptorRpc) }
|
||||||
|
|
||||||
var fileDescriptorRpc = []byte{
|
var fileDescriptorRpc = []byte{
|
||||||
// 2852 bytes of a gzipped FileDescriptorProto
|
// 2854 bytes of a gzipped FileDescriptorProto
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x59, 0xcb, 0x77, 0xdb, 0xc6,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x59, 0xcb, 0x77, 0xdb, 0xc6,
|
||||||
0xf5, 0x36, 0x45, 0x49, 0x96, 0xae, 0x5e, 0xd4, 0xc8, 0xb2, 0xe1, 0x97, 0x20, 0xc3, 0x71, 0x7e,
|
0xf5, 0x36, 0x45, 0x49, 0x96, 0xae, 0x5e, 0xd4, 0xc8, 0xb2, 0xe1, 0x97, 0x20, 0xc3, 0x71, 0x7e,
|
||||||
0xb2, 0x12, 0xd8, 0xf9, 0xd9, 0x39, 0x79, 0x38, 0x4d, 0x1c, 0x90, 0x82, 0x2d, 0x56, 0x10, 0x49,
|
0xb2, 0x12, 0xd8, 0xf9, 0xd9, 0x39, 0x79, 0x38, 0x4d, 0x1c, 0x90, 0x82, 0x2d, 0x56, 0x10, 0x49,
|
||||||
0x0f, 0x21, 0xdb, 0x59, 0xf1, 0x40, 0xe4, 0x48, 0xe2, 0x31, 0x05, 0x30, 0xc0, 0xd0, 0x91, 0xb2,
|
0x0f, 0x21, 0xdb, 0x59, 0xf1, 0x40, 0xe4, 0x48, 0xe2, 0x31, 0x05, 0x30, 0xc0, 0xd0, 0x91, 0xb2,
|
||||||
0xeb, 0xaa, 0xdb, 0x36, 0x7d, 0x9c, 0xf6, 0x9c, 0xae, 0xba, 0x6e, 0xda, 0x7f, 0xc3, 0x79, 0xb5,
|
0xeb, 0xaa, 0xdb, 0x36, 0x7d, 0x9c, 0xf6, 0x9c, 0xae, 0xba, 0x6e, 0xda, 0x7f, 0xc3, 0x79, 0xb5,
|
||||||
0x69, 0xbb, 0x6a, 0x17, 0x3c, 0x6d, 0xba, 0xe9, 0xaa, 0x0b, 0x9e, 0xbe, 0x57, 0x3d, 0x33, 0x03,
|
0x69, 0xbb, 0x6a, 0x17, 0x3c, 0x6d, 0xba, 0xe9, 0xaa, 0x0b, 0x9e, 0xbe, 0x57, 0x3d, 0x33, 0x03,
|
||||||
0x88, 0x03, 0x80, 0x94, 0xb4, 0x92, 0xe6, 0xde, 0xef, 0xfb, 0xe6, 0xce, 0xdc, 0xc1, 0xdc, 0x0b,
|
0x88, 0x03, 0x80, 0x94, 0xb4, 0xb2, 0xe7, 0xde, 0xef, 0xfb, 0xe6, 0xce, 0xdc, 0x99, 0xb9, 0x17,
|
||||||
0x10, 0xe6, 0xfc, 0x76, 0xbd, 0xbd, 0x7d, 0xdb, 0x6f, 0xd7, 0x6f, 0xb5, 0x7d, 0x8f, 0x7a, 0x68,
|
0x14, 0xcc, 0xf9, 0xed, 0x7a, 0x7b, 0xfb, 0xb6, 0xdf, 0xae, 0xdf, 0x6a, 0xfb, 0x1e, 0xf5, 0xd0,
|
||||||
0x8c, 0x1b, 0x2e, 0xe9, 0xbb, 0x4d, 0xba, 0xd7, 0xd9, 0xbe, 0x55, 0xf7, 0xf6, 0x6f, 0xef, 0x7a,
|
0x18, 0x37, 0x5c, 0xd2, 0x77, 0x9b, 0x74, 0xaf, 0xb3, 0x7d, 0xab, 0xee, 0xed, 0xdf, 0xde, 0xf5,
|
||||||
0xbb, 0xde, 0x6d, 0xee, 0xdd, 0xee, 0xec, 0xf0, 0x11, 0x1f, 0xf0, 0xff, 0x04, 0x4b, 0xfb, 0x6e,
|
0x76, 0xbd, 0xdb, 0xdc, 0xbb, 0xdd, 0xd9, 0xe1, 0x23, 0x3e, 0xe0, 0xff, 0x13, 0x2c, 0xed, 0xbb,
|
||||||
0x06, 0xce, 0x62, 0xf2, 0x61, 0x87, 0x04, 0x14, 0xdd, 0x82, 0xc9, 0x72, 0x9b, 0xf8, 0x0e, 0x6d,
|
0x19, 0x38, 0x8b, 0xc9, 0x87, 0x1d, 0x12, 0x50, 0x74, 0x0b, 0x26, 0xcb, 0x6d, 0xe2, 0x3b, 0xb4,
|
||||||
0x7a, 0xae, 0x92, 0x59, 0xce, 0xac, 0xcc, 0xde, 0xc9, 0xdd, 0xe2, 0xaa, 0xb7, 0x8e, 0xec, 0xb8,
|
0xe9, 0xb9, 0x4a, 0x66, 0x39, 0xb3, 0x32, 0x7b, 0x27, 0x77, 0x8b, 0xab, 0xde, 0x3a, 0xb2, 0xe3,
|
||||||
0x0f, 0x41, 0x37, 0x60, 0x7c, 0x93, 0xec, 0x6f, 0x13, 0x5f, 0x19, 0x59, 0xce, 0xac, 0x4c, 0xdd,
|
0x3e, 0x04, 0xdd, 0x80, 0xf1, 0x4d, 0xb2, 0xbf, 0x4d, 0x7c, 0x65, 0x64, 0x39, 0xb3, 0x32, 0x75,
|
||||||
0x99, 0x09, 0xc1, 0xc2, 0x88, 0x43, 0x27, 0x83, 0xd9, 0x24, 0xa0, 0xc4, 0x57, 0xb2, 0x31, 0x98,
|
0x67, 0x26, 0x04, 0x0b, 0x23, 0x0e, 0x9d, 0x0c, 0x66, 0x93, 0x80, 0x12, 0x5f, 0xc9, 0xc6, 0x60,
|
||||||
0x30, 0xe2, 0xd0, 0xa9, 0xfd, 0x75, 0x04, 0xa6, 0xab, 0xae, 0xd3, 0x0e, 0xf6, 0x3c, 0x5a, 0x74,
|
0xc2, 0x88, 0x43, 0xa7, 0xf6, 0xd7, 0x11, 0x98, 0xae, 0xba, 0x4e, 0x3b, 0xd8, 0xf3, 0x68, 0xd1,
|
||||||
0x77, 0x3c, 0xb4, 0x04, 0x20, 0x14, 0x4a, 0xce, 0x3e, 0xe1, 0xf1, 0x4c, 0x62, 0xc9, 0x82, 0x56,
|
0xdd, 0xf1, 0xd0, 0x12, 0x80, 0x50, 0x28, 0x39, 0xfb, 0x84, 0xc7, 0x33, 0x89, 0x25, 0x0b, 0x5a,
|
||||||
0x21, 0x27, 0x46, 0x85, 0x56, 0x93, 0xb8, 0x74, 0x0b, 0x5b, 0x81, 0x32, 0xb2, 0x9c, 0x5d, 0x99,
|
0x85, 0x9c, 0x18, 0x15, 0x5a, 0x4d, 0xe2, 0xd2, 0x2d, 0x6c, 0x05, 0xca, 0xc8, 0x72, 0x76, 0x65,
|
||||||
0xc4, 0x29, 0x3b, 0xd2, 0xfa, 0xda, 0x15, 0x87, 0xee, 0xf1, 0x48, 0x26, 0x71, 0xcc, 0xc6, 0xf4,
|
0x12, 0xa7, 0xec, 0x48, 0xeb, 0x6b, 0x57, 0x1c, 0xba, 0xc7, 0x23, 0x99, 0xc4, 0x31, 0x1b, 0xd3,
|
||||||
0xa2, 0xf1, 0x83, 0x66, 0x8b, 0x54, 0x9b, 0x1f, 0x13, 0x65, 0x94, 0xe3, 0x52, 0x76, 0xf4, 0x2a,
|
0x8b, 0xc6, 0x0f, 0x9a, 0x2d, 0x52, 0x6d, 0x7e, 0x4c, 0x94, 0x51, 0x8e, 0x4b, 0xd9, 0xd1, 0xab,
|
||||||
0xcc, 0x47, 0x36, 0xdb, 0xa3, 0x4e, 0x8b, 0x83, 0xc7, 0x38, 0x38, 0xed, 0x90, 0x95, 0xb9, 0x71,
|
0x30, 0x1f, 0xd9, 0x6c, 0x8f, 0x3a, 0x2d, 0x0e, 0x1e, 0xe3, 0xe0, 0xb4, 0x43, 0x56, 0xe6, 0xc6,
|
||||||
0x83, 0x1c, 0x2a, 0xe3, 0xcb, 0x99, 0x95, 0x2c, 0x4e, 0xd9, 0xe5, 0x48, 0xd7, 0x9d, 0x60, 0x4f,
|
0x0d, 0x72, 0xa8, 0x8c, 0x2f, 0x67, 0x56, 0xb2, 0x38, 0x65, 0x97, 0x23, 0x5d, 0x77, 0x82, 0x3d,
|
||||||
0x39, 0xcb, 0x71, 0x31, 0x9b, 0xac, 0x87, 0xc9, 0xf3, 0x66, 0xc0, 0xf2, 0x35, 0x11, 0xd7, 0x8b,
|
0xe5, 0x2c, 0xc7, 0xc5, 0x6c, 0xb2, 0x1e, 0x26, 0xcf, 0x9b, 0x01, 0xcb, 0xd7, 0x44, 0x5c, 0x2f,
|
||||||
0xec, 0x08, 0xc1, 0xa8, 0xed, 0x79, 0xcf, 0x94, 0x49, 0x1e, 0x1c, 0xff, 0x5f, 0xfb, 0x59, 0x06,
|
0xb2, 0x23, 0x04, 0xa3, 0xb6, 0xe7, 0x3d, 0x53, 0x26, 0x79, 0x70, 0xfc, 0xff, 0xda, 0xcf, 0x32,
|
||||||
0x26, 0x30, 0x09, 0xda, 0x9e, 0x1b, 0x10, 0xa4, 0xc0, 0xd9, 0x6a, 0xa7, 0x5e, 0x27, 0x41, 0xc0,
|
0x30, 0x81, 0x49, 0xd0, 0xf6, 0xdc, 0x80, 0x20, 0x05, 0xce, 0x56, 0x3b, 0xf5, 0x3a, 0x09, 0x02,
|
||||||
0xf7, 0x78, 0x02, 0x47, 0x43, 0x74, 0x1e, 0xc6, 0xab, 0xd4, 0xa1, 0x9d, 0x80, 0xe7, 0x77, 0x12,
|
0xbe, 0xc7, 0x13, 0x38, 0x1a, 0xa2, 0xf3, 0x30, 0x5e, 0xa5, 0x0e, 0xed, 0x04, 0x3c, 0xbf, 0x93,
|
||||||
0x87, 0x23, 0x29, 0xef, 0xd9, 0xe3, 0xf2, 0xfe, 0x66, 0x3c, 0x9f, 0x7c, 0x2f, 0xa7, 0xee, 0x2c,
|
0x38, 0x1c, 0x49, 0x79, 0xcf, 0x1e, 0x97, 0xf7, 0x37, 0xe3, 0xf9, 0xe4, 0x7b, 0x39, 0x75, 0x67,
|
||||||
0x84, 0x60, 0xd9, 0x85, 0x63, 0x40, 0xed, 0x93, 0xe9, 0x68, 0x02, 0xf4, 0x1a, 0x4c, 0x98, 0xb4,
|
0x21, 0x04, 0xcb, 0x2e, 0x1c, 0x03, 0x6a, 0x9f, 0x4c, 0x47, 0x13, 0xa0, 0xd7, 0x60, 0xc2, 0xa4,
|
||||||
0xde, 0x30, 0x0f, 0x48, 0x5d, 0x9c, 0x80, 0xfc, 0xb9, 0x5e, 0x57, 0xcd, 0x1d, 0x3a, 0xfb, 0xad,
|
0xf5, 0x86, 0x79, 0x40, 0xea, 0xe2, 0x04, 0xe4, 0xcf, 0xf5, 0xba, 0x6a, 0xee, 0xd0, 0xd9, 0x6f,
|
||||||
0x7b, 0x1a, 0xa1, 0xf5, 0x86, 0x4e, 0x0e, 0x48, 0x5d, 0xc3, 0x47, 0x28, 0x74, 0x17, 0x26, 0x8d,
|
0xdd, 0xd3, 0x08, 0xad, 0x37, 0x74, 0x72, 0x40, 0xea, 0x1a, 0x3e, 0x42, 0xa1, 0xbb, 0x30, 0x69,
|
||||||
0x5d, 0xe2, 0x52, 0xa3, 0xd1, 0xf0, 0x95, 0x29, 0x4e, 0x59, 0xec, 0x75, 0xd5, 0x79, 0x41, 0x71,
|
0xec, 0x12, 0x97, 0x1a, 0x8d, 0x86, 0xaf, 0x4c, 0x71, 0xca, 0x62, 0xaf, 0xab, 0xce, 0x0b, 0x8a,
|
||||||
0x98, 0x4b, 0x77, 0x1a, 0x0d, 0x5f, 0xc3, 0x7d, 0x1c, 0xb2, 0x60, 0xfe, 0x81, 0xd3, 0x6c, 0xb5,
|
0xc3, 0x5c, 0xba, 0xd3, 0x68, 0xf8, 0x1a, 0xee, 0xe3, 0x90, 0x05, 0xf3, 0x0f, 0x9c, 0x66, 0xab,
|
||||||
0xbd, 0xa6, 0x4b, 0xd7, 0x6d, 0xbb, 0xc2, 0xc9, 0xd3, 0x9c, 0xbc, 0xd4, 0xeb, 0xaa, 0x97, 0x04,
|
0xed, 0x35, 0x5d, 0xba, 0x6e, 0xdb, 0x15, 0x4e, 0x9e, 0xe6, 0xe4, 0xa5, 0x5e, 0x57, 0xbd, 0x24,
|
||||||
0x79, 0x27, 0x82, 0xe8, 0x7b, 0x94, 0xb6, 0x43, 0x95, 0x34, 0x11, 0xe9, 0x70, 0x36, 0xef, 0x04,
|
0xc8, 0x3b, 0x11, 0x44, 0xdf, 0xa3, 0xb4, 0x1d, 0xaa, 0xa4, 0x89, 0x48, 0x87, 0xb3, 0x79, 0x27,
|
||||||
0x64, 0xad, 0xe9, 0x2b, 0x84, 0x6b, 0x2c, 0xf4, 0xba, 0xea, 0x9c, 0xd0, 0xd8, 0x76, 0x02, 0xa2,
|
0x20, 0x6b, 0x4d, 0x5f, 0x21, 0x5c, 0x63, 0xa1, 0xd7, 0x55, 0xe7, 0x84, 0xc6, 0xb6, 0x13, 0x10,
|
||||||
0x37, 0x9a, 0xbe, 0x86, 0x23, 0x0c, 0x7a, 0x08, 0x73, 0x2c, 0x7a, 0x71, 0x5a, 0x2b, 0xbe, 0x77,
|
0xbd, 0xd1, 0xf4, 0x35, 0x1c, 0x61, 0xd0, 0x43, 0x98, 0x63, 0xd1, 0x8b, 0xd3, 0x5a, 0xf1, 0xbd,
|
||||||
0x70, 0xa8, 0x7c, 0xc6, 0x33, 0x91, 0xbf, 0xd2, 0xeb, 0xaa, 0x8a, 0xb4, 0xd6, 0x3a, 0x87, 0xe8,
|
0x83, 0x43, 0xe5, 0x33, 0x9e, 0x89, 0xfc, 0x95, 0x5e, 0x57, 0x55, 0xa4, 0xb5, 0xd6, 0x39, 0x44,
|
||||||
0x6d, 0x86, 0xd1, 0x70, 0x92, 0x85, 0x0c, 0x98, 0x61, 0xa6, 0x0a, 0x21, 0xbe, 0x90, 0xf9, 0x5c,
|
0x6f, 0x33, 0x8c, 0x86, 0x93, 0x2c, 0x64, 0xc0, 0x0c, 0x33, 0x55, 0x08, 0xf1, 0x85, 0xcc, 0xe7,
|
||||||
0xc8, 0x5c, 0xea, 0x75, 0xd5, 0xf3, 0x92, 0x4c, 0x9b, 0x10, 0x3f, 0x12, 0x89, 0x33, 0x50, 0x05,
|
0x42, 0xe6, 0x52, 0xaf, 0xab, 0x9e, 0x97, 0x64, 0xda, 0x84, 0xf8, 0x91, 0x48, 0x9c, 0x81, 0x2a,
|
||||||
0x50, 0x5f, 0xd5, 0x74, 0x1b, 0x7c, 0x61, 0xca, 0xa7, 0x3c, 0xff, 0x79, 0xb5, 0xd7, 0x55, 0x2f,
|
0x80, 0xfa, 0xaa, 0xa6, 0xdb, 0xe0, 0x0b, 0x53, 0x3e, 0xe5, 0xf9, 0xcf, 0xab, 0xbd, 0xae, 0x7a,
|
||||||
0xa7, 0xc3, 0x21, 0x21, 0x4c, 0xc3, 0x03, 0xb8, 0xe8, 0xff, 0x61, 0x94, 0x59, 0x95, 0x5f, 0x8a,
|
0x39, 0x1d, 0x0e, 0x09, 0x61, 0x1a, 0x1e, 0xc0, 0x45, 0xff, 0x0f, 0xa3, 0xcc, 0xaa, 0xfc, 0x52,
|
||||||
0x3b, 0x62, 0x2a, 0x4c, 0x3f, 0xb3, 0xe5, 0xe7, 0x7a, 0x5d, 0x75, 0xaa, 0x2f, 0xa8, 0x61, 0x0e,
|
0xbc, 0x11, 0x53, 0x61, 0xfa, 0x99, 0x2d, 0x3f, 0xd7, 0xeb, 0xaa, 0x53, 0x7d, 0x41, 0x0d, 0x73,
|
||||||
0x45, 0x79, 0x58, 0x64, 0x7f, 0xcb, 0x6e, 0xff, 0x30, 0x07, 0xd4, 0xf3, 0x89, 0xf2, 0xab, 0xb4,
|
0x28, 0xca, 0xc3, 0x22, 0xfb, 0xb7, 0xec, 0xf6, 0x0f, 0x73, 0x40, 0x3d, 0x9f, 0x28, 0xbf, 0x4a,
|
||||||
0x06, 0x1e, 0x0c, 0x45, 0x6b, 0x30, 0x2b, 0x02, 0x29, 0x10, 0x9f, 0xae, 0x39, 0xd4, 0x51, 0xbe,
|
0x6b, 0xe0, 0xc1, 0x50, 0xb4, 0x06, 0xb3, 0x22, 0x90, 0x02, 0xf1, 0xe9, 0x9a, 0x43, 0x1d, 0xe5,
|
||||||
0xcf, 0x9f, 0xf9, 0xfc, 0xe5, 0x5e, 0x57, 0xbd, 0x20, 0xe6, 0x0c, 0xe3, 0xaf, 0x13, 0x9f, 0xea,
|
0xfb, 0xfc, 0xce, 0xe7, 0x2f, 0xf7, 0xba, 0xea, 0x05, 0x31, 0x67, 0x18, 0x7f, 0x9d, 0xf8, 0x54,
|
||||||
0x0d, 0x87, 0x3a, 0x1a, 0x4e, 0x70, 0xe2, 0x2a, 0xfc, 0xe2, 0xf8, 0xe4, 0x58, 0x95, 0xb6, 0x43,
|
0x6f, 0x38, 0xd4, 0xd1, 0x70, 0x82, 0x13, 0x57, 0xe1, 0x0f, 0xc7, 0x27, 0xc7, 0xaa, 0xb4, 0x1d,
|
||||||
0xf7, 0x62, 0x2a, 0xfc, 0x62, 0x31, 0x60, 0x46, 0x58, 0x36, 0xc8, 0x21, 0x0f, 0xe5, 0x07, 0x42,
|
0xba, 0x17, 0x53, 0xe1, 0x0f, 0x8b, 0x01, 0x33, 0xc2, 0xb2, 0x41, 0x0e, 0x79, 0x28, 0x3f, 0x10,
|
||||||
0x44, 0xca, 0x4b, 0x28, 0xf2, 0x8c, 0x1c, 0x86, 0x91, 0xc4, 0x19, 0x31, 0x09, 0x1e, 0xc7, 0x0f,
|
0x22, 0x52, 0x5e, 0x42, 0x91, 0x67, 0xe4, 0x30, 0x8c, 0x24, 0xce, 0x88, 0x49, 0xf0, 0x38, 0x7e,
|
||||||
0x8f, 0x93, 0x10, 0x61, 0xc4, 0x19, 0xc8, 0x86, 0x05, 0x61, 0xb0, 0xfd, 0x4e, 0x40, 0x49, 0xa3,
|
0x78, 0x9c, 0x84, 0x08, 0x23, 0xce, 0x40, 0x36, 0x2c, 0x08, 0x83, 0xed, 0x77, 0x02, 0x4a, 0x1a,
|
||||||
0x60, 0xf0, 0x58, 0x7e, 0x24, 0x84, 0xae, 0xf5, 0xba, 0xea, 0xd5, 0x98, 0x10, 0x15, 0x30, 0xbd,
|
0x05, 0x83, 0xc7, 0xf2, 0x23, 0x21, 0x74, 0xad, 0xd7, 0x55, 0xaf, 0xc6, 0x84, 0xa8, 0x80, 0xe9,
|
||||||
0xee, 0x84, 0x21, 0x0d, 0xa2, 0x0f, 0x50, 0xe5, 0xe1, 0xfd, 0xf8, 0x14, 0xaa, 0x22, 0xca, 0x41,
|
0x75, 0x27, 0x0c, 0x69, 0x10, 0x7d, 0x80, 0x2a, 0x0f, 0xef, 0xc7, 0xa7, 0x50, 0x15, 0x51, 0x0e,
|
||||||
0x74, 0xf4, 0x1e, 0x4c, 0xb3, 0x33, 0x79, 0x94, 0xbb, 0x7f, 0x08, 0xb9, 0x8b, 0xbd, 0xae, 0xba,
|
0xa2, 0xa3, 0xf7, 0x60, 0x9a, 0x9d, 0xc9, 0xa3, 0xdc, 0xfd, 0x43, 0xc8, 0x5d, 0xec, 0x75, 0xd5,
|
||||||
0x28, 0xe4, 0xf8, 0x19, 0x96, 0x32, 0x17, 0xc3, 0xcb, 0x7c, 0x1e, 0xce, 0x3f, 0x8f, 0xe1, 0x8b,
|
0x45, 0x21, 0xc7, 0xcf, 0xb0, 0x94, 0xb9, 0x18, 0x5e, 0xe6, 0xf3, 0x70, 0xfe, 0x79, 0x0c, 0x5f,
|
||||||
0x30, 0x62, 0x78, 0xf4, 0x0e, 0x4c, 0xb1, 0x71, 0x94, 0xaf, 0x7f, 0x09, 0xba, 0xd2, 0xeb, 0xaa,
|
0x84, 0x11, 0xc3, 0xa3, 0x77, 0x60, 0x8a, 0x8d, 0xa3, 0x7c, 0xfd, 0x4b, 0xd0, 0x95, 0x5e, 0x57,
|
||||||
0xe7, 0x24, 0x7a, 0x3f, 0x5b, 0x32, 0x5a, 0x22, 0xf3, 0xb9, 0xff, 0x3d, 0x9c, 0x2c, 0xa6, 0x96,
|
0x3d, 0x27, 0xd1, 0xfb, 0xd9, 0x92, 0xd1, 0x12, 0x99, 0xcf, 0xfd, 0xef, 0xe1, 0x64, 0x31, 0xb5,
|
||||||
0xd1, 0xa8, 0x04, 0xf3, 0x6c, 0x18, 0xcf, 0xd1, 0x7f, 0xb2, 0xc9, 0xe7, 0x8f, 0x4b, 0xa4, 0x32,
|
0x8c, 0x46, 0x25, 0x98, 0x67, 0xc3, 0x78, 0x8e, 0xfe, 0x93, 0x4d, 0xde, 0x3f, 0x2e, 0x91, 0xca,
|
||||||
0x94, 0xa6, 0xa6, 0xf4, 0x78, 0x48, 0xff, 0x3d, 0x51, 0x4f, 0x44, 0x96, 0xa6, 0xa2, 0x77, 0x13,
|
0x50, 0x9a, 0x9a, 0xd2, 0xe3, 0x21, 0xfd, 0xf7, 0x44, 0x3d, 0x11, 0x59, 0x9a, 0x8a, 0xde, 0x4d,
|
||||||
0x85, 0xf4, 0x0f, 0xa3, 0xc9, 0xd5, 0x05, 0xa1, 0x3b, 0xda, 0xd8, 0x58, 0x8d, 0x7d, 0x2b, 0x51,
|
0x14, 0xd2, 0x3f, 0x8c, 0x26, 0x57, 0x17, 0x84, 0xee, 0x68, 0x63, 0x63, 0x35, 0xf6, 0xad, 0x44,
|
||||||
0x13, 0xfe, 0x78, 0xea, 0xa2, 0xf0, 0xf3, 0xe9, 0xa8, 0x8d, 0x60, 0xf7, 0x2b, 0x5b, 0x1b, 0xbb,
|
0x4d, 0xf8, 0xe3, 0xa9, 0x8b, 0xc2, 0xcf, 0xa7, 0xa3, 0x36, 0x82, 0xbd, 0xaf, 0x6c, 0x6d, 0xec,
|
||||||
0x5f, 0x33, 0xc9, 0xfb, 0x95, 0x6d, 0x44, 0x78, 0xbf, 0x86, 0x18, 0xf4, 0x2a, 0x9c, 0x2d, 0x11,
|
0x7d, 0xcd, 0x24, 0xdf, 0x57, 0xb6, 0x11, 0xe1, 0xfb, 0x1a, 0x62, 0xd0, 0xab, 0x70, 0xb6, 0x44,
|
||||||
0xfa, 0x91, 0xe7, 0x3f, 0x13, 0x75, 0x2c, 0x8f, 0x7a, 0x5d, 0x75, 0x56, 0xc0, 0x5d, 0xe1, 0xd0,
|
0xe8, 0x47, 0x9e, 0xff, 0x4c, 0xd4, 0xb1, 0x3c, 0xea, 0x75, 0xd5, 0x59, 0x01, 0x77, 0x85, 0x43,
|
||||||
0x70, 0x04, 0x41, 0xd7, 0x61, 0x94, 0xdf, 0xfe, 0x62, 0x8b, 0xa4, 0x1b, 0x4a, 0x5c, 0xf7, 0xdc,
|
0xc3, 0x11, 0x04, 0x5d, 0x87, 0x51, 0xfe, 0xfa, 0x8b, 0x2d, 0x92, 0x5e, 0x28, 0xf1, 0xdc, 0x73,
|
||||||
0x89, 0x0a, 0x30, 0xbb, 0x46, 0x5a, 0xce, 0xa1, 0xe5, 0x50, 0xe2, 0xd6, 0x0f, 0x37, 0x03, 0x5e,
|
0x27, 0x2a, 0xc0, 0xec, 0x1a, 0x69, 0x39, 0x87, 0x96, 0x43, 0x89, 0x5b, 0x3f, 0xdc, 0x0c, 0x78,
|
||||||
0x69, 0x66, 0xe4, 0x6b, 0xa1, 0xc1, 0xfc, 0x7a, 0x4b, 0x00, 0xf4, 0xfd, 0x40, 0xc3, 0x09, 0x0a,
|
0xa5, 0x99, 0x91, 0x9f, 0x85, 0x06, 0xf3, 0xeb, 0x2d, 0x01, 0xd0, 0xf7, 0x03, 0x0d, 0x27, 0x28,
|
||||||
0xfa, 0x36, 0xe4, 0xe2, 0x16, 0xfc, 0x9c, 0xd7, 0x9c, 0x19, 0xb9, 0xe6, 0x24, 0x65, 0x74, 0xff,
|
0xe8, 0xdb, 0x90, 0x8b, 0x5b, 0xf0, 0x73, 0x5e, 0x73, 0x66, 0xe4, 0x9a, 0x93, 0x94, 0xd1, 0xfd,
|
||||||
0xb9, 0x86, 0x53, 0x3c, 0xf4, 0x01, 0x2c, 0x6e, 0xb5, 0x1b, 0x0e, 0x25, 0x8d, 0x44, 0x5c, 0x33,
|
0xe7, 0x1a, 0x4e, 0xf1, 0xd0, 0x07, 0xb0, 0xb8, 0xd5, 0x6e, 0x38, 0x94, 0x34, 0x12, 0x71, 0xcd,
|
||||||
0x5c, 0xf0, 0x7a, 0xaf, 0xab, 0xaa, 0x42, 0xb0, 0x23, 0x60, 0x7a, 0x3a, 0xbe, 0xc1, 0x0a, 0xe8,
|
0x70, 0xc1, 0xeb, 0xbd, 0xae, 0xaa, 0x0a, 0xc1, 0x8e, 0x80, 0xe9, 0xe9, 0xf8, 0x06, 0x2b, 0xa0,
|
||||||
0x0d, 0x00, 0xec, 0x75, 0xdc, 0x86, 0xd5, 0xdc, 0x6f, 0x52, 0x65, 0x71, 0x39, 0xb3, 0x32, 0x96,
|
0x37, 0x00, 0xb0, 0xd7, 0x71, 0x1b, 0x56, 0x73, 0xbf, 0x49, 0x95, 0xc5, 0xe5, 0xcc, 0xca, 0x58,
|
||||||
0x3f, 0xdf, 0xeb, 0xaa, 0x48, 0xe8, 0xf9, 0xcc, 0xa7, 0xb7, 0x98, 0x53, 0xc3, 0x12, 0x12, 0xe5,
|
0xfe, 0x7c, 0xaf, 0xab, 0x22, 0xa1, 0xe7, 0x33, 0x9f, 0xde, 0x62, 0x4e, 0x0d, 0x4b, 0x48, 0x94,
|
||||||
0x61, 0xd6, 0x3c, 0x68, 0xd2, 0xb2, 0x5b, 0x70, 0x02, 0xc2, 0x8a, 0xa4, 0x72, 0x3e, 0x55, 0x8d,
|
0x87, 0x59, 0xf3, 0xa0, 0x49, 0xcb, 0x6e, 0xc1, 0x09, 0x08, 0x2b, 0x92, 0xca, 0xf9, 0x54, 0x35,
|
||||||
0x0e, 0x9a, 0x54, 0xf7, 0x5c, 0x9d, 0x15, 0xd6, 0x8e, 0x4f, 0x34, 0x9c, 0x60, 0xa0, 0xb7, 0x61,
|
0x3a, 0x68, 0x52, 0xdd, 0x73, 0x75, 0x56, 0x58, 0x3b, 0x3e, 0xd1, 0x70, 0x82, 0x81, 0xde, 0x86,
|
||||||
0xca, 0x74, 0x9d, 0xed, 0x16, 0xa9, 0xb4, 0x7d, 0x6f, 0x47, 0xb9, 0xc0, 0x05, 0x2e, 0xf4, 0xba,
|
0x29, 0xd3, 0x75, 0xb6, 0x5b, 0xa4, 0xd2, 0xf6, 0xbd, 0x1d, 0xe5, 0x02, 0x17, 0xb8, 0xd0, 0xeb,
|
||||||
0xea, 0x42, 0x28, 0xc0, 0x9d, 0x7a, 0x9b, 0x79, 0x35, 0x2c, 0x63, 0xd1, 0x3d, 0x98, 0x62, 0x32,
|
0xaa, 0x0b, 0xa1, 0x00, 0x77, 0xea, 0x6d, 0xe6, 0xd5, 0xb0, 0x8c, 0x45, 0xf7, 0x60, 0x8a, 0xc9,
|
||||||
0x7c, 0x31, 0x9b, 0x81, 0xa2, 0xf2, 0x7d, 0x90, 0x8e, 0x69, 0x9d, 0x17, 0x62, 0xbe, 0x09, 0x6c,
|
0xf0, 0xc5, 0x6c, 0x06, 0x8a, 0xca, 0xf7, 0x41, 0x3a, 0xa6, 0x75, 0x5e, 0x88, 0xf9, 0x26, 0xb0,
|
||||||
0xf1, 0x32, 0x98, 0x4d, 0xcb, 0x86, 0xd5, 0xbd, 0xce, 0xce, 0x4e, 0x8b, 0x28, 0xcb, 0xc9, 0x69,
|
0xc5, 0xcb, 0x60, 0x36, 0x2d, 0x1b, 0x56, 0xf7, 0x3a, 0x3b, 0x3b, 0x2d, 0xa2, 0x2c, 0x27, 0xa7,
|
||||||
0x39, 0x37, 0x10, 0xde, 0x90, 0x1a, 0x62, 0xd1, 0xcb, 0x30, 0xc6, 0x86, 0x81, 0x72, 0x8d, 0x75,
|
0xe5, 0xdc, 0x40, 0x78, 0x43, 0x6a, 0x88, 0x45, 0x2f, 0xc3, 0x18, 0x1b, 0x06, 0xca, 0x35, 0xd6,
|
||||||
0xa2, 0xf9, 0x5c, 0xaf, 0xab, 0x4e, 0xf7, 0x49, 0x81, 0x86, 0x85, 0x1b, 0x6d, 0x48, 0x1d, 0x47,
|
0x89, 0xe6, 0x73, 0xbd, 0xae, 0x3a, 0xdd, 0x27, 0x05, 0x1a, 0x16, 0x6e, 0xb4, 0x21, 0x75, 0x1c,
|
||||||
0xc1, 0xdb, 0xdf, 0x77, 0xdc, 0x46, 0xa0, 0x68, 0x9c, 0x73, 0xb5, 0xd7, 0x55, 0x2f, 0x26, 0x3b,
|
0x05, 0x6f, 0x7f, 0xdf, 0x71, 0x1b, 0x81, 0xa2, 0x71, 0xce, 0xd5, 0x5e, 0x57, 0xbd, 0x98, 0xec,
|
||||||
0x8e, 0x7a, 0x88, 0x91, 0x1b, 0x8e, 0x88, 0xc7, 0x8e, 0x23, 0xee, 0xb8, 0x2e, 0xf1, 0x59, 0x07,
|
0x38, 0xea, 0x21, 0x46, 0x6e, 0x38, 0x22, 0x1e, 0x3b, 0x8e, 0xb8, 0xe3, 0xba, 0xc4, 0x67, 0x1d,
|
||||||
0xc4, 0x1f, 0xcb, 0x9b, 0xc9, 0x2a, 0xe5, 0x73, 0x3f, 0xef, 0x96, 0xa2, 0x2a, 0x15, 0xa7, 0xa0,
|
0x10, 0xbf, 0x96, 0x37, 0x93, 0x55, 0xca, 0xe7, 0x7e, 0xde, 0x2d, 0x45, 0x55, 0x2a, 0x4e, 0x41,
|
||||||
0x22, 0xe4, 0xcc, 0x03, 0x4a, 0x7c, 0xd7, 0x69, 0x1d, 0xc9, 0xac, 0x72, 0x19, 0x29, 0x20, 0x12,
|
0x45, 0xc8, 0x99, 0x07, 0x94, 0xf8, 0xae, 0xd3, 0x3a, 0x92, 0x59, 0xe5, 0x32, 0x52, 0x40, 0x24,
|
||||||
0x22, 0x64, 0xa1, 0x14, 0x0d, 0xdd, 0x81, 0xc9, 0x2a, 0xf5, 0x49, 0x10, 0x10, 0x3f, 0x50, 0x08,
|
0x44, 0xc8, 0x42, 0x29, 0x1a, 0xba, 0x03, 0x93, 0x55, 0xea, 0x93, 0x20, 0x20, 0x7e, 0xa0, 0x10,
|
||||||
0x5f, 0x94, 0xd4, 0xb6, 0x05, 0x91, 0x4b, 0xc3, 0x7d, 0x18, 0xba, 0x0d, 0x13, 0x85, 0x3d, 0x52,
|
0xbe, 0x28, 0xa9, 0x6d, 0x0b, 0x22, 0x97, 0x86, 0xfb, 0x30, 0x74, 0x1b, 0x26, 0x0a, 0x7b, 0xa4,
|
||||||
0x7f, 0xc6, 0x28, 0x3b, 0x9c, 0x22, 0x3d, 0xd5, 0xf5, 0xd0, 0xa3, 0xe1, 0x23, 0x10, 0x2b, 0x89,
|
0xfe, 0x8c, 0x51, 0x76, 0x38, 0x45, 0xba, 0xd5, 0xf5, 0xd0, 0xa3, 0xe1, 0x23, 0x10, 0x2b, 0x89,
|
||||||
0x82, 0xbd, 0x41, 0x0e, 0x79, 0xfb, 0xcd, 0x9b, 0xa6, 0x31, 0xf9, 0x7c, 0x89, 0x99, 0xf8, 0x55,
|
0x82, 0xbd, 0x41, 0x0e, 0x79, 0xfb, 0xcd, 0x9b, 0xa6, 0x31, 0xf9, 0x7c, 0x89, 0x99, 0xf8, 0x53,
|
||||||
0x1b, 0x34, 0x3f, 0x26, 0x1a, 0x8e, 0x33, 0xd0, 0x23, 0x40, 0x31, 0x83, 0xe5, 0xf8, 0xbb, 0x44,
|
0x1b, 0x34, 0x3f, 0x26, 0x1a, 0x8e, 0x33, 0xd0, 0x23, 0x40, 0x31, 0x83, 0xe5, 0xf8, 0xbb, 0x44,
|
||||||
0x74, 0x4d, 0x63, 0xf9, 0xe5, 0x5e, 0x57, 0xbd, 0x32, 0x50, 0x47, 0x6f, 0x31, 0x9c, 0x86, 0x07,
|
0x74, 0x4d, 0x63, 0xf9, 0xe5, 0x5e, 0x57, 0xbd, 0x32, 0x50, 0x47, 0x6f, 0x31, 0x9c, 0x86, 0x07,
|
||||||
0x90, 0xd1, 0x13, 0x38, 0xd7, 0xb7, 0x76, 0x76, 0x76, 0x9a, 0x07, 0xd8, 0x71, 0x77, 0x89, 0xf2,
|
0x90, 0xd1, 0x13, 0x38, 0xd7, 0xb7, 0x76, 0x76, 0x76, 0x9a, 0x07, 0xd8, 0x71, 0x77, 0x89, 0xf2,
|
||||||
@ -5105,89 +5116,89 @@ var fileDescriptorRpc = []byte{
|
|||||||
0x68, 0x38, 0x49, 0x43, 0xef, 0x47, 0xb9, 0x11, 0xc5, 0x3d, 0x10, 0x1d, 0xe4, 0x98, 0x5c, 0x80,
|
0x68, 0x38, 0x49, 0x43, 0xef, 0x47, 0xb9, 0x11, 0xc5, 0x3d, 0x10, 0x1d, 0xe4, 0x98, 0x5c, 0x80,
|
||||||
0x43, 0x1d, 0xd1, 0x16, 0x04, 0x47, 0xa9, 0x09, 0x09, 0xe8, 0xf5, 0xe8, 0x08, 0x3d, 0xaa, 0x54,
|
0x43, 0x1d, 0xd1, 0x16, 0x04, 0x47, 0xa9, 0x09, 0x09, 0xe8, 0xf5, 0xe8, 0x08, 0x3d, 0xaa, 0x54,
|
||||||
0x45, 0xef, 0x38, 0x26, 0xf7, 0xf1, 0x21, 0xfb, 0xc3, 0x76, 0xff, 0x10, 0x3d, 0xaa, 0x54, 0xb5,
|
0x45, 0xef, 0x38, 0x26, 0xf7, 0xf1, 0x21, 0xfb, 0xc3, 0x76, 0xff, 0x10, 0x3d, 0xaa, 0x54, 0xb5,
|
||||||
0xef, 0xcc, 0x89, 0x6e, 0x93, 0xdd, 0xe2, 0xfd, 0xb7, 0x46, 0xf9, 0x16, 0x77, 0x9d, 0x7d, 0xa2,
|
0xef, 0xcc, 0x89, 0x6e, 0x93, 0xbd, 0xe2, 0xfd, 0xaf, 0x46, 0xf9, 0x15, 0x77, 0x9d, 0x7d, 0xa2,
|
||||||
0x61, 0xee, 0x94, 0xeb, 0xc8, 0xc8, 0x29, 0xea, 0xc8, 0x2a, 0x8c, 0x3f, 0x31, 0x2c, 0x86, 0xce,
|
0x61, 0xee, 0x94, 0xeb, 0xc8, 0xc8, 0x29, 0xea, 0xc8, 0x2a, 0x8c, 0x3f, 0x31, 0x2c, 0x86, 0xce,
|
||||||
0x26, 0xcb, 0xc8, 0x47, 0x4e, 0x4b, 0x80, 0x43, 0x04, 0x2a, 0xc3, 0xc2, 0x3a, 0x71, 0x7c, 0xba,
|
0x26, 0xcb, 0xc8, 0x47, 0x4e, 0x4b, 0x80, 0x43, 0x04, 0x2a, 0xc3, 0xc2, 0x3a, 0x71, 0x7c, 0xba,
|
||||||
0x4d, 0x1c, 0x5a, 0x74, 0x29, 0xf1, 0x9f, 0x3b, 0xad, 0xb0, 0x4a, 0x64, 0xe5, 0xdd, 0xdc, 0x8b,
|
0x4d, 0x1c, 0x5a, 0x74, 0x29, 0xf1, 0x9f, 0x3b, 0xad, 0xb0, 0x4a, 0x64, 0xe5, 0xdd, 0xdc, 0x8b,
|
||||||
0x40, 0x7a, 0x33, 0x44, 0x69, 0x78, 0x10, 0x13, 0x15, 0x61, 0xde, 0x6c, 0x91, 0x3a, 0x7b, 0xef,
|
0x40, 0x7a, 0x33, 0x44, 0x69, 0x78, 0x10, 0x13, 0x15, 0x61, 0xde, 0x6c, 0x91, 0x3a, 0xfb, 0xee,
|
||||||
0xb6, 0x9b, 0xfb, 0xc4, 0xeb, 0xd0, 0xcd, 0x80, 0x57, 0x8b, 0xac, 0xfc, 0x94, 0x93, 0x10, 0xa2,
|
0xb6, 0x9b, 0xfb, 0xc4, 0xeb, 0xd0, 0xcd, 0x80, 0x57, 0x8b, 0xac, 0x7c, 0xcb, 0x49, 0x08, 0xd1,
|
||||||
0x53, 0x81, 0xd1, 0x70, 0x9a, 0xc5, 0x1e, 0x74, 0xab, 0x19, 0x50, 0xe2, 0x4a, 0xef, 0xcd, 0x8b,
|
0xa9, 0xc0, 0x68, 0x38, 0xcd, 0x62, 0x17, 0xdd, 0x6a, 0x06, 0x94, 0xb8, 0xd2, 0x77, 0xf3, 0x62,
|
||||||
0xc9, 0x9b, 0xa7, 0xc5, 0x11, 0x51, 0x8b, 0xdf, 0xf1, 0x5b, 0x81, 0x86, 0x53, 0x34, 0x84, 0x61,
|
0xf2, 0xe5, 0x69, 0x71, 0x44, 0xd4, 0xe2, 0x77, 0xfc, 0x56, 0xa0, 0xe1, 0x14, 0x0d, 0x61, 0x58,
|
||||||
0xc1, 0x68, 0x3c, 0x27, 0x3e, 0x6d, 0x06, 0x44, 0x52, 0x3b, 0xcf, 0xd5, 0xa4, 0x07, 0xc8, 0x89,
|
0x30, 0x1a, 0xcf, 0x89, 0x4f, 0x9b, 0x01, 0x91, 0xd4, 0xce, 0x73, 0x35, 0xe9, 0x02, 0x39, 0x11,
|
||||||
0x40, 0x71, 0xc1, 0x41, 0x64, 0xf4, 0x76, 0xd4, 0xea, 0x1a, 0x1d, 0xea, 0xd9, 0x56, 0x35, 0xbc,
|
0x28, 0x2e, 0x38, 0x88, 0x8c, 0xde, 0x8e, 0x5a, 0x5d, 0xa3, 0x43, 0x3d, 0xdb, 0xaa, 0x86, 0xaf,
|
||||||
0xf5, 0xa5, 0xdc, 0x38, 0x1d, 0xea, 0xe9, 0x94, 0x09, 0xc4, 0x91, 0xec, 0x1e, 0xec, 0xb7, 0xde,
|
0xbe, 0x94, 0x1b, 0xa7, 0x43, 0x3d, 0x9d, 0x32, 0x81, 0x38, 0x92, 0xbd, 0x83, 0xfd, 0xd6, 0xdb,
|
||||||
0x46, 0x87, 0xee, 0x29, 0x0a, 0xe7, 0x0e, 0xe9, 0xd6, 0x9d, 0x4e, 0xa2, 0x5b, 0x67, 0x14, 0xf4,
|
0xe8, 0xd0, 0x3d, 0x45, 0xe1, 0xdc, 0x21, 0xdd, 0xba, 0xd3, 0x49, 0x74, 0xeb, 0x8c, 0x82, 0xbe,
|
||||||
0x2d, 0x59, 0x84, 0xbd, 0xf0, 0x2b, 0x17, 0x93, 0x2f, 0x9e, 0x9c, 0xbd, 0xd3, 0x64, 0x97, 0x7f,
|
0x25, 0x8b, 0xb0, 0x0f, 0x7e, 0xe5, 0x62, 0xf2, 0xc3, 0x93, 0xb3, 0x77, 0x9a, 0xec, 0xf1, 0x4f,
|
||||||
0x02, 0xdb, 0x8f, 0x7e, 0x83, 0x1c, 0x72, 0xf2, 0xa5, 0xe4, 0xc9, 0x62, 0x4f, 0x8e, 0xe0, 0xc6,
|
0x60, 0xfb, 0xd1, 0x6f, 0x90, 0x43, 0x4e, 0xbe, 0x94, 0x3c, 0x59, 0xec, 0xe6, 0x08, 0x6e, 0x1c,
|
||||||
0x91, 0xc8, 0x4a, 0xb5, 0xd2, 0x5c, 0xe0, 0x72, 0xb2, 0xd1, 0x97, 0xda, 0x34, 0xa1, 0x33, 0x88,
|
0x89, 0xac, 0x54, 0x2b, 0xcd, 0x05, 0x2e, 0x27, 0x1b, 0x7d, 0xa9, 0x4d, 0x13, 0x3a, 0x83, 0x68,
|
||||||
0xc6, 0xf6, 0x42, 0xa4, 0x8b, 0xf5, 0x70, 0x3c, 0x2b, 0x2a, 0xcf, 0x8a, 0xb4, 0x17, 0x61, 0x8e,
|
0x6c, 0x2f, 0x44, 0xba, 0x58, 0x0f, 0xc7, 0xb3, 0xa2, 0xf2, 0xac, 0x48, 0x7b, 0x11, 0xe6, 0x98,
|
||||||
0x79, 0xef, 0x27, 0x12, 0x92, 0xa0, 0x20, 0x1b, 0xe6, 0x8f, 0x52, 0x74, 0xa4, 0xb3, 0xcc, 0x75,
|
0xf7, 0x7e, 0x22, 0x21, 0x09, 0x0a, 0xb2, 0x61, 0xfe, 0x28, 0x45, 0x47, 0x3a, 0xcb, 0x5c, 0x47,
|
||||||
0xa4, 0xdb, 0xa6, 0xe9, 0x36, 0x69, 0xd3, 0x69, 0xe9, 0xfd, 0x2c, 0x4b, 0x92, 0x69, 0x01, 0x56,
|
0x7a, 0x6d, 0x9a, 0x6e, 0x93, 0x36, 0x9d, 0x96, 0xde, 0xcf, 0xb2, 0x24, 0x99, 0x16, 0x60, 0xa5,
|
||||||
0x9a, 0xd9, 0xff, 0x51, 0x7e, 0xaf, 0xf1, 0x1c, 0x25, 0xfb, 0xe3, 0x7e, 0x92, 0x65, 0x30, 0x7b,
|
0x99, 0xfd, 0x3f, 0xca, 0xef, 0x35, 0x9e, 0xa3, 0x64, 0x7f, 0xdc, 0x4f, 0xb2, 0x0c, 0x66, 0x1f,
|
||||||
0x41, 0xe5, 0x9d, 0x7a, 0x3c, 0xcd, 0x1a, 0x97, 0x90, 0x0e, 0x9c, 0x68, 0xef, 0x53, 0xb9, 0x1e,
|
0xa8, 0xbc, 0x53, 0x8f, 0xa7, 0x59, 0xe3, 0x12, 0xd2, 0x81, 0x13, 0xed, 0x7d, 0x2a, 0xd7, 0x03,
|
||||||
0xc0, 0x65, 0x1d, 0x6d, 0xd4, 0xfb, 0xf3, 0xfd, 0xbe, 0x3e, 0xfc, 0x55, 0x41, 0x6c, 0x77, 0x0c,
|
0xb8, 0xac, 0xa3, 0x8d, 0x7a, 0x7f, 0xbe, 0xdf, 0xd7, 0x87, 0x7f, 0x2a, 0x88, 0xed, 0x8e, 0xc1,
|
||||||
0x1e, 0x2d, 0x26, 0x4a, 0xf7, 0x4b, 0x43, 0x9b, 0x7d, 0x41, 0x96, 0xc1, 0x68, 0x33, 0xd1, 0x9c,
|
0xa3, 0xc5, 0x44, 0xe9, 0x7e, 0x69, 0x68, 0xb3, 0x2f, 0xc8, 0x32, 0x18, 0x6d, 0x26, 0x9a, 0x73,
|
||||||
0x73, 0x85, 0x1b, 0x27, 0xf5, 0xe6, 0x42, 0x28, 0xcd, 0x64, 0x1d, 0x57, 0x51, 0xa4, 0xa2, 0xd0,
|
0xae, 0x70, 0xe3, 0xa4, 0xde, 0x5c, 0x08, 0xa5, 0x99, 0xac, 0xe3, 0x2a, 0x8a, 0x54, 0x14, 0x5a,
|
||||||
0xea, 0xf0, 0x0f, 0x6e, 0x37, 0x93, 0x67, 0x27, 0x4a, 0x55, 0x5d, 0x00, 0x34, 0x9c, 0x60, 0xb0,
|
0x1d, 0xfe, 0x83, 0xdb, 0xcd, 0xe4, 0xd9, 0x89, 0x52, 0x55, 0x17, 0x00, 0x0d, 0x27, 0x18, 0xec,
|
||||||
0x27, 0x3a, 0x6e, 0xa9, 0x52, 0x87, 0x92, 0xb0, 0x11, 0x90, 0x36, 0x38, 0x21, 0xa4, 0x07, 0x0c,
|
0x46, 0xc7, 0x2d, 0x55, 0xea, 0x50, 0x12, 0x36, 0x02, 0xd2, 0x06, 0x27, 0x84, 0xf4, 0x80, 0xc1,
|
||||||
0xa6, 0xe1, 0x41, 0xe4, 0xb4, 0xa6, 0xed, 0x3d, 0x23, 0xae, 0xf2, 0xca, 0x49, 0x9a, 0x94, 0xc1,
|
0x34, 0x3c, 0x88, 0x9c, 0xd6, 0xb4, 0xbd, 0x67, 0xc4, 0x55, 0x5e, 0x39, 0x49, 0x93, 0x32, 0x58,
|
||||||
0x52, 0x9a, 0x9c, 0x8c, 0xee, 0xc3, 0x4c, 0xf4, 0x7a, 0x50, 0xf0, 0x3a, 0x2e, 0x55, 0xee, 0xf2,
|
0x4a, 0x93, 0x93, 0xd1, 0x7d, 0x98, 0x89, 0x3e, 0x0f, 0x0a, 0x5e, 0xc7, 0xa5, 0xca, 0x5d, 0xfe,
|
||||||
0xbb, 0x50, 0x2e, 0x30, 0xd1, 0x7b, 0x48, 0x9d, 0xf9, 0x59, 0x81, 0x91, 0xf1, 0xc8, 0x82, 0xf9,
|
0x16, 0xca, 0x05, 0x26, 0xfa, 0x0e, 0xa9, 0x33, 0x3f, 0x2b, 0x30, 0x32, 0x1e, 0x59, 0x30, 0xff,
|
||||||
0x47, 0x1d, 0x8f, 0x3a, 0x79, 0xa7, 0xfe, 0x8c, 0xb8, 0x8d, 0xfc, 0x21, 0x25, 0x81, 0xf2, 0x3a,
|
0xa8, 0xe3, 0x51, 0x27, 0xef, 0xd4, 0x9f, 0x11, 0xb7, 0x91, 0x3f, 0xa4, 0x24, 0x50, 0x5e, 0xe7,
|
||||||
0x17, 0x91, 0xda, 0xef, 0x0f, 0x19, 0x44, 0xdf, 0x16, 0x18, 0x7d, 0x9b, 0x81, 0x34, 0x9c, 0x26,
|
0x22, 0x52, 0xfb, 0xfd, 0x21, 0x83, 0xe8, 0xdb, 0x02, 0xa3, 0x6f, 0x33, 0x90, 0x86, 0xd3, 0x44,
|
||||||
0xb2, 0x52, 0x52, 0xf1, 0xc9, 0x63, 0x8f, 0x12, 0xe5, 0x7e, 0xf2, 0xba, 0x6a, 0xfb, 0x44, 0x7f,
|
0x56, 0x4a, 0x2a, 0x3e, 0x79, 0xec, 0x51, 0xa2, 0xdc, 0x4f, 0x3e, 0x57, 0x6d, 0x9f, 0xe8, 0xcf,
|
||||||
0xee, 0xb1, 0xdd, 0x89, 0x30, 0xf2, 0x8e, 0x78, 0xbe, 0xdf, 0x69, 0x53, 0xde, 0xd5, 0x28, 0xef,
|
0x3d, 0xb6, 0x3b, 0x11, 0x46, 0xde, 0x11, 0xcf, 0xf7, 0x3b, 0x6d, 0xca, 0xbb, 0x1a, 0xe5, 0xfd,
|
||||||
0x27, 0x8f, 0xf1, 0xd1, 0x8e, 0x08, 0x94, 0xce, 0xfb, 0x20, 0x69, 0x47, 0x24, 0x32, 0xba, 0x09,
|
0xe4, 0x31, 0x3e, 0xda, 0x11, 0x81, 0xd2, 0x79, 0x1f, 0x24, 0xed, 0x88, 0x44, 0x46, 0x37, 0x61,
|
||||||
0xe3, 0x96, 0xb7, 0xbb, 0x4b, 0x7c, 0xe5, 0x21, 0xdf, 0xd8, 0xf9, 0x5e, 0x57, 0x9d, 0x09, 0x1f,
|
0xdc, 0xf2, 0x76, 0x77, 0x89, 0xaf, 0x3c, 0xe4, 0x1b, 0x3b, 0xdf, 0xeb, 0xaa, 0x33, 0xe1, 0x45,
|
||||||
0x74, 0x6e, 0xd7, 0x70, 0x08, 0x40, 0x77, 0x61, 0xd2, 0xf2, 0x76, 0xcb, 0x1d, 0xda, 0xee, 0x50,
|
0xe7, 0x76, 0x0d, 0x87, 0x00, 0x74, 0x17, 0x26, 0x2d, 0x6f, 0xb7, 0xdc, 0xa1, 0xed, 0x0e, 0x55,
|
||||||
0x65, 0x3d, 0xf9, 0x8d, 0xac, 0xe5, 0xed, 0xea, 0x1e, 0xf7, 0x69, 0xb8, 0x8f, 0x63, 0x9d, 0xed,
|
0xd6, 0xf9, 0x75, 0x96, 0x6a, 0x6b, 0xcb, 0xdb, 0xd5, 0x3d, 0xee, 0xd3, 0x70, 0x1f, 0xc7, 0x3a,
|
||||||
0x1a, 0xd9, 0xee, 0xec, 0x2a, 0x45, 0x1e, 0xa5, 0xd4, 0xd9, 0x36, 0x98, 0x59, 0xc3, 0xc2, 0xbd,
|
0xdb, 0x35, 0xb2, 0xdd, 0xd9, 0x55, 0x8a, 0x3c, 0x4a, 0xa9, 0xb3, 0x6d, 0x30, 0xb3, 0x86, 0x85,
|
||||||
0xfa, 0xd3, 0xac, 0xf4, 0x19, 0x19, 0xcd, 0xc1, 0x54, 0xa9, 0x6c, 0xd7, 0xaa, 0xb6, 0x81, 0x6d,
|
0x7b, 0xf5, 0xa7, 0x59, 0xe9, 0x67, 0x64, 0x34, 0x07, 0x53, 0xa5, 0xb2, 0x5d, 0xab, 0xda, 0x06,
|
||||||
0x73, 0x2d, 0x77, 0x06, 0x9d, 0x07, 0x54, 0x2c, 0x15, 0xed, 0xa2, 0x61, 0x09, 0x63, 0xcd, 0xb4,
|
0xb6, 0xcd, 0xb5, 0xdc, 0x19, 0x74, 0x1e, 0x50, 0xb1, 0x54, 0xb4, 0x8b, 0x86, 0x25, 0x8c, 0x35,
|
||||||
0x0b, 0x6b, 0x39, 0x40, 0x39, 0x98, 0xc6, 0xa6, 0x64, 0x99, 0x62, 0x96, 0x6a, 0xf1, 0xa1, 0x6d,
|
0xd3, 0x2e, 0xac, 0xe5, 0x00, 0xe5, 0x60, 0x1a, 0x9b, 0x92, 0x65, 0x8a, 0x59, 0xaa, 0xc5, 0x87,
|
||||||
0xe2, 0x4d, 0x61, 0x39, 0x87, 0x96, 0xe1, 0x4a, 0xb5, 0xf8, 0xf0, 0xd1, 0x56, 0x51, 0x60, 0x6a,
|
0xb6, 0x89, 0x37, 0x85, 0xe5, 0x1c, 0x5a, 0x86, 0x2b, 0xd5, 0xe2, 0xc3, 0x47, 0x5b, 0x45, 0x81,
|
||||||
0x46, 0x69, 0xad, 0x86, 0xcd, 0xcd, 0xf2, 0x63, 0xb3, 0xb6, 0x66, 0xd8, 0x46, 0x6e, 0x11, 0xcd,
|
0xa9, 0x19, 0xa5, 0xb5, 0x1a, 0x36, 0x37, 0xcb, 0x8f, 0xcd, 0xda, 0x9a, 0x61, 0x1b, 0xb9, 0x45,
|
||||||
0xc3, 0x4c, 0xd5, 0x78, 0x6c, 0xd6, 0xaa, 0x25, 0xa3, 0x52, 0x5d, 0x2f, 0xdb, 0xb9, 0x25, 0x74,
|
0x34, 0x0f, 0x33, 0x55, 0xe3, 0xb1, 0x59, 0xab, 0x96, 0x8c, 0x4a, 0x75, 0xbd, 0x6c, 0xe7, 0x96,
|
||||||
0x0d, 0xae, 0x32, 0xe1, 0x32, 0x36, 0x6b, 0xd1, 0x04, 0x0f, 0x70, 0x79, 0xb3, 0x0f, 0x51, 0xd1,
|
0xd0, 0x35, 0xb8, 0xca, 0x84, 0xcb, 0xd8, 0xac, 0x45, 0x13, 0x3c, 0xc0, 0xe5, 0xcd, 0x3e, 0x44,
|
||||||
0x45, 0x58, 0x1c, 0xec, 0x5a, 0x66, 0xec, 0xd4, 0x94, 0x06, 0x2e, 0xac, 0x17, 0xa3, 0x39, 0x57,
|
0x45, 0x17, 0x61, 0x71, 0xb0, 0x6b, 0x99, 0xb1, 0x53, 0x53, 0x1a, 0xb8, 0xb0, 0x5e, 0x8c, 0xe6,
|
||||||
0xd0, 0x6d, 0x78, 0xe5, 0xb8, 0xa8, 0xf8, 0xb8, 0x6a, 0x97, 0x2b, 0x35, 0xe3, 0xa1, 0x59, 0xb2,
|
0x5c, 0x41, 0xb7, 0xe1, 0x95, 0xe3, 0xa2, 0xe2, 0xe3, 0xaa, 0x5d, 0xae, 0xd4, 0x8c, 0x87, 0x66,
|
||||||
0x73, 0x37, 0xd1, 0x55, 0xb8, 0x98, 0xb7, 0x8c, 0xc2, 0xc6, 0x7a, 0xd9, 0x32, 0x6b, 0x15, 0xd3,
|
0xc9, 0xce, 0xdd, 0x44, 0x57, 0xe1, 0x62, 0xde, 0x32, 0x0a, 0x1b, 0xeb, 0x65, 0xcb, 0xac, 0x55,
|
||||||
0xc4, 0xb5, 0x4a, 0x19, 0xdb, 0x35, 0xfb, 0x69, 0x0d, 0x3f, 0xcd, 0x35, 0x90, 0x0a, 0x97, 0xb7,
|
0x4c, 0x13, 0xd7, 0x2a, 0x65, 0x6c, 0xd7, 0xec, 0xa7, 0x35, 0xfc, 0x34, 0xd7, 0x40, 0x2a, 0x5c,
|
||||||
0x4a, 0xc3, 0x01, 0x04, 0x5d, 0x82, 0xc5, 0x35, 0xd3, 0x32, 0x3e, 0x48, 0xb9, 0x5e, 0x64, 0xd0,
|
0xde, 0x2a, 0x0d, 0x07, 0x10, 0x74, 0x09, 0x16, 0xd7, 0x4c, 0xcb, 0xf8, 0x20, 0xe5, 0x7a, 0x91,
|
||||||
0x15, 0xb8, 0xb0, 0x55, 0x1a, 0xec, 0xfd, 0x2c, 0xb3, 0xfa, 0x37, 0x80, 0x51, 0xf6, 0xfe, 0x81,
|
0x41, 0x57, 0xe0, 0xc2, 0x56, 0x69, 0xb0, 0xf7, 0xb3, 0xcc, 0xea, 0xdf, 0x00, 0x46, 0xd9, 0xf7,
|
||||||
0x14, 0x38, 0x17, 0xed, 0x6d, 0xb9, 0x64, 0xd6, 0x1e, 0x94, 0x2d, 0xab, 0xfc, 0xc4, 0xc4, 0xb9,
|
0x07, 0x52, 0xe0, 0x5c, 0xb4, 0xb7, 0xe5, 0x92, 0x59, 0x7b, 0x50, 0xb6, 0xac, 0xf2, 0x13, 0x13,
|
||||||
0x33, 0xe1, 0x6a, 0x52, 0x9e, 0xda, 0x56, 0xc9, 0x2e, 0x5a, 0x35, 0x1b, 0x17, 0x1f, 0x3e, 0x34,
|
0xe7, 0xce, 0x84, 0xab, 0x49, 0x79, 0x6a, 0x5b, 0x25, 0xbb, 0x68, 0xd5, 0x6c, 0x5c, 0x7c, 0xf8,
|
||||||
0x71, 0x7f, 0x87, 0x32, 0x08, 0xc1, 0x6c, 0x44, 0xb0, 0x4c, 0x63, 0xcd, 0xc4, 0xb9, 0x11, 0x74,
|
0xd0, 0xc4, 0xfd, 0x1d, 0xca, 0x20, 0x04, 0xb3, 0x11, 0xc1, 0x32, 0x8d, 0x35, 0x13, 0xe7, 0x46,
|
||||||
0x13, 0x6e, 0xc4, 0x6d, 0xc3, 0xe8, 0x59, 0x99, 0xfe, 0x68, 0xab, 0x8c, 0xb7, 0x36, 0x73, 0xa3,
|
0xd0, 0x4d, 0xb8, 0x11, 0xb7, 0x0d, 0xa3, 0x67, 0x65, 0xfa, 0xa3, 0xad, 0x32, 0xde, 0xda, 0xcc,
|
||||||
0xec, 0xd0, 0x44, 0x36, 0xc3, 0xb2, 0x72, 0x63, 0xe8, 0x3a, 0xa8, 0xd1, 0x16, 0x4b, 0xbb, 0x1b,
|
0x8d, 0xb2, 0x43, 0x13, 0xd9, 0x0c, 0xcb, 0xca, 0x8d, 0xa1, 0xeb, 0xa0, 0x46, 0x5b, 0x2c, 0xed,
|
||||||
0x8b, 0x1c, 0xd0, 0x3d, 0x78, 0xe3, 0x04, 0xd0, 0xb0, 0x28, 0xa6, 0x58, 0x4a, 0x06, 0x70, 0xc3,
|
0x6e, 0x2c, 0x72, 0x40, 0xf7, 0xe0, 0x8d, 0x13, 0x40, 0xc3, 0xa2, 0x98, 0x62, 0x29, 0x19, 0xc0,
|
||||||
0xf5, 0x4c, 0xa3, 0xd7, 0xe1, 0xb5, 0xa1, 0xee, 0x61, 0xa2, 0x33, 0xe8, 0x01, 0xe4, 0x07, 0xb0,
|
0x0d, 0xd7, 0x33, 0x8d, 0x5e, 0x87, 0xd7, 0x86, 0xba, 0x87, 0x89, 0xce, 0xa0, 0x07, 0x90, 0x1f,
|
||||||
0xc4, 0x2a, 0x43, 0x8b, 0x38, 0x97, 0xa1, 0x50, 0x44, 0x0d, 0x0f, 0x61, 0x01, 0x1b, 0x76, 0x61,
|
0xc0, 0x12, 0xab, 0x0c, 0x2d, 0xe2, 0x5c, 0x86, 0x42, 0x11, 0x35, 0x3c, 0x84, 0x05, 0x6c, 0xd8,
|
||||||
0x3d, 0x37, 0x8b, 0x56, 0xe1, 0xe5, 0xa1, 0xc7, 0x21, 0xbe, 0x09, 0x0d, 0x64, 0xc0, 0xbb, 0xa7,
|
0x85, 0xf5, 0xdc, 0x2c, 0x5a, 0x85, 0x97, 0x87, 0x1e, 0x87, 0xf8, 0x26, 0x34, 0x90, 0x01, 0xef,
|
||||||
0xc3, 0x0e, 0x0b, 0x9b, 0xa0, 0x97, 0x60, 0x79, 0xb8, 0x44, 0xb8, 0x25, 0x3b, 0xe8, 0x1d, 0x78,
|
0x9e, 0x0e, 0x3b, 0x2c, 0x6c, 0x82, 0x5e, 0x82, 0xe5, 0xe1, 0x12, 0xe1, 0x96, 0xec, 0xa0, 0x77,
|
||||||
0xf3, 0x24, 0xd4, 0xb0, 0x29, 0x76, 0x8f, 0x9f, 0x22, 0x3c, 0x06, 0x7b, 0xec, 0xd9, 0x1b, 0x8e,
|
0xe0, 0xcd, 0x93, 0x50, 0xc3, 0xa6, 0xd8, 0x3d, 0x7e, 0x8a, 0xf0, 0x18, 0xec, 0xb1, 0xbb, 0x37,
|
||||||
0x62, 0x07, 0xa3, 0x89, 0xfe, 0x0f, 0xb4, 0x81, 0x87, 0x3d, 0xbe, 0x2d, 0x2f, 0x32, 0xe8, 0x16,
|
0x1c, 0xc5, 0x0e, 0x46, 0x13, 0xfd, 0x1f, 0x68, 0x03, 0x0f, 0x7b, 0x7c, 0x5b, 0x5e, 0x64, 0xd0,
|
||||||
0xdc, 0xc4, 0x46, 0x69, 0xad, 0xbc, 0x59, 0x3b, 0x05, 0xfe, 0xb3, 0x0c, 0x7a, 0x0f, 0xde, 0x3e,
|
0x2d, 0xb8, 0x89, 0x8d, 0xd2, 0x5a, 0x79, 0xb3, 0x76, 0x0a, 0xfc, 0x67, 0x19, 0xf4, 0x1e, 0xbc,
|
||||||
0x19, 0x38, 0x6c, 0x81, 0x9f, 0x67, 0x90, 0x09, 0xef, 0x9f, 0x7a, 0xbe, 0x61, 0x32, 0x5f, 0x64,
|
0x7d, 0x32, 0x70, 0xd8, 0x02, 0x3f, 0xcf, 0x20, 0x13, 0xde, 0x3f, 0xf5, 0x7c, 0xc3, 0x64, 0xbe,
|
||||||
0xd0, 0x35, 0xb8, 0x32, 0x98, 0x1f, 0xe6, 0xe1, 0xcb, 0x0c, 0x5a, 0x81, 0xeb, 0xc7, 0xce, 0x14,
|
0xc8, 0xa0, 0x6b, 0x70, 0x65, 0x30, 0x3f, 0xcc, 0xc3, 0x97, 0x19, 0xb4, 0x02, 0xd7, 0x8f, 0x9d,
|
||||||
0x22, 0xbf, 0xca, 0xa0, 0xb7, 0xe0, 0xee, 0x71, 0x90, 0x61, 0x61, 0xfc, 0x3a, 0x83, 0xee, 0xc3,
|
0x29, 0x44, 0x7e, 0x95, 0x41, 0x6f, 0xc1, 0xdd, 0xe3, 0x20, 0xc3, 0xc2, 0xf8, 0x75, 0x06, 0xdd,
|
||||||
0xbd, 0x53, 0xcc, 0x31, 0x4c, 0xe0, 0x37, 0xc7, 0xac, 0x23, 0x4c, 0xf6, 0xd7, 0x27, 0xaf, 0x23,
|
0x87, 0x7b, 0xa7, 0x98, 0x63, 0x98, 0xc0, 0x6f, 0x8e, 0x59, 0x47, 0x98, 0xec, 0xaf, 0x4f, 0x5e,
|
||||||
0x44, 0xfe, 0x36, 0x83, 0x96, 0xe0, 0xe2, 0x60, 0x08, 0x3b, 0x13, 0xbf, 0xcb, 0xa0, 0x1b, 0xb0,
|
0x47, 0x88, 0xfc, 0x6d, 0x06, 0x2d, 0xc1, 0xc5, 0xc1, 0x10, 0x76, 0x26, 0x7e, 0x97, 0x41, 0x37,
|
||||||
0x7c, 0xac, 0x12, 0x83, 0xfd, 0x3e, 0x83, 0x14, 0x58, 0x28, 0x95, 0x6b, 0x0f, 0x8c, 0xa2, 0x55,
|
0x60, 0xf9, 0x58, 0x25, 0x06, 0xfb, 0x7d, 0x06, 0x29, 0xb0, 0x50, 0x2a, 0xd7, 0x1e, 0x18, 0x45,
|
||||||
0x7b, 0x52, 0xb4, 0xd7, 0x6b, 0x55, 0x1b, 0x9b, 0xd5, 0x6a, 0xee, 0x17, 0x23, 0x2c, 0x94, 0x98,
|
0xab, 0xf6, 0xa4, 0x68, 0xaf, 0xd7, 0xaa, 0x36, 0x36, 0xab, 0xd5, 0xdc, 0x2f, 0x46, 0x58, 0x28,
|
||||||
0xa7, 0x54, 0x0e, 0x9d, 0xb5, 0x07, 0x65, 0x5c, 0xb3, 0x8a, 0x8f, 0xcd, 0x12, 0x43, 0x7e, 0x3a,
|
0x31, 0x4f, 0xa9, 0x1c, 0x3a, 0x6b, 0x0f, 0xca, 0xb8, 0x66, 0x15, 0x1f, 0x9b, 0x25, 0x86, 0xfc,
|
||||||
0x82, 0xe6, 0x00, 0x18, 0xac, 0x52, 0x2e, 0x96, 0xec, 0x6a, 0xee, 0x7b, 0x59, 0x34, 0x03, 0x13,
|
0x74, 0x04, 0xcd, 0x01, 0x30, 0x58, 0xa5, 0x5c, 0x2c, 0xd9, 0xd5, 0xdc, 0xf7, 0xb2, 0x68, 0x06,
|
||||||
0xe6, 0x53, 0xdb, 0xc4, 0x25, 0xc3, 0xca, 0xfd, 0x3d, 0xbb, 0xba, 0x0f, 0x13, 0xd1, 0x27, 0x0e,
|
0x26, 0xcc, 0xa7, 0xb6, 0x89, 0x4b, 0x86, 0x95, 0xfb, 0x7b, 0x76, 0x75, 0x1f, 0x26, 0xa2, 0x9f,
|
||||||
0x34, 0x0e, 0x23, 0x1b, 0x8f, 0x73, 0x67, 0xd0, 0x24, 0x8c, 0x59, 0xa6, 0x51, 0x35, 0x73, 0x19,
|
0x38, 0xd0, 0x38, 0x8c, 0x6c, 0x3c, 0xce, 0x9d, 0x41, 0x93, 0x30, 0x66, 0x99, 0x46, 0xd5, 0xcc,
|
||||||
0xb4, 0x00, 0x73, 0xa6, 0x65, 0x16, 0xec, 0x62, 0xb9, 0x54, 0xc3, 0x5b, 0xa5, 0x12, 0xbf, 0x3c,
|
0x65, 0xd0, 0x02, 0xcc, 0x99, 0x96, 0x59, 0xb0, 0x8b, 0xe5, 0x52, 0x0d, 0x6f, 0x95, 0x4a, 0xfc,
|
||||||
0x73, 0x30, 0xfd, 0x84, 0x3d, 0xf9, 0x91, 0x25, 0x8b, 0x16, 0x61, 0xde, 0x2a, 0x17, 0x36, 0x6a,
|
0xf1, 0xcc, 0xc1, 0xf4, 0x13, 0x76, 0xf3, 0x23, 0x4b, 0x16, 0x2d, 0xc2, 0xbc, 0x55, 0x2e, 0x6c,
|
||||||
0xd8, 0x28, 0x98, 0x38, 0x32, 0x8f, 0x32, 0x20, 0x17, 0x8a, 0x2c, 0x63, 0xab, 0x79, 0x38, 0x1b,
|
0xd4, 0xb0, 0x51, 0x30, 0x71, 0x64, 0x1e, 0x65, 0x40, 0x2e, 0x14, 0x59, 0xc6, 0x56, 0xf3, 0x70,
|
||||||
0x7e, 0x1f, 0x41, 0x53, 0x70, 0x76, 0xe3, 0x71, 0x6d, 0xdd, 0xa8, 0xae, 0xe7, 0xce, 0xf4, 0x91,
|
0x36, 0xfc, 0x7d, 0x04, 0x4d, 0xc1, 0xd9, 0x8d, 0xc7, 0xb5, 0x75, 0xa3, 0xba, 0x9e, 0x3b, 0xd3,
|
||||||
0xe6, 0xd3, 0x4a, 0x11, 0xb3, 0x99, 0x01, 0xc6, 0x8f, 0x26, 0x9c, 0x86, 0x89, 0x52, 0xb9, 0x56,
|
0x47, 0x9a, 0x4f, 0x2b, 0x45, 0xcc, 0x66, 0x06, 0x18, 0x3f, 0x9a, 0x70, 0x1a, 0x26, 0x4a, 0xe5,
|
||||||
0x58, 0x37, 0x0b, 0x1b, 0xb9, 0xec, 0x9d, 0xfb, 0x30, 0x69, 0xfb, 0x8e, 0x1b, 0xb4, 0x3d, 0x9f,
|
0x5a, 0x61, 0xdd, 0x2c, 0x6c, 0xe4, 0xb2, 0x77, 0xee, 0xc3, 0xa4, 0xed, 0x3b, 0x6e, 0xd0, 0xf6,
|
||||||
0xa2, 0x3b, 0xf2, 0x60, 0x36, 0xfc, 0x4a, 0x1b, 0xfe, 0x5e, 0x7c, 0x69, 0xee, 0x68, 0x2c, 0x7e,
|
0x7c, 0x8a, 0xee, 0xc8, 0x83, 0xd9, 0xf0, 0x57, 0xda, 0xf0, 0xef, 0xc5, 0x97, 0xe6, 0x8e, 0xc6,
|
||||||
0x4a, 0xd4, 0xce, 0xac, 0x64, 0x5e, 0xcb, 0xe4, 0xcf, 0xbd, 0xf8, 0xf3, 0xd2, 0x99, 0x17, 0xdf,
|
0xe2, 0x4f, 0x89, 0xda, 0x99, 0x95, 0xcc, 0x6b, 0x99, 0xfc, 0xb9, 0x17, 0x7f, 0x5e, 0x3a, 0xf3,
|
||||||
0x2c, 0x65, 0xbe, 0xfe, 0x66, 0x29, 0xf3, 0xa7, 0x6f, 0x96, 0x32, 0x3f, 0xf9, 0xcb, 0xd2, 0x99,
|
0xe2, 0x9b, 0xa5, 0xcc, 0xd7, 0xdf, 0x2c, 0x65, 0xfe, 0xf4, 0xcd, 0x52, 0xe6, 0x27, 0x7f, 0x59,
|
||||||
0xed, 0x71, 0xfe, 0x7b, 0xf3, 0xdd, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x2a, 0x7b, 0xc4, 0x2d,
|
0x3a, 0xb3, 0x3d, 0xce, 0xff, 0xde, 0x7c, 0xf7, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf0, 0xdc,
|
||||||
0xb8, 0x1e, 0x00, 0x00,
|
0x19, 0xd8, 0xb8, 0x1e, 0x00, 0x00,
|
||||||
}
|
}
|
||||||
|
@ -204,7 +204,7 @@ message Etcd {
|
|||||||
|
|
||||||
string Logger = 71 [(gogoproto.moretags) = "yaml:\"logger\""];
|
string Logger = 71 [(gogoproto.moretags) = "yaml:\"logger\""];
|
||||||
// LogOutput is the log file to store current etcd server logs.
|
// LogOutput is the log file to store current etcd server logs.
|
||||||
string LogOutput = 72 [(gogoproto.moretags) = "yaml:\"log-output\""];
|
repeated string LogOutput = 72 [(gogoproto.moretags) = "yaml:\"log-output\""];
|
||||||
bool Debug = 73 [(gogoproto.moretags) = "yaml:\"debug\""];
|
bool Debug = 73 [(gogoproto.moretags) = "yaml:\"debug\""];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -311,11 +311,17 @@ func read(lg *zap.Logger, fpath string) (*Cluster, error) {
|
|||||||
clus.Members[i].ClientCertData = string(data)
|
clus.Members[i].ClientCertData = string(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
if mem.Etcd.LogOutput == "" {
|
if len(mem.Etcd.LogOutput) == 0 {
|
||||||
return nil, fmt.Errorf("mem.Etcd.LogOutput cannot be empty")
|
return nil, fmt.Errorf("mem.Etcd.LogOutput cannot be empty")
|
||||||
}
|
}
|
||||||
if !strings.HasPrefix(mem.Etcd.LogOutput, mem.BaseDir) {
|
for _, v := range mem.Etcd.LogOutput {
|
||||||
return nil, fmt.Errorf("LogOutput %q must be prefixed with BaseDir %q", mem.Etcd.LogOutput, mem.BaseDir)
|
switch v {
|
||||||
|
case "stderr", "stdout", "/dev/null", "default":
|
||||||
|
default:
|
||||||
|
if !strings.HasPrefix(v, mem.BaseDir) {
|
||||||
|
return nil, fmt.Errorf("LogOutput %q must be prefixed with BaseDir %q", v, mem.BaseDir)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ func Test_read(t *testing.T) {
|
|||||||
PreVote: true,
|
PreVote: true,
|
||||||
InitialCorruptCheck: true,
|
InitialCorruptCheck: true,
|
||||||
Logger: "zap",
|
Logger: "zap",
|
||||||
LogOutput: "/tmp/etcd-functional-1/etcd.log",
|
LogOutput: []string{"/tmp/etcd-functional-1/etcd.log"},
|
||||||
Debug: true,
|
Debug: true,
|
||||||
},
|
},
|
||||||
ClientCertData: "",
|
ClientCertData: "",
|
||||||
@ -116,7 +116,7 @@ func Test_read(t *testing.T) {
|
|||||||
PreVote: true,
|
PreVote: true,
|
||||||
InitialCorruptCheck: true,
|
InitialCorruptCheck: true,
|
||||||
Logger: "zap",
|
Logger: "zap",
|
||||||
LogOutput: "/tmp/etcd-functional-2/etcd.log",
|
LogOutput: []string{"/tmp/etcd-functional-2/etcd.log"},
|
||||||
Debug: true,
|
Debug: true,
|
||||||
},
|
},
|
||||||
ClientCertData: "",
|
ClientCertData: "",
|
||||||
@ -169,7 +169,7 @@ func Test_read(t *testing.T) {
|
|||||||
PreVote: true,
|
PreVote: true,
|
||||||
InitialCorruptCheck: true,
|
InitialCorruptCheck: true,
|
||||||
Logger: "zap",
|
Logger: "zap",
|
||||||
LogOutput: "/tmp/etcd-functional-3/etcd.log",
|
LogOutput: []string{"/tmp/etcd-functional-3/etcd.log"},
|
||||||
Debug: true,
|
Debug: true,
|
||||||
},
|
},
|
||||||
ClientCertData: "",
|
ClientCertData: "",
|
||||||
|
@ -53,7 +53,7 @@ func TestEmbedEtcd(t *testing.T) {
|
|||||||
for i := range tests {
|
for i := range tests {
|
||||||
tests[i].cfg = *embed.NewConfig()
|
tests[i].cfg = *embed.NewConfig()
|
||||||
tests[i].cfg.Logger = "zap"
|
tests[i].cfg.Logger = "zap"
|
||||||
tests[i].cfg.LogOutput = "/dev/null"
|
tests[i].cfg.LogOutput = []string{"/dev/null"}
|
||||||
tests[i].cfg.Debug = false
|
tests[i].cfg.Debug = false
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -180,7 +180,7 @@ func newEmbedURLs(secure bool, n int) (urls []url.URL) {
|
|||||||
|
|
||||||
func setupEmbedCfg(cfg *embed.Config, curls []url.URL, purls []url.URL) {
|
func setupEmbedCfg(cfg *embed.Config, curls []url.URL, purls []url.URL) {
|
||||||
cfg.Logger = "zap"
|
cfg.Logger = "zap"
|
||||||
cfg.LogOutput = "/dev/null"
|
cfg.LogOutput = []string{"/dev/null"}
|
||||||
cfg.Debug = false
|
cfg.Debug = false
|
||||||
|
|
||||||
cfg.ClusterState = "new"
|
cfg.ClusterState = "new"
|
||||||
|
@ -64,7 +64,7 @@ func TestSnapshotV3RestoreMultiMemberAdd(t *testing.T) {
|
|||||||
|
|
||||||
cfg := embed.NewConfig()
|
cfg := embed.NewConfig()
|
||||||
cfg.Logger = "zap"
|
cfg.Logger = "zap"
|
||||||
cfg.LogOutput = "/dev/null"
|
cfg.LogOutput = []string{"/dev/null"}
|
||||||
cfg.Debug = false
|
cfg.Debug = false
|
||||||
cfg.Name = "3"
|
cfg.Name = "3"
|
||||||
cfg.InitialClusterToken = testClusterTkn
|
cfg.InitialClusterToken = testClusterTkn
|
||||||
|
@ -44,7 +44,7 @@ func TestSnapshotV3RestoreSingle(t *testing.T) {
|
|||||||
|
|
||||||
cfg := embed.NewConfig()
|
cfg := embed.NewConfig()
|
||||||
cfg.Logger = "zap"
|
cfg.Logger = "zap"
|
||||||
cfg.LogOutput = "/dev/null"
|
cfg.LogOutput = []string{"/dev/null"}
|
||||||
cfg.Debug = false
|
cfg.Debug = false
|
||||||
cfg.Name = "s1"
|
cfg.Name = "s1"
|
||||||
cfg.InitialClusterToken = testClusterTkn
|
cfg.InitialClusterToken = testClusterTkn
|
||||||
@ -153,7 +153,7 @@ func createSnapshotFile(t *testing.T, kvs []kv) string {
|
|||||||
|
|
||||||
cfg := embed.NewConfig()
|
cfg := embed.NewConfig()
|
||||||
cfg.Logger = "zap"
|
cfg.Logger = "zap"
|
||||||
cfg.LogOutput = "/dev/null"
|
cfg.LogOutput = []string{"/dev/null"}
|
||||||
cfg.Debug = false
|
cfg.Debug = false
|
||||||
cfg.Name = "default"
|
cfg.Name = "default"
|
||||||
cfg.ClusterState = "new"
|
cfg.ClusterState = "new"
|
||||||
@ -220,7 +220,7 @@ func restoreCluster(t *testing.T, clusterN int, dbPath string) (
|
|||||||
for i := 0; i < clusterN; i++ {
|
for i := 0; i < clusterN; i++ {
|
||||||
cfg := embed.NewConfig()
|
cfg := embed.NewConfig()
|
||||||
cfg.Logger = "zap"
|
cfg.Logger = "zap"
|
||||||
cfg.LogOutput = "/dev/null"
|
cfg.LogOutput = []string{"/dev/null"}
|
||||||
cfg.Debug = false
|
cfg.Debug = false
|
||||||
cfg.Name = fmt.Sprintf("%d", i)
|
cfg.Name = fmt.Sprintf("%d", i)
|
||||||
cfg.InitialClusterToken = testClusterTkn
|
cfg.InitialClusterToken = testClusterTkn
|
||||||
|
Loading…
x
Reference in New Issue
Block a user