diff --git a/go.mod b/go.mod index 03f671f63766f..d57f7b4acc3c1 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,6 @@ module github.com/pingcap/tidb require ( github.com/BurntSushi/toml v0.3.1 - github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f // indirect github.com/blacktear23/go-proxyprotocol v0.0.0-20180807104634-af7a81e8dd0d github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd // indirect github.com/coreos/go-systemd v0.0.0-20181031085051-9002847aa142 // indirect @@ -11,7 +10,6 @@ require ( github.com/cznic/sortutil v0.0.0-20150617083342-4c7342852e65 github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f github.com/dustin/go-humanize v1.0.0 // indirect - github.com/go-ole/go-ole v1.2.1 // indirect github.com/go-sql-driver/mysql v0.0.0-20170715192408-3955978caca4 github.com/gogo/protobuf v1.2.1 github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 // indirect @@ -36,7 +34,7 @@ require ( github.com/pingcap/failpoint v0.0.0-20190512135322-30cc7431d99c github.com/pingcap/fn v0.0.0-20191016082858-07623b84a47d github.com/pingcap/goleveldb v0.0.0-20171020122428-b9ff6c35079e - github.com/pingcap/kvproto v0.0.0-20191118050206-47672e7eabc0 + github.com/pingcap/kvproto v0.0.0-20191121022655-4c654046831d github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9 github.com/pingcap/parser v0.0.0-20191120165920-d5c49d11cc64 github.com/pingcap/pd v1.1.0-beta.0.20190923032047-5c648dc365e0 @@ -44,12 +42,13 @@ require ( github.com/pingcap/tidb-tools v3.0.6-0.20191106033616-90632dda3863+incompatible github.com/pingcap/tipb v0.0.0-20191120020146-6161b015e21e github.com/prometheus/client_golang v1.0.0 - github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 + github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 github.com/remyoudompheng/bigfft v0.0.0-20190512091148-babf20351dd7 // indirect - github.com/shirou/gopsutil v2.18.10+incompatible + github.com/shirou/gopsutil v2.19.10+incompatible github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371 // indirect github.com/shurcooL/vfsgen v0.0.0-20181020040650-a97a25d856ca // indirect github.com/sirupsen/logrus v1.2.0 + github.com/soheilhy/cmux v0.1.4 github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 github.com/struCoder/pidusage v0.1.2 github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2 @@ -68,7 +67,7 @@ require ( golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect golang.org/x/tools v0.0.0-20191107010934-f79515f33823 google.golang.org/genproto v0.0.0-20190905072037-92dd089d5514 // indirect - google.golang.org/grpc v1.23.1 + google.golang.org/grpc v1.25.1 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 sourcegraph.com/sourcegraph/appdash v0.0.0-20180531100431-4c381bd170b4 diff --git a/go.sum b/go.sum index 246e192754804..f6ee2b835ec7d 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f h1:5ZfJxyXo8KyX8DgGXC5B7ILL8y51fci/qYz2B4j8iLY= -github.com/StackExchange/wmi v0.0.0-20180725035823-b12b22c5341f/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= +github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -11,6 +11,7 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/blacktear23/go-proxyprotocol v0.0.0-20180807104634-af7a81e8dd0d h1:rQlvB2AYWme2bIB18r/SipGiMEVJYE9U0z+MGoU/LtQ= github.com/blacktear23/go-proxyprotocol v0.0.0-20180807104634-af7a81e8dd0d/go.mod h1:VKt7CNAQxpFpSDz3sXyj9hY/GbVsQCr0sB3w59nE7lU= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20171208011716-f6d7a1f6fbf3/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -46,6 +47,8 @@ github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -53,8 +56,8 @@ github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeME github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI= +github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-playground/overalls v0.0.0-20180201144345-22ec1a223b7c/go.mod h1:UqxAgEOt89sCiXlrc/ycnx00LVvUO/eS8tMUkWX4R7w= github.com/go-sql-driver/mysql v0.0.0-20170715192408-3955978caca4 h1:3DFRjZdCDhzvxDf0U6/1qAryzOqD7Y5iAj0DJRRl1bs= github.com/go-sql-driver/mysql v0.0.0-20170715192408-3955978caca4/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= @@ -178,8 +181,8 @@ github.com/pingcap/fn v0.0.0-20191016082858-07623b84a47d/go.mod h1:fMRU1BA1y+r89 github.com/pingcap/goleveldb v0.0.0-20171020122428-b9ff6c35079e h1:P73/4dPCL96rGrobssy1nVy2VaVpNCuLpCbr+FEaTA8= github.com/pingcap/goleveldb v0.0.0-20171020122428-b9ff6c35079e/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= github.com/pingcap/kvproto v0.0.0-20190822090350-11ea838aedf7/go.mod h1:QMdbTAXCHzzygQzqcG9uVUgU2fKeSN1GmfMiykdSzzY= -github.com/pingcap/kvproto v0.0.0-20191118050206-47672e7eabc0 h1:CHOC95Ct4abJ9EdmWqzpUxV+bgjB4lOxd3AFxqgoyzQ= -github.com/pingcap/kvproto v0.0.0-20191118050206-47672e7eabc0/go.mod h1:WWLmULLO7l8IOcQG+t+ItJ3fEcrL5FxF0Wu+HrMy26w= +github.com/pingcap/kvproto v0.0.0-20191121022655-4c654046831d h1:aH7ZFzWEyBgUtG/YlLOU7pIx++PqtXlRT7zpHcEf2Rg= +github.com/pingcap/kvproto v0.0.0-20191121022655-4c654046831d/go.mod h1:WWLmULLO7l8IOcQG+t+ItJ3fEcrL5FxF0Wu+HrMy26w= github.com/pingcap/log v0.0.0-20190715063458-479153f07ebd/go.mod h1:WpHUKhNZ18v116SvGrmjkA9CBhYmuUTKL+p8JC9ANEw= github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9 h1:AJD9pZYm72vMgPcQDww9rkZ1DnWfl0pXV3BOWlkYIjA= github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= @@ -207,6 +210,8 @@ github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1: github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20180518154759-7600349dcfe1/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -220,8 +225,8 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44 h1:tB9NOR21++IjLyVx3/PCPhWMwqGNCMQEH96A6dMZ/gc= github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shirou/gopsutil v2.18.10+incompatible h1:cy84jW6EVRPa5g9HAHrlbxMSIjBhDSX0OFYyMYminYs= -github.com/shirou/gopsutil v2.18.10+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v2.19.10+incompatible h1:lA4Pi29JEVIQIgATSeftHSY0rMGI9CLrl2ZvDLiahto= +github.com/shirou/gopsutil v2.19.10+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371 h1:SWV2fHctRpRrp49VXJ6UZja7gU9QLHwRpIPBN89SKEo= github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/vfsgen v0.0.0-20181020040650-a97a25d856ca h1:3fECS8atRjByijiI8yYiuwLwQ2ZxXobW7ua/8GRB3pI= @@ -356,13 +361,17 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/genproto v0.0.0-20180608181217-32ee49c4dd80/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20181004005441-af9cb2a35e7f/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190905072037-92dd089d5514 h1:oFSK4421fpCKRrpzIpybyBVWyht05NegY9+L/3TLAZs= google.golang.org/genproto v0.0.0-20190905072037-92dd089d5514/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/grpc v0.0.0-20180607172857-7a6a684ca69e/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1 h1:q4XQuHFC6I28BKZpo6IYyb3mNO+l7lSOxRuYTCiDfXk= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/gometalinter.v2 v2.0.12/go.mod h1:NDRytsqEZyolNuAgTzJkZMkSQM7FIKyzVzGhjB/qfYo= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= diff --git a/infoschema/tables.go b/infoschema/tables.go index 9553dfe0c9e90..03e5f9cb37099 100644 --- a/infoschema/tables.go +++ b/infoschema/tables.go @@ -48,7 +48,6 @@ import ( "github.com/pingcap/tidb/types" binaryJson "github.com/pingcap/tidb/types/json" "github.com/pingcap/tidb/util" - "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/pdapi" "github.com/pingcap/tidb/util/set" "github.com/pingcap/tidb/util/sqlexec" @@ -1909,25 +1908,51 @@ func dataForServersInfo() ([][]types.Datum, error) { return rows, nil } -func dataForTiDBClusterInfo(ctx sessionctx.Context) ([][]types.Datum, error) { +// ServerInfo represents the basic server information of single cluster component +type ServerInfo struct { + ServerType string + Address string + StatusAddr string + Version string + GitHash string +} + +// GetClusterServerInfo returns all components information of cluster +func GetClusterServerInfo(ctx sessionctx.Context) ([]ServerInfo, error) { + failpoint.Inject("mockClusterInfo", func(val failpoint.Value) { + // The cluster topology is injected by `failpoint` expression and + // there is no extra checks for it. (let the test fail if the expression invalid) + if s := val.(string); len(s) > 0 { + var servers []ServerInfo + for _, server := range strings.Split(s, ";") { + parts := strings.Split(server, ",") + servers = append(servers, ServerInfo{ + ServerType: parts[0], + Address: parts[1], + StatusAddr: parts[2], + Version: parts[3], + GitHash: parts[4], + }) + } + failpoint.Return(servers, nil) + } + }) + // Get TiDB servers info. tidbNodes, err := infosync.GetAllServerInfo(context.Background()) if err != nil { return nil, errors.Trace(err) } - rows := make([][]types.Datum, 0, len(tidbNodes)) + var servers []ServerInfo for _, node := range tidbNodes { - addr := fmt.Sprintf("%s:%d", node.IP, node.Port) - statusAddr := fmt.Sprintf("%s:%d", node.IP, node.StatusPort) - row := types.MakeDatums( - "tidb", - addr, - statusAddr, - node.Version, - node.GitHash, - ) - rows = append(rows, row) + servers = append(servers, ServerInfo{ + ServerType: "tidb", + Address: fmt.Sprintf("%s:%d", node.IP, node.Port), + StatusAddr: fmt.Sprintf("%s:%d", node.IP, node.StatusPort), + Version: node.Version, + GitHash: node.GitHash, + }) } // Get PD servers info. @@ -1976,14 +2001,13 @@ func dataForTiDBClusterInfo(ctx sessionctx.Context) ([][]types.Datum, error) { } terror.Log(resp.Body.Close()) - row := types.MakeDatums( - "pd", - addr, - addr, - version, - content.GitHash, - ) - rows = append(rows, row) + servers = append(servers, ServerInfo{ + ServerType: "pd", + Address: addr, + StatusAddr: addr, + Version: version, + GitHash: content.GitHash, + }) } // Get TiKV servers info. @@ -2001,12 +2025,30 @@ func dataForTiDBClusterInfo(ctx sessionctx.Context) ([][]types.Datum, error) { return nil, errors.Trace(err) } for _, storeStat := range storesStat.Stores { + servers = append(servers, ServerInfo{ + ServerType: "tikv", + Address: storeStat.Store.Address, + StatusAddr: storeStat.Store.StatusAddress, + Version: storeStat.Store.Version, + GitHash: storeStat.Store.GitHash, + }) + } + return servers, nil +} + +func dataForTiDBClusterInfo(ctx sessionctx.Context) ([][]types.Datum, error) { + servers, err := GetClusterServerInfo(ctx) + if err != nil { + return nil, err + } + rows := make([][]types.Datum, 0, len(servers)) + for _, server := range servers { row := types.MakeDatums( - "tikv", - storeStat.Store.Address, - storeStat.Store.StatusAddress, - storeStat.Store.Version, - storeStat.Store.GitHash, + server.ServerType, + server.Address, + server.StatusAddr, + server.Version, + server.GitHash, ) rows = append(rows, row) } @@ -2014,7 +2056,7 @@ func dataForTiDBClusterInfo(ctx sessionctx.Context) ([][]types.Datum, error) { } func dataForClusterLoadInfo(ctx sessionctx.Context) ([][]types.Datum, error) { - serversInfo, err := getClusterServerInfo(ctx) + serversInfo, err := GetClusterServerInfo(ctx) if err != nil { return nil, err } @@ -2022,10 +2064,10 @@ func dataForClusterLoadInfo(ctx sessionctx.Context) ([][]types.Datum, error) { rows := make([][]types.Datum, 0, len(serversInfo)*10) for _, srv := range serversInfo { // TODO: remove this after PD/TiKV support diagnostic grpc service. - if srv.tp == "pd" || srv.tp == "tikv" { + if srv.ServerType == "pd" || srv.ServerType == "tikv" { continue } - addr := srv.statusAddr + addr := srv.StatusAddr ip := addr if idx := strings.Index(addr, ":"); idx != -1 { ip = addr[:idx] @@ -2034,11 +2076,11 @@ func dataForClusterLoadInfo(ctx sessionctx.Context) ([][]types.Datum, error) { continue } ipMap[ip] = struct{}{} - items, err := getServerInfoByGRPC(srv.statusAddr, diagnosticspb.ServerInfoType_LoadInfo) + items, err := getServerInfoByGRPC(srv.StatusAddr, diagnosticspb.ServerInfoType_LoadInfo) if err != nil { return nil, err } - partRows := serverInfoItemToRows(items, srv.tp, srv.statusAddr) + partRows := serverInfoItemToRows(items, srv.ServerType, srv.StatusAddr) rows = append(rows, partRows...) } return rows, nil @@ -2094,67 +2136,13 @@ func getServerInfoByGRPC(address string, tp diagnosticspb.ServerInfoType) ([]*di return r.Items, nil } -type serverInfo struct { - tp string - address string - statusAddr string -} - -func getClusterServerInfo(ctx sessionctx.Context) ([]serverInfo, error) { - sql := "SELECT type, address, status_address FROM INFORMATION_SCHEMA.TIDB_CLUSTER_INFO ORDER BY type" - rows, _, err := ctx.(sqlexec.RestrictedSQLExecutor).ExecRestrictedSQL(sql) - failpoint.Inject("mockClusterInfo", func(val failpoint.Value) { - // The cluster topology is injected by `failpoint` expression and - // there is no extra checks for it. (let the test fail if the expression invalid) - if s := val.(string); len(s) > 0 { - var fields []*types.FieldType - for i := 0; i < 4; i++ { - fields = append(fields, &types.FieldType{ - Charset: mysql.UTF8Charset, - Collate: mysql.UTF8DefaultCollation, - Tp: mysql.TypeVarchar, - Flen: 64, - Flag: 64, - }) - } - data := chunk.New(fields, 0, 3) - for _, row := range strings.Split(s, ";") { - for i, col := range strings.Split(row, ",") { - data.AppendString(i, col) - } - } - iter := chunk.NewIterator4Chunk(data) - for r := iter.Begin(); r != iter.End(); r = iter.Next() { - rows = append(rows, r) - } - // erase the error message - err = nil - } - }) - - if err != nil { - return nil, errors.Trace(err) - } - - srvInfos := make([]serverInfo, 0, len(rows)) - for _, row := range rows { - row.GetString(0) - srvInfos = append(srvInfos, serverInfo{ - tp: row.GetString(0), - address: row.GetString(1), - statusAddr: row.GetString(2), - }) - } - return srvInfos, nil -} - func dataForClusterConfig(ctx sessionctx.Context) ([][]types.Datum, error) { type result struct { idx int rows [][]types.Datum err error } - serversInfo, err := getClusterServerInfo(ctx) + serversInfo, err := GetClusterServerInfo(ctx) if err != nil { return nil, err } @@ -2163,9 +2151,9 @@ func dataForClusterConfig(ctx sessionctx.Context) ([][]types.Datum, error) { wg := sync.WaitGroup{} ch := make(chan result, len(serversInfo)) for i, srv := range serversInfo { - typ := srv.tp - address := srv.address - statusAddr := srv.statusAddr + typ := srv.ServerType + address := srv.Address + statusAddr := srv.StatusAddr if len(statusAddr) == 0 { ctx.GetSessionVars().StmtCtx.AppendWarning(errors.Errorf("%s node %s does not contain status address", typ, address)) continue diff --git a/infoschema/tables_test.go b/infoschema/tables_test.go index 143545d0aab92..4b1a447848d64 100644 --- a/infoschema/tables_test.go +++ b/infoschema/tables_test.go @@ -741,9 +741,9 @@ func (s *testClusterTableSuite) TestTiDBClusterInfo(c *C) { )) instances := []string{ - "pd,127.0.0.1:11080," + mockAddr, - "tidb,127.0.0.1:11080," + mockAddr, - "tikv,127.0.0.1:11080," + mockAddr, + "pd,127.0.0.1:11080," + mockAddr + ",mock-version,mock-githash", + "tidb,127.0.0.1:11080," + mockAddr + ",mock-version,mock-githash", + "tikv,127.0.0.1:11080," + mockAddr + ",mock-version,mock-githash", } fpExpr := `return("` + strings.Join(instances, ";") + `")` c.Assert(failpoint.Enable("github.com/pingcap/tidb/infoschema/mockClusterInfo", fpExpr), IsNil) @@ -814,9 +814,9 @@ func (s *testClusterTableSuite) TestForClusterServerInfo(c *C) { tk := testkit.NewTestKit(c, s.store) mockAddr := "127.0.0.1:10080" instances := []string{ - "pd,127.0.0.1:11080," + mockAddr, - "tidb,127.0.0.1:11080," + mockAddr, - "tikv,127.0.0.1:11080," + mockAddr, + "pd,127.0.0.1:11080," + mockAddr + ",mock-version,mock-githash", + "tidb,127.0.0.1:11080," + mockAddr + ",mock-version,mock-githash", + "tikv,127.0.0.1:11080," + mockAddr + ",mock-version,mock-githash", } fpExpr := `return("` + strings.Join(instances, ";") + `")` c.Assert(failpoint.Enable("github.com/pingcap/tidb/infoschema/mockClusterInfo", fpExpr), IsNil)