Skip to content

Commit 5aac35d

Browse files
amuraruamuraru
authored andcommitted
Upgrade deps
1 parent febf279 commit 5aac35d

File tree

10 files changed

+301
-68
lines changed

10 files changed

+301
-68
lines changed

.github/dependabot.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
version: 2
2+
updates:
3+
# Enable GitHub Actions updates
4+
- package-ecosystem: "github-actions"
5+
directory: "/"
6+
schedule:
7+
interval: "monthly"
8+
open-pull-requests-limit: 10
9+
commit-message:
10+
prefix: "chore"
11+
include: "scope"
12+
13+
# Enable Go module updates
14+
- package-ecosystem: "gomod"
15+
directory: "/"
16+
schedule:
17+
interval: "monthly"
18+
open-pull-requests-limit: 10
19+
commit-message:
20+
prefix: "chore"
21+
include: "scope"
22+
23+
# Enable Docker updates
24+
- package-ecosystem: "docker"
25+
directory: "/"
26+
schedule:
27+
interval: "monthly"
28+
open-pull-requests-limit: 5
29+
commit-message:
30+
prefix: "chore"
31+
include: "scope"

.github/workflows/codeql-analysis.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,17 @@ jobs:
2828

2929
steps:
3030
- name: Checkout repository
31-
uses: actions/checkout@v3
31+
uses: actions/checkout@v4
3232

3333
# Initializes the CodeQL tools for scanning.
3434
- name: Initialize CodeQL
35-
uses: github/codeql-action/init@v2
35+
uses: github/codeql-action/init@v3
3636
with:
3737
languages: go
3838

3939
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java)
4040
- name: Autobuild
41-
uses: github/codeql-action/autobuild@v2
41+
uses: github/codeql-action/autobuild@v3
4242

4343
- name: Perform CodeQL Analysis
44-
uses: github/codeql-action/analyze@v2
44+
uses: github/codeql-action/analyze@v3

.github/workflows/docker-image.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ jobs:
2323
packages: write
2424
steps:
2525
- name: Checkout repository
26-
uses: actions/checkout@v3
26+
uses: actions/checkout@v4
2727
# Login against a Docker registry except on PR
2828
# https://github.com/docker/login-action
2929
- name: Log into registry ${{ env.REGISTRY }}
3030
if: github.event_name != 'pull_request'
31-
uses: docker/login-action@v2
31+
uses: docker/login-action@v3
3232
with:
3333
registry: ${{ env.REGISTRY }}
3434
username: ${{ github.actor }}
@@ -40,11 +40,11 @@ jobs:
4040
# https://github.com/docker/metadata-action
4141
- name: Extract Docker metadata
4242
id: meta
43-
uses: docker/metadata-action@v4
43+
uses: docker/metadata-action@v5
4444
with:
4545
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
4646
- name: Build and push Docker image
47-
uses: docker/build-push-action@v3
47+
uses: docker/build-push-action@v6
4848
with:
4949
context: .
5050
push: ${{ github.event_name != 'pull_request' }}

.github/workflows/snyk-scan.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
runs-on: ubuntu-latest
1414

1515
steps:
16-
- uses: actions/checkout@v3
16+
- uses: actions/checkout@v4
1717

1818
- name: install snyk
1919
run: npm install -g snyk

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
############################################################
22
# Build image
33
############################################################
4-
FROM golang:1.24-alpine AS builder
4+
FROM golang:1.25-alpine AS builder
55

66
ARG VERSION
77
ARG BUILT_AT

