diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index dcebf2c2bee..f135cd23195 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -17,5 +17,5 @@ jobs: - name: golangci-lint uses: golangci/golangci-lint-action@v3 with: - version: v1.50.1 + version: v1.51.2 args: --verbose --timeout 10m --fix=false --new-from-rev=HEAD~ --config=.golangci.yml diff --git a/Makefile b/Makefile index c9374777afb..90457467353 100644 --- a/Makefile +++ b/Makefile @@ -112,7 +112,7 @@ update-goimports: update-linters: @printf $(COLOR) "Install/update linters..." - @go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.50.1 + @go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.51.2 update-mockgen: @printf $(COLOR) "Install/update mockgen tool..." diff --git a/api/adminservice/v1/service.pb.go b/api/adminservice/v1/service.pb.go index 61cb44b7c33..17991fd327f 100644 --- a/api/adminservice/v1/service.pb.go +++ b/api/adminservice/v1/service.pb.go @@ -113,7 +113,7 @@ var fileDescriptor_cf5ca5e0c737570d = []byte{ // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. @@ -185,10 +185,10 @@ type AdminServiceClient interface { } type adminServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewAdminServiceClient(cc *grpc.ClientConn) AdminServiceClient { +func NewAdminServiceClient(cc grpc.ClientConnInterface) AdminServiceClient { return &adminServiceClient{cc} } diff --git a/api/historyservice/v1/service.pb.go b/api/historyservice/v1/service.pb.go index 4cbdb7435f8..e9e36521ff0 100644 --- a/api/historyservice/v1/service.pb.go +++ b/api/historyservice/v1/service.pb.go @@ -138,7 +138,7 @@ var fileDescriptor_655983da427ae822 = []byte{ // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. @@ -314,10 +314,10 @@ type HistoryServiceClient interface { } type historyServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewHistoryServiceClient(cc *grpc.ClientConn) HistoryServiceClient { +func NewHistoryServiceClient(cc grpc.ClientConnInterface) HistoryServiceClient { return &historyServiceClient{cc} } diff --git a/api/matchingservice/v1/service.pb.go b/api/matchingservice/v1/service.pb.go index d86976b8f20..40cff11fd8c 100644 --- a/api/matchingservice/v1/service.pb.go +++ b/api/matchingservice/v1/service.pb.go @@ -95,7 +95,7 @@ var fileDescriptor_1a5c83076e651916 = []byte{ // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. @@ -147,10 +147,10 @@ type MatchingServiceClient interface { } type matchingServiceClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewMatchingServiceClient(cc *grpc.ClientConn) MatchingServiceClient { +func NewMatchingServiceClient(cc grpc.ClientConnInterface) MatchingServiceClient { return &matchingServiceClient{cc} } diff --git a/service/frontend/workflow_handler.go b/service/frontend/workflow_handler.go index eefd12f3d8d..716edac00fa 100644 --- a/service/frontend/workflow_handler.go +++ b/service/frontend/workflow_handler.go @@ -4351,6 +4351,7 @@ func (wh *WorkflowHandler) validateTaskQueue(t *taskqueuepb.TaskQueue) error { return nil } +//nolint:revive // cyclomatic complexity func (wh *WorkflowHandler) validateBuildIdCompatabilityUpdate( req *workflowservice.UpdateWorkerBuildIdCompatabilityRequest, ) error { diff --git a/service/matching/version_sets.go b/service/matching/version_sets.go index 4cacf86b023..4553148d8ee 100644 --- a/service/matching/version_sets.go +++ b/service/matching/version_sets.go @@ -27,6 +27,7 @@ package matching import ( "encoding/binary" "fmt" + "github.com/dgryski/go-farm" "github.com/pborman/uuid" "go.temporal.io/api/serviceerror" @@ -37,7 +38,7 @@ import ( ) func ToBuildIdOrderingResponse(g *persistence.VersioningData, maxDepth int) *workflowservice.GetWorkerBuildIdCompatabilityResponse { - return depthLimiter(g, maxDepth, false) + return depthLimiter(g, maxDepth) } // HashVersioningData returns a farm.Fingerprint64 hash of the versioning data as bytes. If the data is nonexistent or @@ -55,14 +56,11 @@ func HashVersioningData(data *persistence.VersioningData) []byte { return b } -func depthLimiter(g *persistence.VersioningData, maxDepth int, mutate bool) *workflowservice.GetWorkerBuildIdCompatabilityResponse { +func depthLimiter(g *persistence.VersioningData, maxDepth int) *workflowservice.GetWorkerBuildIdCompatabilityResponse { if maxDepth <= 0 || maxDepth >= len(g.GetVersionSets()) { return &workflowservice.GetWorkerBuildIdCompatabilityResponse{MajorVersionSets: g.GetVersionSets()} } shortened := util.SliceTail(g.GetVersionSets(), maxDepth) - if mutate { - g.VersionSets = shortened - } return &workflowservice.GetWorkerBuildIdCompatabilityResponse{MajorVersionSets: shortened} } @@ -99,14 +97,17 @@ func UpdateVersionSets(existingData *persistence.VersioningData, req *workflowse return err } // Limit graph size if it's grown too large - depthLimiter(existingData, maxSize, true) + newResp := depthLimiter(existingData, maxSize) + existingData.VersionSets = newResp.GetMajorVersionSets() return nil } +//nolint:revive // cyclomatic complexity func updateImpl(existingData *persistence.VersioningData, req *workflowservice.UpdateWorkerBuildIdCompatabilityRequest) error { // First find if the targeted version is already in the sets targetedVersion := extractTargetedVersion(req) - targetSetIx, versionInSetIx := findVersion(existingData, targetedVersion) + findRes := findVersion(existingData, targetedVersion) + targetSetIx, versionInSetIx := findRes.setIx, findRes.indexInSet if req.GetAddNewBuildIdInNewDefaultSet() != "" { // If it's not already in the sets, add it as the new default set @@ -120,7 +121,7 @@ func updateImpl(existingData *persistence.VersioningData, req *workflowservice.U }) } else if addNew := req.GetAddNewCompatibleBuildId(); addNew != nil { compatVer := addNew.GetExistingCompatibleBuildId() - compatSetIx, _ := findVersion(existingData, compatVer) + compatSetIx := findVersion(existingData, compatVer).setIx if compatSetIx == -1 { return serviceerror.NewNotFound( fmt.Sprintf("targeted compatible_version %v not found", compatVer)) @@ -163,17 +164,28 @@ func extractTargetedVersion(req *workflowservice.UpdateWorkerBuildIdCompatabilit return req.GetAddNewBuildIdInNewDefaultSet() } +type findVersionRes struct { + setIx int + indexInSet int +} + // Finds the version in the version sets, returning (set index, index within that set) // Returns -1, -1 if not found. -func findVersion(data *persistence.VersioningData, buildID string) (int, int) { +func findVersion(data *persistence.VersioningData, buildID string) findVersionRes { for setIx, set := range data.GetVersionSets() { for versionIx, version := range set.GetBuildIds() { if version == buildID { - return setIx, versionIx + return findVersionRes{ + setIx: setIx, + indexInSet: versionIx, + } } } } - return -1, -1 + return findVersionRes{ + setIx: -1, + indexInSet: -1, + } } func makeDefaultSet(data *persistence.VersioningData, setIx int) {