mirror of
https://gitee.com/milvus-io/milvus.git
synced 2024-11-30 02:48:45 +08:00
enhance: [2.4] Fix go&cpp lint issues (#35107)
See also #34483 --------- Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>
This commit is contained in:
parent
866055527b
commit
8991dc211e
9
Makefile
9
Makefile
@ -149,6 +149,7 @@ lint-fix: getdeps
|
||||
@$(INSTALL_PATH)/gci write cmd/ --skip-generated -s standard -s default -s "prefix(github.com/milvus-io)" --custom-order
|
||||
@$(INSTALL_PATH)/gci write internal/ --skip-generated -s standard -s default -s "prefix(github.com/milvus-io)" --custom-order
|
||||
@$(INSTALL_PATH)/gci write pkg/ --skip-generated -s standard -s default -s "prefix(github.com/milvus-io)" --custom-order
|
||||
@$(INSTALL_PATH)/gci write client/ --skip-generated -s standard -s default -s "prefix(github.com/milvus-io)" --custom-order
|
||||
@$(INSTALL_PATH)/gci write tests/ --skip-generated -s standard -s default -s "prefix(github.com/milvus-io)" --custom-order
|
||||
@echo "Running golangci-lint auto-fix"
|
||||
@source $(PWD)/scripts/setenv.sh && GO111MODULE=on $(INSTALL_PATH)/golangci-lint run --fix --timeout=30m --config $(PWD)/.golangci.yml; cd pkg && GO111MODULE=on $(INSTALL_PATH)/golangci-lint run --fix --timeout=30m --config $(PWD)/.golangci.yml
|
||||
@ -157,13 +158,11 @@ lint-fix: getdeps
|
||||
static-check: getdeps
|
||||
@echo "Running $@ check"
|
||||
@echo "Start check core packages"
|
||||
@source $(PWD)/scripts/setenv.sh && GO111MODULE=on $(INSTALL_PATH)/golangci-lint run --build-tags dynamic,test --timeout=30m --config $(PWD)/.golangci.yml
|
||||
@source $(PWD)/scripts/setenv.sh && GO111MODULE=on GOFLAGS=-buildvcs=false $(INSTALL_PATH)/golangci-lint run --build-tags dynamic,test --timeout=30m --config $(PWD)/.golangci.yml
|
||||
@echo "Start check pkg package"
|
||||
@source $(PWD)/scripts/setenv.sh && cd pkg && GO111MODULE=on $(INSTALL_PATH)/golangci-lint run --build-tags dynamic,test --timeout=30m --config $(PWD)/.golangci.yml
|
||||
@source $(PWD)/scripts/setenv.sh && cd pkg && GO111MODULE=on GOFLAGS=-buildvcs=false $(INSTALL_PATH)/golangci-lint run --build-tags dynamic,test --timeout=30m --config $(PWD)/.golangci.yml
|
||||
@echo "Start check client package"
|
||||
@source $(PWD)/scripts/setenv.sh && cd client && GO111MODULE=on $(INSTALL_PATH)/golangci-lint run --timeout=30m --config $(PWD)/client/.golangci.yml
|
||||
@echo "Start check go_client e2e package"
|
||||
@source $(PWD)/scripts/setenv.sh && cd tests/go_client && GO111MODULE=on $(INSTALL_PATH)/golangci-lint run --timeout=30m --config $(PWD)/client/.golangci.yml
|
||||
@source $(PWD)/scripts/setenv.sh && cd client && GO111MODULE=on GOFLAGS=-buildvcs=false $(INSTALL_PATH)/golangci-lint run --timeout=30m --config $(PWD)/client/.golangci.yml
|
||||
|
||||
verifiers: build-cpp getdeps cppcheck fmt static-check
|
||||
|
||||
|
@ -31,7 +31,7 @@ func (s *ClientSuite) TestNewClient() {
|
||||
s.NotNil(c)
|
||||
})
|
||||
|
||||
s.Run("emtpy_addr", func() {
|
||||
s.Run("empty_addr", func() {
|
||||
_, err := New(ctx, &ClientConfig{})
|
||||
s.Error(err)
|
||||
s.T().Log(err)
|
||||
|
@ -227,7 +227,7 @@ func FieldDataColumn(fd *schemapb.FieldData, begin, end int) (Column, error) {
|
||||
data := x.FloatVector.GetData()
|
||||
dim := int(vectors.GetDim())
|
||||
if end < 0 {
|
||||
end = int(len(data) / dim)
|
||||
end = len(data) / dim
|
||||
}
|
||||
vector := make([][]float32, 0, end-begin) // shall not have remanunt
|
||||
for i := begin; i < end; i++ {
|
||||
@ -250,7 +250,7 @@ func FieldDataColumn(fd *schemapb.FieldData, begin, end int) (Column, error) {
|
||||
dim := int(vectors.GetDim())
|
||||
blen := dim / 8
|
||||
if end < 0 {
|
||||
end = int(len(data) / blen)
|
||||
end = len(data) / blen
|
||||
}
|
||||
vector := make([][]byte, 0, end-begin)
|
||||
for i := begin; i < end; i++ {
|
||||
@ -269,7 +269,7 @@ func FieldDataColumn(fd *schemapb.FieldData, begin, end int) (Column, error) {
|
||||
data := x.Float16Vector
|
||||
dim := int(vectors.GetDim())
|
||||
if end < 0 {
|
||||
end = int(len(data) / dim)
|
||||
end = len(data) / dim
|
||||
}
|
||||
vector := make([][]byte, 0, end-begin)
|
||||
for i := begin; i < end; i++ {
|
||||
@ -288,7 +288,7 @@ func FieldDataColumn(fd *schemapb.FieldData, begin, end int) (Column, error) {
|
||||
data := x.Bfloat16Vector
|
||||
dim := int(vectors.GetDim())
|
||||
if end < 0 {
|
||||
end = int(len(data) / dim)
|
||||
end = len(data) / dim
|
||||
}
|
||||
vector := make([][]byte, 0, end-begin) // shall not have remanunt
|
||||
for i := begin; i < end; i++ {
|
||||
|
@ -17,9 +17,10 @@
|
||||
package column
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/cockroachdb/errors"
|
||||
|
||||
"github.com/milvus-io/milvus-proto/go-api/v2/schemapb"
|
||||
"github.com/milvus-io/milvus/client/v2/entity"
|
||||
)
|
||||
@ -70,7 +71,7 @@ func (c *ColumnVarChar) FieldData() *schemapb.FieldData {
|
||||
}
|
||||
data := make([]string, 0, c.Len())
|
||||
for i := 0; i < c.Len(); i++ {
|
||||
data = append(data, string(c.values[i]))
|
||||
data = append(data, c.values[i])
|
||||
}
|
||||
fd.Field = &schemapb.FieldData_Scalars{
|
||||
Scalars: &schemapb.ScalarField{
|
||||
|
@ -56,7 +56,7 @@ func (e sliceSparseEmbedding) FieldType() FieldType {
|
||||
}
|
||||
|
||||
func (e sliceSparseEmbedding) Get(idx int) (uint32, float32, bool) {
|
||||
if idx < 0 || idx >= int(e.len) {
|
||||
if idx < 0 || idx >= e.len {
|
||||
return 0, 0, false
|
||||
}
|
||||
return e.positions[idx], e.values[idx], true
|
||||
|
@ -107,7 +107,7 @@ func HelloMilvus() {
|
||||
if err != nil {
|
||||
log.Fatal("failed to flush", err.Error())
|
||||
}
|
||||
log.Println("flush done, elasped", time.Since(start))
|
||||
log.Println("flush done, elapsed", time.Since(start))
|
||||
|
||||
indexTask, err := c.CreateIndex(ctx, milvusclient.NewCreateIndexOption(collectionName, "vector", index.NewHNSWIndex(entity.L2, 16, 100)))
|
||||
if err != nil {
|
||||
|
@ -10,6 +10,7 @@ require (
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
|
||||
github.com/milvus-io/milvus-proto/go-api/v2 v2.4.7-0.20240717093336-5d85129b6803
|
||||
github.com/milvus-io/milvus/pkg v0.0.2-0.20240317152703-17b4938985f3
|
||||
github.com/quasilyte/go-ruleguard/dsl v0.3.22
|
||||
github.com/samber/lo v1.27.0
|
||||
github.com/stretchr/testify v1.8.4
|
||||
github.com/tidwall/gjson v1.17.1
|
||||
|
@ -26,7 +26,9 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM
|
||||
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
|
||||
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
|
||||
cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY=
|
||||
cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE=
|
||||
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
|
||||
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
|
||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
||||
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
|
||||
@ -43,6 +45,7 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7
|
||||
github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
|
||||
github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||
github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno=
|
||||
github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo=
|
||||
@ -97,6 +100,7 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH
|
||||
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
|
||||
github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
|
||||
github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo=
|
||||
github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA=
|
||||
github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU=
|
||||
@ -148,6 +152,7 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m
|
||||
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.10.1 h1:c0g45+xCJhdgFGw7a5QAfdS4byAbud7miNWJ1WwEVf8=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss=
|
||||
github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw=
|
||||
github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8=
|
||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||
@ -155,6 +160,7 @@ github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga
|
||||
github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c=
|
||||
github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
|
||||
github.com/frankban/quicktest v1.14.5 h1:dfYrrRyLtiqT9GyKXgdh+k4inNeTvmGbuSgZ3lx3GhA=
|
||||
github.com/frankban/quicktest v1.14.5/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
@ -206,6 +212,7 @@ github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzq
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
|
||||
github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE=
|
||||
github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ=
|
||||
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
@ -261,6 +268,7 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
|
||||
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
|
||||
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
|
||||
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
|
||||
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
|
||||
@ -281,6 +289,7 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+
|
||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
@ -393,8 +402,6 @@ github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfr
|
||||
github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8=
|
||||
github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc=
|
||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||
github.com/milvus-io/milvus-proto/go-api/v2 v2.4.3 h1:KUSaWVePVlHMIluAXf2qmNffI1CMlGFLLiP+4iy9014=
|
||||
github.com/milvus-io/milvus-proto/go-api/v2 v2.4.3/go.mod h1:1OIl0v5PQeNxIJhCvY+K55CBUOYDZevw9g9380u1Wek=
|
||||
github.com/milvus-io/milvus-proto/go-api/v2 v2.4.7-0.20240717093336-5d85129b6803 h1:qV7XMJcJS4Y/B8VoBZCqEP+Hd8PGTbYXZ+ejN/ZTIyA=
|
||||
github.com/milvus-io/milvus-proto/go-api/v2 v2.4.7-0.20240717093336-5d85129b6803/go.mod h1:1OIl0v5PQeNxIJhCvY+K55CBUOYDZevw9g9380u1Wek=
|
||||
github.com/milvus-io/milvus/pkg v0.0.2-0.20240317152703-17b4938985f3 h1:ZBpRWhBa7FTFxW4YYVv9AUESoW1Xyb3KNXTzTqfkZmw=
|
||||
@ -438,6 +445,7 @@ github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5d
|
||||
github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
|
||||
github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
|
||||
github.com/pingcap/errors v0.11.5-0.20211224045212-9687c2b0f87c h1:xpW9bvK+HuuTmyFqUwr+jcCvpVkK7sumiz+ko5H9eq4=
|
||||
github.com/pingcap/errors v0.11.5-0.20211224045212-9687c2b0f87c/go.mod h1:X2r9ueLEUZgtx2cIogM0v4Zj5uvvzhuuiu7Pn8HzMPg=
|
||||
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
|
||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
@ -450,6 +458,7 @@ github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndr
|
||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
|
||||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
|
||||
github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
|
||||
github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
|
||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
|
||||
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||
@ -478,6 +487,8 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1
|
||||
github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI=
|
||||
github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY=
|
||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||
github.com/quasilyte/go-ruleguard/dsl v0.3.22 h1:wd8zkOhSNr+I+8Qeciml08ivDt1pSXe60+5DqOpCjPE=
|
||||
github.com/quasilyte/go-ruleguard/dsl v0.3.22/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU=
|
||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||
@ -506,6 +517,7 @@ github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0
|
||||
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||
github.com/smartystreets/assertions v1.1.0 h1:MkTeG1DMwsrdH7QtLXy5W+fUxWq+vmb6cLmyJ7aRtF0=
|
||||
github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
|
||||
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
|
||||
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
||||
@ -551,6 +563,7 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl
|
||||
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
|
||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||
github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M=
|
||||
github.com/thoas/go-funk v0.9.1/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q=
|
||||
github.com/tidwall/gjson v1.17.1 h1:wlYEnwqAHgzmhNUFfw7Xalt2JzQvsMx2Se4PcoFCT/U=
|
||||
github.com/tidwall/gjson v1.17.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
|
||||
@ -654,6 +667,7 @@ go.uber.org/automaxprocs v1.5.2 h1:2LxUOGiR3O6tw8ui5sZa2LAaHnsviZdVOUZw4fvbnME=
|
||||
go.uber.org/automaxprocs v1.5.2/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0=
|
||||
go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
|
||||
go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
|
||||
go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo=
|
||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
||||
go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec=
|
||||
@ -776,6 +790,7 @@ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ
|
||||
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g=
|
||||
golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
@ -1069,6 +1084,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
|
||||
|
409
client/ruleguard/rules.go
Normal file
409
client/ruleguard/rules.go
Normal file
@ -0,0 +1,409 @@
|
||||
// Licensed to the LF AI & Data foundation under one
|
||||
// or more contributor license agreements. See the NOTICE file
|
||||
// distributed with this work for additional information
|
||||
// regarding copyright ownership. The ASF licenses this file
|
||||
// to you under the Apache License, Version 2.0 (the
|
||||
// "License"); you may not use this file except in compliance
|
||||
// with the License. You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package gorules
|
||||
|
||||
import (
|
||||
"github.com/quasilyte/go-ruleguard/dsl"
|
||||
)
|
||||
|
||||
// This is a collection of rules for ruleguard: https://github.com/quasilyte/go-ruleguard
|
||||
|
||||
// Remove extra conversions: mdempsky/unconvert
|
||||
func unconvert(m dsl.Matcher) {
|
||||
m.Match("int($x)").Where(m["x"].Type.Is("int") && !m["x"].Const).Report("unnecessary conversion").Suggest("$x")
|
||||
|
||||
m.Match("float32($x)").Where(m["x"].Type.Is("float32") && !m["x"].Const).Report("unnecessary conversion").Suggest("$x")
|
||||
m.Match("float64($x)").Where(m["x"].Type.Is("float64") && !m["x"].Const).Report("unnecessary conversion").Suggest("$x")
|
||||
|
||||
// m.Match("byte($x)").Where(m["x"].Type.Is("byte")).Report("unnecessary conversion").Suggest("$x")
|
||||
// m.Match("rune($x)").Where(m["x"].Type.Is("rune")).Report("unnecessary conversion").Suggest("$x")
|
||||
m.Match("bool($x)").Where(m["x"].Type.Is("bool") && !m["x"].Const).Report("unnecessary conversion").Suggest("$x")
|
||||
|
||||
m.Match("int8($x)").Where(m["x"].Type.Is("int8") && !m["x"].Const).Report("unnecessary conversion").Suggest("$x")
|
||||
m.Match("int16($x)").Where(m["x"].Type.Is("int16") && !m["x"].Const).Report("unnecessary conversion").Suggest("$x")
|
||||
m.Match("int32($x)").Where(m["x"].Type.Is("int32") && !m["x"].Const).Report("unnecessary conversion").Suggest("$x")
|
||||
m.Match("int64($x)").Where(m["x"].Type.Is("int64") && !m["x"].Const).Report("unnecessary conversion").Suggest("$x")
|
||||
|
||||
m.Match("uint8($x)").Where(m["x"].Type.Is("uint8") && !m["x"].Const).Report("unnecessary conversion").Suggest("$x")
|
||||
m.Match("uint16($x)").Where(m["x"].Type.Is("uint16") && !m["x"].Const).Report("unnecessary conversion").Suggest("$x")
|
||||
m.Match("uint32($x)").Where(m["x"].Type.Is("uint32") && !m["x"].Const).Report("unnecessary conversion").Suggest("$x")
|
||||
m.Match("uint64($x)").Where(m["x"].Type.Is("uint64") && !m["x"].Const).Report("unnecessary conversion").Suggest("$x")
|
||||
|
||||
m.Match("time.Duration($x)").Where(m["x"].Type.Is("time.Duration") && !m["x"].Text.Matches("^[0-9]*$")).Report("unnecessary conversion").Suggest("$x")
|
||||
}
|
||||
|
||||
// Don't use == or != with time.Time
|
||||
// https://github.com/dominikh/go-tools/issues/47 : Wontfix
|
||||
func timeeq(m dsl.Matcher) {
|
||||
m.Match("$t0 == $t1").Where(m["t0"].Type.Is("time.Time")).Report("using == with time.Time")
|
||||
m.Match("$t0 != $t1").Where(m["t0"].Type.Is("time.Time")).Report("using != with time.Time")
|
||||
m.Match(`map[$k]$v`).Where(m["k"].Type.Is("time.Time")).Report("map with time.Time keys are easy to misuse")
|
||||
}
|
||||
|
||||
// err but no an error
|
||||
func errnoterror(m dsl.Matcher) {
|
||||
// Would be easier to check for all err identifiers instead, but then how do we get the type from m[] ?
|
||||
|
||||
m.Match(
|
||||
"if $*_, err := $x; $err != nil { $*_ } else if $_ { $*_ }",
|
||||
"if $*_, err := $x; $err != nil { $*_ } else { $*_ }",
|
||||
"if $*_, err := $x; $err != nil { $*_ }",
|
||||
|
||||
"if $*_, err = $x; $err != nil { $*_ } else if $_ { $*_ }",
|
||||
"if $*_, err = $x; $err != nil { $*_ } else { $*_ }",
|
||||
"if $*_, err = $x; $err != nil { $*_ }",
|
||||
|
||||
"$*_, err := $x; if $err != nil { $*_ } else if $_ { $*_ }",
|
||||
"$*_, err := $x; if $err != nil { $*_ } else { $*_ }",
|
||||
"$*_, err := $x; if $err != nil { $*_ }",
|
||||
|
||||
"$*_, err = $x; if $err != nil { $*_ } else if $_ { $*_ }",
|
||||
"$*_, err = $x; if $err != nil { $*_ } else { $*_ }",
|
||||
"$*_, err = $x; if $err != nil { $*_ }",
|
||||
).
|
||||
Where(m["err"].Text == "err" && !m["err"].Type.Is("error") && m["x"].Text != "recover()").
|
||||
Report("err variable not error type")
|
||||
}
|
||||
|
||||
// Identical if and else bodies
|
||||
func ifbodythenbody(m dsl.Matcher) {
|
||||
m.Match("if $*_ { $body } else { $body }").
|
||||
Report("identical if and else bodies")
|
||||
|
||||
// Lots of false positives.
|
||||
// m.Match("if $*_ { $body } else if $*_ { $body }").
|
||||
// Report("identical if and else bodies")
|
||||
}
|
||||
|
||||
// Odd inequality: A - B < 0 instead of !=
|
||||
// Too many false positives.
|
||||
/*
|
||||
func subtractnoteq(m dsl.Matcher) {
|
||||
m.Match("$a - $b < 0").Report("consider $a != $b")
|
||||
m.Match("$a - $b > 0").Report("consider $a != $b")
|
||||
m.Match("0 < $a - $b").Report("consider $a != $b")
|
||||
m.Match("0 > $a - $b").Report("consider $a != $b")
|
||||
}
|
||||
*/
|
||||
|
||||
// Self-assignment
|
||||
func selfassign(m dsl.Matcher) {
|
||||
m.Match("$x = $x").Report("useless self-assignment")
|
||||
}
|
||||
|
||||
// Odd nested ifs
|
||||
func oddnestedif(m dsl.Matcher) {
|
||||
m.Match("if $x { if $x { $*_ }; $*_ }",
|
||||
"if $x == $y { if $x != $y {$*_ }; $*_ }",
|
||||
"if $x != $y { if $x == $y {$*_ }; $*_ }",
|
||||
"if $x { if !$x { $*_ }; $*_ }",
|
||||
"if !$x { if $x { $*_ }; $*_ }").
|
||||
Report("odd nested ifs")
|
||||
|
||||
m.Match("for $x { if $x { $*_ }; $*_ }",
|
||||
"for $x == $y { if $x != $y {$*_ }; $*_ }",
|
||||
"for $x != $y { if $x == $y {$*_ }; $*_ }",
|
||||
"for $x { if !$x { $*_ }; $*_ }",
|
||||
"for !$x { if $x { $*_ }; $*_ }").
|
||||
Report("odd nested for/ifs")
|
||||
}
|
||||
|
||||
// odd bitwise expressions
|
||||
func oddbitwise(m dsl.Matcher) {
|
||||
m.Match("$x | $x",
|
||||
"$x | ^$x",
|
||||
"^$x | $x").
|
||||
Report("odd bitwise OR")
|
||||
|
||||
m.Match("$x & $x",
|
||||
"$x & ^$x",
|
||||
"^$x & $x").
|
||||
Report("odd bitwise AND")
|
||||
|
||||
m.Match("$x &^ $x").
|
||||
Report("odd bitwise AND-NOT")
|
||||
}
|
||||
|
||||
// odd sequence of if tests with return
|
||||
func ifreturn(m dsl.Matcher) {
|
||||
m.Match("if $x { return $*_ }; if $x {$*_ }").Report("odd sequence of if test")
|
||||
m.Match("if $x { return $*_ }; if !$x {$*_ }").Report("odd sequence of if test")
|
||||
m.Match("if !$x { return $*_ }; if $x {$*_ }").Report("odd sequence of if test")
|
||||
m.Match("if $x == $y { return $*_ }; if $x != $y {$*_ }").Report("odd sequence of if test")
|
||||
m.Match("if $x != $y { return $*_ }; if $x == $y {$*_ }").Report("odd sequence of if test")
|
||||
}
|
||||
|
||||
func oddifsequence(m dsl.Matcher) {
|
||||
/*
|
||||
m.Match("if $x { $*_ }; if $x {$*_ }").Report("odd sequence of if test")
|
||||
|
||||
m.Match("if $x == $y { $*_ }; if $y == $x {$*_ }").Report("odd sequence of if tests")
|
||||
m.Match("if $x != $y { $*_ }; if $y != $x {$*_ }").Report("odd sequence of if tests")
|
||||
|
||||
m.Match("if $x < $y { $*_ }; if $y > $x {$*_ }").Report("odd sequence of if tests")
|
||||
m.Match("if $x <= $y { $*_ }; if $y >= $x {$*_ }").Report("odd sequence of if tests")
|
||||
|
||||
m.Match("if $x > $y { $*_ }; if $y < $x {$*_ }").Report("odd sequence of if tests")
|
||||
m.Match("if $x >= $y { $*_ }; if $y <= $x {$*_ }").Report("odd sequence of if tests")
|
||||
*/
|
||||
}
|
||||
|
||||
// odd sequence of nested if tests
|
||||
func nestedifsequence(m dsl.Matcher) {
|
||||
/*
|
||||
m.Match("if $x < $y { if $x >= $y {$*_ }; $*_ }").Report("odd sequence of nested if tests")
|
||||
m.Match("if $x <= $y { if $x > $y {$*_ }; $*_ }").Report("odd sequence of nested if tests")
|
||||
m.Match("if $x > $y { if $x <= $y {$*_ }; $*_ }").Report("odd sequence of nested if tests")
|
||||
m.Match("if $x >= $y { if $x < $y {$*_ }; $*_ }").Report("odd sequence of nested if tests")
|
||||
*/
|
||||
}
|
||||
|
||||
// odd sequence of assignments
|
||||
func identicalassignments(m dsl.Matcher) {
|
||||
m.Match("$x = $y; $y = $x").Report("odd sequence of assignments")
|
||||
}
|
||||
|
||||
func oddcompoundop(m dsl.Matcher) {
|
||||
m.Match("$x += $x + $_",
|
||||
"$x += $x - $_").
|
||||
Report("odd += expression")
|
||||
|
||||
m.Match("$x -= $x + $_",
|
||||
"$x -= $x - $_").
|
||||
Report("odd -= expression")
|
||||
}
|
||||
|
||||
func constswitch(m dsl.Matcher) {
|
||||
m.Match("switch $x { $*_ }", "switch $*_; $x { $*_ }").
|
||||
Where(m["x"].Const && !m["x"].Text.Matches(`^runtime\.`)).
|
||||
Report("constant switch")
|
||||
}
|
||||
|
||||
func oddcomparisons(m dsl.Matcher) {
|
||||
m.Match(
|
||||
"$x - $y == 0",
|
||||
"$x - $y != 0",
|
||||
"$x - $y < 0",
|
||||
"$x - $y <= 0",
|
||||
"$x - $y > 0",
|
||||
"$x - $y >= 0",
|
||||
"$x ^ $y == 0",
|
||||
"$x ^ $y != 0",
|
||||
).Report("odd comparison")
|
||||
}
|
||||
|
||||
func oddmathbits(m dsl.Matcher) {
|
||||
m.Match(
|
||||
"64 - bits.LeadingZeros64($x)",
|
||||
"32 - bits.LeadingZeros32($x)",
|
||||
"16 - bits.LeadingZeros16($x)",
|
||||
"8 - bits.LeadingZeros8($x)",
|
||||
).Report("odd math/bits expression: use bits.Len*() instead?")
|
||||
}
|
||||
|
||||
// func floateq(m dsl.Matcher) {
|
||||
// m.Match(
|
||||
// "$x == $y",
|
||||
// "$x != $y",
|
||||
// ).
|
||||
// Where(m["x"].Type.Is("float32") && !m["x"].Const && !m["y"].Text.Matches("0(.0+)?") && !m.File().Name.Matches("floating_comparision.go")).
|
||||
// Report("floating point tested for equality")
|
||||
|
||||
// m.Match(
|
||||
// "$x == $y",
|
||||
// "$x != $y",
|
||||
// ).
|
||||
// Where(m["x"].Type.Is("float64") && !m["x"].Const && !m["y"].Text.Matches("0(.0+)?") && !m.File().Name.Matches("floating_comparision.go")).
|
||||
// Report("floating point tested for equality")
|
||||
|
||||
// m.Match("switch $x { $*_ }", "switch $*_; $x { $*_ }").
|
||||
// Where(m["x"].Type.Is("float32")).
|
||||
// Report("floating point as switch expression")
|
||||
|
||||
// m.Match("switch $x { $*_ }", "switch $*_; $x { $*_ }").
|
||||
// Where(m["x"].Type.Is("float64")).
|
||||
// Report("floating point as switch expression")
|
||||
|
||||
// }
|
||||
|
||||
func badexponent(m dsl.Matcher) {
|
||||
m.Match(
|
||||
"2 ^ $x",
|
||||
"10 ^ $x",
|
||||
).
|
||||
Report("caret (^) is not exponentiation")
|
||||
}
|
||||
|
||||
func floatloop(m dsl.Matcher) {
|
||||
m.Match(
|
||||
"for $i := $x; $i < $y; $i += $z { $*_ }",
|
||||
"for $i = $x; $i < $y; $i += $z { $*_ }",
|
||||
).
|
||||
Where(m["i"].Type.Is("float64")).
|
||||
Report("floating point for loop counter")
|
||||
|
||||
m.Match(
|
||||
"for $i := $x; $i < $y; $i += $z { $*_ }",
|
||||
"for $i = $x; $i < $y; $i += $z { $*_ }",
|
||||
).
|
||||
Where(m["i"].Type.Is("float32")).
|
||||
Report("floating point for loop counter")
|
||||
}
|
||||
|
||||
func urlredacted(m dsl.Matcher) {
|
||||
m.Match(
|
||||
"log.Println($x, $*_)",
|
||||
"log.Println($*_, $x, $*_)",
|
||||
"log.Println($*_, $x)",
|
||||
"log.Printf($*_, $x, $*_)",
|
||||
"log.Printf($*_, $x)",
|
||||
|
||||
"log.Println($x, $*_)",
|
||||
"log.Println($*_, $x, $*_)",
|
||||
"log.Println($*_, $x)",
|
||||
"log.Printf($*_, $x, $*_)",
|
||||
"log.Printf($*_, $x)",
|
||||
).
|
||||
Where(m["x"].Type.Is("*url.URL")).
|
||||
Report("consider $x.Redacted() when outputting URLs")
|
||||
}
|
||||
|
||||
func sprinterr(m dsl.Matcher) {
|
||||
m.Match(`fmt.Sprint($err)`,
|
||||
`fmt.Sprintf("%s", $err)`,
|
||||
`fmt.Sprintf("%v", $err)`,
|
||||
).
|
||||
Where(m["err"].Type.Is("error")).
|
||||
Report("maybe call $err.Error() instead of fmt.Sprint()?")
|
||||
}
|
||||
|
||||
// disable this check, because it can not apply to generic type
|
||||
//func largeloopcopy(m dsl.Matcher) {
|
||||
// m.Match(
|
||||
// `for $_, $v := range $_ { $*_ }`,
|
||||
// ).
|
||||
// Where(m["v"].Type.Size > 1024).
|
||||
// Report(`loop copies large value each iteration`)
|
||||
//}
|
||||
|
||||
func joinpath(m dsl.Matcher) {
|
||||
m.Match(
|
||||
`strings.Join($_, "/")`,
|
||||
`strings.Join($_, "\\")`,
|
||||
"strings.Join($_, `\\`)",
|
||||
).
|
||||
Report(`did you mean path.Join() or filepath.Join() ?`)
|
||||
}
|
||||
|
||||
func readfull(m dsl.Matcher) {
|
||||
m.Match(`$n, $err := io.ReadFull($_, $slice)
|
||||
if $err != nil || $n != len($slice) {
|
||||
$*_
|
||||
}`,
|
||||
`$n, $err := io.ReadFull($_, $slice)
|
||||
if $n != len($slice) || $err != nil {
|
||||
$*_
|
||||
}`,
|
||||
`$n, $err = io.ReadFull($_, $slice)
|
||||
if $err != nil || $n != len($slice) {
|
||||
$*_
|
||||
}`,
|
||||
`$n, $err = io.ReadFull($_, $slice)
|
||||
if $n != len($slice) || $err != nil {
|
||||
$*_
|
||||
}`,
|
||||
`if $n, $err := io.ReadFull($_, $slice); $n != len($slice) || $err != nil {
|
||||
$*_
|
||||
}`,
|
||||
`if $n, $err := io.ReadFull($_, $slice); $err != nil || $n != len($slice) {
|
||||
$*_
|
||||
}`,
|
||||
`if $n, $err = io.ReadFull($_, $slice); $n != len($slice) || $err != nil {
|
||||
$*_
|
||||
}`,
|
||||
`if $n, $err = io.ReadFull($_, $slice); $err != nil || $n != len($slice) {
|
||||
$*_
|
||||
}`,
|
||||
).Report("io.ReadFull() returns err == nil iff n == len(slice)")
|
||||
}
|
||||
|
||||
func nilerr(m dsl.Matcher) {
|
||||
m.Match(
|
||||
`if err == nil { return err }`,
|
||||
`if err == nil { return $*_, err }`,
|
||||
).
|
||||
Report(`return nil error instead of nil value`)
|
||||
}
|
||||
|
||||
func mailaddress(m dsl.Matcher) {
|
||||
m.Match(
|
||||
"fmt.Sprintf(`\"%s\" <%s>`, $NAME, $EMAIL)",
|
||||
"fmt.Sprintf(`\"%s\"<%s>`, $NAME, $EMAIL)",
|
||||
"fmt.Sprintf(`%s <%s>`, $NAME, $EMAIL)",
|
||||
"fmt.Sprintf(`%s<%s>`, $NAME, $EMAIL)",
|
||||
`fmt.Sprintf("\"%s\"<%s>", $NAME, $EMAIL)`,
|
||||
`fmt.Sprintf("\"%s\" <%s>", $NAME, $EMAIL)`,
|
||||
`fmt.Sprintf("%s<%s>", $NAME, $EMAIL)`,
|
||||
`fmt.Sprintf("%s <%s>", $NAME, $EMAIL)`,
|
||||
).
|
||||
Report("use net/mail Address.String() instead of fmt.Sprintf()").
|
||||
Suggest("(&mail.Address{Name:$NAME, Address:$EMAIL}).String()")
|
||||
}
|
||||
|
||||
func errnetclosed(m dsl.Matcher) {
|
||||
m.Match(
|
||||
`strings.Contains($err.Error(), $text)`,
|
||||
).
|
||||
Where(m["text"].Text.Matches("\".*closed network connection.*\"")).
|
||||
Report(`String matching against error texts is fragile; use net.ErrClosed instead`).
|
||||
Suggest(`errors.Is($err, net.ErrClosed)`)
|
||||
}
|
||||
|
||||
func httpheaderadd(m dsl.Matcher) {
|
||||
m.Match(
|
||||
`$H.Add($KEY, $VALUE)`,
|
||||
).
|
||||
Where(m["H"].Type.Is("http.Header")).
|
||||
Report("use http.Header.Set method instead of Add to overwrite all existing header values").
|
||||
Suggest(`$H.Set($KEY, $VALUE)`)
|
||||
}
|
||||
|
||||
func hmacnew(m dsl.Matcher) {
|
||||
m.Match("hmac.New(func() hash.Hash { return $x }, $_)",
|
||||
`$f := func() hash.Hash { return $x }
|
||||
$*_
|
||||
hmac.New($f, $_)`,
|
||||
).Where(m["x"].Pure).
|
||||
Report("invalid hash passed to hmac.New()")
|
||||
}
|
||||
|
||||
func writestring(m dsl.Matcher) {
|
||||
m.Match(`io.WriteString($w, string($b))`).
|
||||
Where(m["b"].Type.Is("[]byte")).
|
||||
Suggest("$w.Write($b)")
|
||||
}
|
||||
|
||||
func badlock(m dsl.Matcher) {
|
||||
// Shouldn't give many false positives without type filter
|
||||
// as Lock+Unlock pairs in combination with defer gives us pretty
|
||||
// a good chance to guess correctly. If we constrain the type to sync.Mutex
|
||||
// then it'll be harder to match embedded locks and custom methods
|
||||
// that may forward the call to the sync.Mutex (or other synchronization primitive).
|
||||
|
||||
m.Match(`$mu.Lock(); defer $mu.RUnlock()`).Report(`maybe $mu.RLock() was intended?`)
|
||||
m.Match(`$mu.RLock(); defer $mu.Unlock()`).Report(`maybe $mu.Lock() was intended?`)
|
||||
}
|
@ -107,10 +107,10 @@ struct VectorIterator {
|
||||
for (auto& iter : iterators_) {
|
||||
if (iter->HasNext()) {
|
||||
auto origin_pair = iter->Next();
|
||||
origin_pair.first = convert_to_segment_offset(
|
||||
origin_pair.first, idx);
|
||||
origin_pair.first =
|
||||
convert_to_segment_offset(origin_pair.first, idx);
|
||||
auto off_dis_pair =
|
||||
std::make_shared<OffsetDisPair>(origin_pair, idx++);
|
||||
std::make_shared<OffsetDisPair>(origin_pair, idx++);
|
||||
heap_.push(off_dis_pair);
|
||||
}
|
||||
}
|
||||
|
@ -297,7 +297,7 @@ PhyUnaryRangeFilterExpr::ExecArrayEqualForIndex(bool reverse) {
|
||||
|
||||
// filtering by index, get candidates.
|
||||
auto size_per_chunk = segment_->size_per_chunk();
|
||||
auto retrieve = [ size_per_chunk, this ](int64_t offset) -> auto{
|
||||
auto retrieve = [ size_per_chunk, this ](int64_t offset) -> auto {
|
||||
auto chunk_idx = offset / size_per_chunk;
|
||||
auto chunk_offset = offset % size_per_chunk;
|
||||
const auto& chunk =
|
||||
|
@ -47,12 +47,12 @@ const prometheus::Histogram::BucketBoundaries bytesBuckets = {
|
||||
536870912, // 512M
|
||||
1073741824}; // 1G
|
||||
|
||||
const prometheus::Histogram::BucketBoundaries ratioBuckets =
|
||||
{0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5,
|
||||
0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0};
|
||||
const prometheus::Histogram::BucketBoundaries ratioBuckets = {
|
||||
0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5,
|
||||
0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0};
|
||||
|
||||
const std::unique_ptr<PrometheusClient>
|
||||
prometheusClient = std::make_unique<PrometheusClient>();
|
||||
const std::unique_ptr<PrometheusClient> prometheusClient =
|
||||
std::make_unique<PrometheusClient>();
|
||||
|
||||
/******************GetMetrics*************************************************************
|
||||
* !!! NOT use SUMMARY metrics here, because when parse SUMMARY metrics in Milvus,
|
||||
|
@ -22,12 +22,11 @@
|
||||
namespace milvus::query {
|
||||
class SubSearchResult {
|
||||
public:
|
||||
SubSearchResult(
|
||||
int64_t num_queries,
|
||||
int64_t topk,
|
||||
const MetricType& metric_type,
|
||||
int64_t round_decimal,
|
||||
const std::vector<knowhere::IndexNode::IteratorPtr>& iters)
|
||||
SubSearchResult(int64_t num_queries,
|
||||
int64_t topk,
|
||||
const MetricType& metric_type,
|
||||
int64_t round_decimal,
|
||||
const std::vector<knowhere::IndexNode::IteratorPtr>& iters)
|
||||
: num_queries_(num_queries),
|
||||
topk_(topk),
|
||||
round_decimal_(round_decimal),
|
||||
@ -41,12 +40,11 @@ class SubSearchResult {
|
||||
int64_t topk,
|
||||
const MetricType& metric_type,
|
||||
int64_t round_decimal)
|
||||
: SubSearchResult(
|
||||
num_queries,
|
||||
topk,
|
||||
metric_type,
|
||||
round_decimal,
|
||||
std::vector<knowhere::IndexNode::IteratorPtr>{}) {
|
||||
: SubSearchResult(num_queries,
|
||||
topk,
|
||||
metric_type,
|
||||
round_decimal,
|
||||
std::vector<knowhere::IndexNode::IteratorPtr>{}) {
|
||||
}
|
||||
|
||||
SubSearchResult(SubSearchResult&& other) noexcept
|
||||
@ -130,8 +128,7 @@ class SubSearchResult {
|
||||
knowhere::MetricType metric_type_;
|
||||
std::vector<int64_t> seg_offsets_;
|
||||
std::vector<float> distances_;
|
||||
std::vector<knowhere::IndexNode::IteratorPtr>
|
||||
chunk_iterators_;
|
||||
std::vector<knowhere::IndexNode::IteratorPtr> chunk_iterators_;
|
||||
};
|
||||
|
||||
} // namespace milvus::query
|
||||
|
@ -230,8 +230,7 @@ ExecPlanNodeVisitor::VectorVisitorImpl(VectorPlanNode& node) {
|
||||
double total_cost =
|
||||
std::chrono::duration<double, std::micro>(vector_end - scalar_start)
|
||||
.count();
|
||||
double scalar_ratio =
|
||||
total_cost > 0.0 ? scalar_cost / total_cost : 0.0;
|
||||
double scalar_ratio = total_cost > 0.0 ? scalar_cost / total_cost : 0.0;
|
||||
monitor::internal_core_search_latency_scalar_proportion.Observe(
|
||||
scalar_ratio);
|
||||
}
|
||||
|
@ -491,9 +491,10 @@ DiskFileManagerImpl::CacheRawDataToDisk(std::vector<std::string> remote_files) {
|
||||
if (data_type == milvus::DataType::VECTOR_SPARSE_FLOAT) {
|
||||
dim = std::max(
|
||||
dim,
|
||||
(uint32_t)(std::dynamic_pointer_cast<
|
||||
FieldData<SparseFloatVector>>(field_data)
|
||||
->Dim()));
|
||||
(uint32_t)(
|
||||
std::dynamic_pointer_cast<FieldData<SparseFloatVector>>(
|
||||
field_data)
|
||||
->Dim()));
|
||||
auto sparse_rows =
|
||||
static_cast<const knowhere::sparse::SparseRow<float>*>(
|
||||
field_data->Data());
|
||||
|
@ -188,7 +188,7 @@ func (s *Server) startHTTPServer(errChan chan error) {
|
||||
// Process request
|
||||
c.Next()
|
||||
|
||||
latency := time.Now().Sub(start)
|
||||
latency := time.Since(start)
|
||||
metrics.RestfulReqLatency.WithLabelValues(
|
||||
strconv.FormatInt(paramtable.GetNodeID(), 10), path,
|
||||
).Observe(float64(latency.Milliseconds()))
|
||||
|
@ -568,6 +568,7 @@ func (suite *ScoreBasedBalancerTestSuite) TestDelegatorPreserveMemory() {
|
||||
segmentPlans, _ = suite.getCollectionBalancePlans(balancer, c.collectionID)
|
||||
suite.Len(segmentPlans, 1)
|
||||
suite.Equal(segmentPlans[0].To, int64(2))
|
||||
suite.Len(channelPlans, 0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user