e2e/topic_test.go

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
package e2e
2+
3+
import (
4+
"github.com/stretchr/testify/assert"
5+
"github.com/twmb/franz-go/pkg/kmsg"
6+
"sort"
7+
"testing"
8+
)
9+
10+
func TestCalculateAppropriateReplicas(t *testing.T) {
11+
tt := []struct {
12+
TestName string
13+
Brokers []kmsg.MetadataResponseBroker
14+
ReplicationFactor int
15+
LeaderBroker kmsg.MetadataResponseBroker
16+
17+
// Some cases may have more than one possible solution, each entry in the outer array covers one allowed
18+
// solution. The compared int32 array order does not matter, except for the very first item as this indicates
19+
// the preferred leader. For example if you use {2, 0, 1} as expected result this would also be valid for
20+
// the actual result {2, 1, 0} but not for {1, 2, 0} - because '2' must be the first int32.
21+
ExpectedResults [][]int32
22+
}{
23+
{
24+
TestName: "3 Brokers, no rack, RF = 3",
25+
Brokers: []kmsg.MetadataResponseBroker{
26+
{NodeID: 0, Rack: nil},
27+
{NodeID: 1, Rack: nil},
28+
{NodeID: 2, Rack: nil},
29+
},
30+
ReplicationFactor: 3,
31+
LeaderBroker: kmsg.MetadataResponseBroker{NodeID: 2, Rack: nil},
32+
ExpectedResults: [][]int32{{2, 0, 1}},
33+
},
34+
35+
{
36+
TestName: "3 Brokers, 3 racks, RF = 3",
37+
Brokers: []kmsg.MetadataResponseBroker{
38+
{NodeID: 0, Rack: kmsg.StringPtr("a")},
39+
{NodeID: 1, Rack: kmsg.StringPtr("b")},
40+
{NodeID: 2, Rack: kmsg.StringPtr("c")},
41+
},
42+
ReplicationFactor: 3,
43+
LeaderBroker: kmsg.MetadataResponseBroker{NodeID: 2, Rack: kmsg.StringPtr("c")},
44+
ExpectedResults: [][]int32{{2, 0, 1}},
45+
},
46+
47+
{
48+
TestName: "3 Brokers, 3 racks, RF = 1",
49+
Brokers: []kmsg.MetadataResponseBroker{
50+
{NodeID: 0, Rack: kmsg.StringPtr("a")},
51+
{NodeID: 1, Rack: kmsg.StringPtr("b")},
52+
{NodeID: 2, Rack: kmsg.StringPtr("c")},
53+
},
54+
ReplicationFactor: 1,
55+
LeaderBroker: kmsg.MetadataResponseBroker{NodeID: 1, Rack: kmsg.StringPtr("b")},
56+
ExpectedResults: [][]int32{{1}},
57+
},
58+
59+
{
60+
TestName: "3 Brokers, 3 racks, RF = 2",
61+
Brokers: []kmsg.MetadataResponseBroker{
62+
{NodeID: 0, Rack: kmsg.StringPtr("a")},
63+
{NodeID: 1, Rack: kmsg.StringPtr("b")},
64+
{NodeID: 2, Rack: kmsg.StringPtr("c")},
65+
},
66+
ReplicationFactor: 2,
67+
LeaderBroker: kmsg.MetadataResponseBroker{NodeID: 1, Rack: kmsg.StringPtr("b")},
68+
ExpectedResults: [][]int32{{1, 0}, {1, 2}},
69+
},
70+
71+
{
72+
TestName: "6 Brokers, 3 racks, RF = 3",
73+
Brokers: []kmsg.MetadataResponseBroker{
74+
{NodeID: 0, Rack: kmsg.StringPtr("a")},
75+
{NodeID: 1, Rack: kmsg.StringPtr("b")},
76+
{NodeID: 2, Rack: kmsg.StringPtr("c")},
77+
{NodeID: 3, Rack: kmsg.StringPtr("a")},
78+
{NodeID: 4, Rack: kmsg.StringPtr("b")},
79+
{NodeID: 5, Rack: kmsg.StringPtr("c")},
80+
},
81+
ReplicationFactor: 3,
82+
LeaderBroker: kmsg.MetadataResponseBroker{NodeID: 4, Rack: kmsg.StringPtr("b")},
83+
ExpectedResults: [][]int32{{4, 0, 2}, {4, 0, 5}, {4, 3, 2}, {4, 3, 5}},
84+
},
85+
86+
{
87+
TestName: "4 Brokers, 2 racks, RF = 3",
88+
Brokers: []kmsg.MetadataResponseBroker{
89+
{NodeID: 0, Rack: kmsg.StringPtr("a")},
90+
{NodeID: 1, Rack: kmsg.StringPtr("b")},
91+
{NodeID: 2, Rack: kmsg.StringPtr("a")},
92+
{NodeID: 3, Rack: kmsg.StringPtr("b")},
93+
},
94+
ReplicationFactor: 3,
95+
LeaderBroker: kmsg.MetadataResponseBroker{NodeID: 0, Rack: kmsg.StringPtr("a")},
96+
ExpectedResults: [][]int32{{0, 1, 2}, {0, 1, 3}, {0, 2, 3}},
97+
},
98+
99+
{
100+
TestName: "6 Brokers, 3 racks, RF = 3, lowest node id != 0",
101+
Brokers: []kmsg.MetadataResponseBroker{
102+
{NodeID: 10, Rack: kmsg.StringPtr("a")},
103+
{NodeID: 11, Rack: kmsg.StringPtr("b")},
104+
{NodeID: 12, Rack: kmsg.StringPtr("c")},
105+
{NodeID: 13, Rack: kmsg.StringPtr("a")},
106+
{NodeID: 14, Rack: kmsg.StringPtr("b")},
107+
{NodeID: 15, Rack: kmsg.StringPtr("c")},
108+
},
109+
ReplicationFactor: 3,
110+
LeaderBroker: kmsg.MetadataResponseBroker{NodeID: 11, Rack: kmsg.StringPtr("b")},
111+
ExpectedResults: [][]int32{{11, 10, 12}, {11, 12, 13}, {11, 13, 15}},
112+
},
113+
114+
{
115+
TestName: "6 Brokers, 3 racks, RF = 5, lowest node id != 0",
116+
Brokers: []kmsg.MetadataResponseBroker{
117+
{NodeID: 10, Rack: kmsg.StringPtr("a")},
118+
{NodeID: 11, Rack: kmsg.StringPtr("b")},
119+
{NodeID: 12, Rack: kmsg.StringPtr("c")},
120+
{NodeID: 13, Rack: kmsg.StringPtr("a")},
121+
{NodeID: 14, Rack: kmsg.StringPtr("b")},
122+
{NodeID: 15, Rack: kmsg.StringPtr("c")},
123+
},
124+
ReplicationFactor: 5,
125+
LeaderBroker: kmsg.MetadataResponseBroker{NodeID: 11, Rack: kmsg.StringPtr("b")},
126+
ExpectedResults: [][]int32{{11, 10, 12, 13, 14}, {11, 10, 13, 14, 15}, {11, 12, 13, 14, 15}, {11, 10, 12, 13, 15}, {11, 10, 12, 14, 15}},
127+
},
128+
}
129+
130+
svc := Service{}
131+
for _, test := range tt {
132+
meta := kmsg.NewMetadataResponse()
133+
meta.Brokers = test.Brokers
134+
replicaIDs := svc.calculateAppropriateReplicas(&meta, test.ReplicationFactor, test.LeaderBroker)
135+
136+
matchesAtLeastOneExpectedResult := false
137+
for _, possibleResult := range test.ExpectedResults {
138+
isValidResult := possibleResult[0] == replicaIDs[0] && doElementsMatch(possibleResult, replicaIDs)
139+
if isValidResult {
140+
matchesAtLeastOneExpectedResult = true
141+
break
142+
}
143+
}
144+
if !matchesAtLeastOneExpectedResult {
145+
// Use first elementsmatch to print some valid result along with the actual results.
146+
assert.ElementsMatch(t, test.ExpectedResults[0], replicaIDs, test.TestName)
147+
}
148+
}
149+
}
150+
151+
func doElementsMatch(a, b []int32) bool {
152+
if len(a) != len(b) {
153+
return false
154+
}
155+
156+
sort.Slice(a, func(i, j int) bool { return a[i] < a[j] })
157+
sort.Slice(b, func(i, j int) bool { return b[i] < b[j] })
158+
for i, num := range a {
159+
if num != b[i] {
160+
return false
161+
}
162+
}
163+
164+
return true
165+
}

