From 6f220f830ab10690098f9c53144d31fcab2be33d Mon Sep 17 00:00:00 2001 From: chenshijun <csj_sky@126.com> Date: 星期三, 15 一月 2020 15:28:35 +0800 Subject: [PATCH] 添加snapShot功能,用于刚加入集群收到一大堆sql的处理 --- agent.go | 4 ++-- config.go | 42 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/agent.go b/agent.go index 45f9ab7..b94b7a7 100644 --- a/agent.go +++ b/agent.go @@ -62,9 +62,9 @@ } // Create create serf agent with config -func Create(conf *Config) (*Agent, error) { +func Create(conf *Config, snapshotPath string) (*Agent, error) { // config cover to serf config - serfConf, err := conf.convertToSerf() + serfConf, err := conf.convertToSerf(snapshotPath) if err != nil { return nil, err } diff --git a/config.go b/config.go index e0d02c8..4b34256 100644 --- a/config.go +++ b/config.go @@ -19,7 +19,9 @@ import ( "fmt" "net" + "os" "strconv" + "strings" //"github.com/apache/servicecomb-service-center/syncer/pkg/utils" "github.com/hashicorp/memberlist" @@ -44,7 +46,12 @@ BroadcastInterval = 5 MaxQueryRespSize = 50 * 1024 * 1024 MaxQuerySize = 50 * 1024 * 1024 - MaxUserEventSize = 5 * 1024 + MaxUserEventSize = 9 * 1024 + ReplayOnJoinDefault = false + SnapshotPathDefault = "./serfSnapShot" + MaxEventBufferCount = 2048 + + TcpTransportPort = 30194 //tcp浼犺緭澶ф暟鎹噺鎺ュ彛 ) // DefaultConfig default config @@ -84,8 +91,30 @@ return nil } +func isFileRightful(filePath string) bool { + if filePath != "" { + _, err := os.Stat(filePath) + if err != nil && os.IsNotExist(err) { + pos := strings.LastIndex(filePath, "/") + if pos != -1 { + filePath = filePath[0:pos] + } + + _, err = os.Stat(filePath) + if err == nil || !os.IsNotExist(err) { + return true + } else { + return false + } + } else { + return false + } + } + return false +} + // convertToSerf convert Config to serf.Config -func (c *Config) convertToSerf() (*serf.Config, error) { +func (c *Config) convertToSerf(snapshotPath string) (*serf.Config, error) { serfConf := serf.DefaultConfig() bindIP, bindPort, err := SplitHostPort(c.BindAddr, DefaultBindPort) @@ -119,9 +148,18 @@ c.RetryMaxAttempts = retryMaxAttempts } + c.SnapshotPath = SnapshotPathDefault + if isFileRightful(snapshotPath) { + c.SnapshotPath = snapshotPath + } + + c.ReplayOnJoin = ReplayOnJoinDefault + serfConf.QueryResponseSizeLimit = c.QueryResponseSizeLimit serfConf.QuerySizeLimit = c.QuerySizeLimit serfConf.UserEventSizeLimit = c.UserEventSizeLimit + serfConf.SnapshotPath = c.SnapshotPath + serfConf.EventBuffer = MaxEventBufferCount return serfConf, nil } -- Gitblit v1.8.0