go.mod

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/cloudhut/kminion/v2
22

3-
go 1.24
3+
go 1.25
44

55
require (
66
github.com/google/uuid v1.6.0
@@ -10,16 +10,16 @@ require (
1010
github.com/mitchellh/mapstructure v1.5.0
1111
github.com/orcaman/concurrent-map v1.0.0
1212
github.com/pkg/errors v0.9.1
13-
github.com/prometheus/client_golang v1.20.5
14-
github.com/stretchr/testify v1.9.0
15-
github.com/twmb/franz-go v1.18.0
16-
github.com/twmb/franz-go/pkg/kadm v1.14.0
17-
github.com/twmb/franz-go/pkg/kmsg v1.9.0
13+
github.com/prometheus/client_golang v1.23.2
14+
github.com/stretchr/testify v1.11.1
15+
github.com/twmb/franz-go v1.19.5
16+
github.com/twmb/franz-go/pkg/kadm v1.16.1
17+
github.com/twmb/franz-go/pkg/kmsg v1.11.2
1818
github.com/twmb/franz-go/pkg/sasl/kerberos v1.1.0
1919
go.uber.org/atomic v1.11.0
20-
go.uber.org/automaxprocs v1.5.2
21-
go.uber.org/zap v1.24.0
22-
golang.org/x/sync v0.2.0
20+
go.uber.org/automaxprocs v1.6.0
21+
go.uber.org/zap v1.27.0
22+
golang.org/x/sync v0.17.0
2323
)
2424

2525
require (
@@ -32,20 +32,21 @@ require (
3232
github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect
3333
github.com/jcmturner/gofork v1.7.6 // indirect
3434
github.com/jcmturner/rpc/v2 v2.0.3 // indirect
35-
github.com/klauspost/compress v1.17.11 // indirect
35+
github.com/klauspost/compress v1.18.0 // indirect
3636
github.com/mitchellh/copystructure v1.2.0 // indirect
3737
github.com/mitchellh/reflectwalk v1.0.2 // indirect
3838
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
3939
github.com/pelletier/go-toml v1.9.1 // indirect
40-
github.com/pierrec/lz4/v4 v4.1.21 // indirect
40+
github.com/pierrec/lz4/v4 v4.1.22 // indirect
4141
github.com/pmezard/go-difflib v1.0.0 // indirect
42-
github.com/prometheus/client_model v0.6.1 // indirect
43-
github.com/prometheus/common v0.60.1 // indirect
44-
github.com/prometheus/procfs v0.15.1 // indirect
42+
github.com/prometheus/client_model v0.6.2 // indirect
43+
github.com/prometheus/common v0.66.1 // indirect
44+
github.com/prometheus/procfs v0.16.1 // indirect
4545
go.uber.org/multierr v1.11.0 // indirect
46-
golang.org/x/crypto v0.41.0 // indirect
47-
golang.org/x/net v0.43.0 // indirect
48-
golang.org/x/sys v0.35.0 // indirect
49-
google.golang.org/protobuf v1.35.1 // indirect
46+
go.yaml.in/yaml/v2 v2.4.2 // indirect
47+
golang.org/x/crypto v0.42.0 // indirect
48+
golang.org/x/net v0.44.0 // indirect
49+
golang.org/x/sys v0.36.0 // indirect
50+
google.golang.org/protobuf v1.36.8 // indirect
5051
gopkg.in/yaml.v3 v3.0.1 // indirect
5152
)

0 commit comments

Comments
 (0)