From f04ef17410eb89ee732a2ccb420ab65d7b89b610 Mon Sep 17 00:00:00 2001 From: Travis Bischel Date: Tue, 31 Oct 2023 20:50:17 -0600 Subject: [PATCH] parent 6ebcb430e6ec5b2b8caafa2c7b29e324e60d0474 author Travis Bischel 1698807017 -0600 committer Tiago Peczenyj 1703159929 +0100 parent 6ebcb430e6ec5b2b8caafa2c7b29e324e60d0474 author Travis Bischel 1698807017 -0600 committer Tiago Peczenyj 1703159889 +0100 kgo: no-op mark functions when not using AutoCommitMarks Closes #598. kgo: pin AddPartitionsToTxn to v3 when using one transaction KIP-890 has been updated such that v3 must be used by clients. We will pin to v3 unless multiple transactions are being added, or unless any transaction is verify only. Closes #609. GHA: try redpandadata/redpanda Latest stable kgo: be sure to use topics when other topics are paused Follow up from #585, there was a bug in the commit for it. If any topic was paused, then all non-paused topics would be returned once, but they would not be marked as fetchable after that. I _think_ the non-fetchability would eventually be cleared on a metadata update, _but_ the source would re-fetch from the old position again. The only way the topic would advance would be if no topics were paused after the metadata update. However this is a bit confusing, and overall this patch is required. This also patches a second bug in PollFetches with pausing: if a topic has a paused partition, if the fetch response does NOT contain any paused partitions, then the logic would actually strip the entire topic. The pause tests have been strengthened a good bit -- all lines but one are hit, and the one line that is not hit could more easily be hit if more partitions are added to the topic / a cluster of size one is used. The line is currently not hit because it requires one paused partition and one unpaused partition to be returned from the same broker at the same time. Lastly, this adds an error reason to why list or epoch is reloading, which was used briefly while investigating test slowness. sticky: further improvements * Introduces separate functions for go 1.21+, allowing to eliminate unremoveable allocs from sort.Sort. To keep it simple, this simplifies <=1.20 a little bit, so that is **slightly** more inefficient. * Improves new-partition assignment further -- ensure we always place unassigned partitions on the least consuming member. CHANGELOG: update for v1.15.2 parent 33e15f9cbd6e77ff80a639d6530d7c11edf1f147 author Victor 1699638659 -0300 committer Tiago Peczenyj 1703159232 +0100 parent 33e15f9cbd6e77ff80a639d6530d7c11edf1f147 author Victor 1699638659 -0300 committer Tiago Peczenyj 1703159156 +0100 chore: fix typo define public interface instead use *logrus.Logger add example fix lint issue with exhaustive add new api improve tests, format code Update klogrus.go Improve existing documentation Update klogrus.go Fix typos Update klogrus.go remove period kgo source: use the proper topic-to-id map when forgetting topics Adding topics to a session needs to use the fetch request's topic2id map (which then promotes IDs into the session t2id map). Importantly, and previously this was wrong / not the case: removing topics from a session needs to use the session's t2id map. The topic does not exist in the request's topic2id map, because well, it's being forgotten. It's not in the fetch request. Adds some massive comments explaining the situation. Closes #620. consuming: reset to nearest if we receive OOOR while fetching If we receive OOOR while fetching after a fetch was previously successful, something odd happened in the broker. Either what we were consuming was truncated underfoot, which is normal and expected (for very slow consumers), or data loss occurred without a leadership transfer. We will reset to the nearest offset after our prior consumed offset (by time!) because, well, that's what's most valid: we previously had a valid offset, and now it is invalid. Closes #621. use bytes buffer instead of ReadAll CHANGELOG: note incoming v1.15.3 pkg/sr: improve base URL and resource path joining * use `url.JoinPath()` to join the base URL with the path for cleaning any ./ or ../ element * also move hardDelete to a request context query parameter kfake: add SleepControl This function allows you to sleep a function you are controlling until your wakeup function returns. The control function effectively yields to other requests. Note that since requests must be handled in order, you need to be a bit careful to not block other requests (unless you intentionally do that). This basically does what it says on the tin. The behavior of everything else is unchanged -- you can KeepControl, you can return false to say it wasn't handled, etc. The logic and control flow is a good bit ugly, but it works and is fairly documented and "well contained". In working on this, I also found and fixed a bug that resulted in correllation errors when handling join&sync. kgo group tests still work against kfake's "hidden" main.go, and I have tested SleepControl with/without KeepControl, and with/without returning handled=true. build(deps): bump golang.org/x/crypto in /pkg/sasl/kerberos Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.14.0 to 0.17.0. - [Commits](https://github.com/golang/crypto/compare/v0.14.0...v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: indirect ... Signed-off-by: dependabot[bot] build(deps): bump golang.org/x/crypto from 0.13.0 to 0.17.0 in /pkg/kadm Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.13.0 to 0.17.0. - [Commits](https://github.com/golang/crypto/compare/v0.13.0...v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: direct:production ... Signed-off-by: dependabot[bot] build(deps): bump golang.org/x/crypto in /examples/bench Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.11.0 to 0.17.0. - [Commits](https://github.com/golang/crypto/compare/v0.11.0...v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: indirect ... Signed-off-by: dependabot[bot] bump all deps, except klauspost/compress bumping klauspost/compress requires go1.19. We'll do this bump with v1.16. fix go.* kgo source: use the proper topic-to-id map when forgetting topics Adding topics to a session needs to use the fetch request's topic2id map (which then promotes IDs into the session t2id map). Importantly, and previously this was wrong / not the case: removing topics from a session needs to use the session's t2id map. The topic does not exist in the request's topic2id map, because well, it's being forgotten. It's not in the fetch request. Adds some massive comments explaining the situation. Closes #620. consuming: reset to nearest if we receive OOOR while fetching If we receive OOOR while fetching after a fetch was previously successful, something odd happened in the broker. Either what we were consuming was truncated underfoot, which is normal and expected (for very slow consumers), or data loss occurred without a leadership transfer. We will reset to the nearest offset after our prior consumed offset (by time!) because, well, that's what's most valid: we previously had a valid offset, and now it is invalid. Closes #621. use bytes buffer instead of ReadAll CHANGELOG: note incoming v1.15.3 pkg/sr: improve base URL and resource path joining * use `url.JoinPath()` to join the base URL with the path for cleaning any ./ or ../ element * also move hardDelete to a request context query parameter kfake: add SleepControl This function allows you to sleep a function you are controlling until your wakeup function returns. The control function effectively yields to other requests. Note that since requests must be handled in order, you need to be a bit careful to not block other requests (unless you intentionally do that). This basically does what it says on the tin. The behavior of everything else is unchanged -- you can KeepControl, you can return false to say it wasn't handled, etc. The logic and control flow is a good bit ugly, but it works and is fairly documented and "well contained". In working on this, I also found and fixed a bug that resulted in correllation errors when handling join&sync. kgo group tests still work against kfake's "hidden" main.go, and I have tested SleepControl with/without KeepControl, and with/without returning handled=true. fix go.* chore: fix typo define public interface instead use *logrus.Logger add example fix lint issue with exhaustive add new api improve tests, format code Update klogrus.go Improve existing documentation Update klogrus.go Fix typos Update klogrus.go remove period kgo source: use the proper topic-to-id map when forgetting topics Adding topics to a session needs to use the fetch request's topic2id map (which then promotes IDs into the session t2id map). Importantly, and previously this was wrong / not the case: removing topics from a session needs to use the session's t2id map. The topic does not exist in the request's topic2id map, because well, it's being forgotten. It's not in the fetch request. Adds some massive comments explaining the situation. Closes #620. consuming: reset to nearest if we receive OOOR while fetching If we receive OOOR while fetching after a fetch was previously successful, something odd happened in the broker. Either what we were consuming was truncated underfoot, which is normal and expected (for very slow consumers), or data loss occurred without a leadership transfer. We will reset to the nearest offset after our prior consumed offset (by time!) because, well, that's what's most valid: we previously had a valid offset, and now it is invalid. Closes #621. use bytes buffer instead of ReadAll CHANGELOG: note incoming v1.15.3 pkg/sr: improve base URL and resource path joining * use `url.JoinPath()` to join the base URL with the path for cleaning any ./ or ../ element * also move hardDelete to a request context query parameter kfake: add SleepControl This function allows you to sleep a function you are controlling until your wakeup function returns. The control function effectively yields to other requests. Note that since requests must be handled in order, you need to be a bit careful to not block other requests (unless you intentionally do that). This basically does what it says on the tin. The behavior of everything else is unchanged -- you can KeepControl, you can return false to say it wasn't handled, etc. The logic and control flow is a good bit ugly, but it works and is fairly documented and "well contained". In working on this, I also found and fixed a bug that resulted in correllation errors when handling join&sync. kgo group tests still work against kfake's "hidden" main.go, and I have tested SleepControl with/without KeepControl, and with/without returning handled=true. build(deps): bump golang.org/x/crypto in /pkg/sasl/kerberos Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.14.0 to 0.17.0. - [Commits](https://github.com/golang/crypto/compare/v0.14.0...v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: indirect ... Signed-off-by: dependabot[bot] build(deps): bump golang.org/x/crypto from 0.13.0 to 0.17.0 in /pkg/kadm Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.13.0 to 0.17.0. - [Commits](https://github.com/golang/crypto/compare/v0.13.0...v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: direct:production ... Signed-off-by: dependabot[bot] build(deps): bump golang.org/x/crypto in /examples/bench Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.11.0 to 0.17.0. - [Commits](https://github.com/golang/crypto/compare/v0.11.0...v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: indirect ... Signed-off-by: dependabot[bot] bump all deps, except klauspost/compress bumping klauspost/compress requires go1.19. We'll do this bump with v1.16. fix go.* kgo source: use the proper topic-to-id map when forgetting topics Adding topics to a session needs to use the fetch request's topic2id map (which then promotes IDs into the session t2id map). Importantly, and previously this was wrong / not the case: removing topics from a session needs to use the session's t2id map. The topic does not exist in the request's topic2id map, because well, it's being forgotten. It's not in the fetch request. Adds some massive comments explaining the situation. Closes #620. consuming: reset to nearest if we receive OOOR while fetching If we receive OOOR while fetching after a fetch was previously successful, something odd happened in the broker. Either what we were consuming was truncated underfoot, which is normal and expected (for very slow consumers), or data loss occurred without a leadership transfer. We will reset to the nearest offset after our prior consumed offset (by time!) because, well, that's what's most valid: we previously had a valid offset, and now it is invalid. Closes #621. use bytes buffer instead of ReadAll CHANGELOG: note incoming v1.15.3 pkg/sr: improve base URL and resource path joining * use `url.JoinPath()` to join the base URL with the path for cleaning any ./ or ../ element * also move hardDelete to a request context query parameter kfake: add SleepControl This function allows you to sleep a function you are controlling until your wakeup function returns. The control function effectively yields to other requests. Note that since requests must be handled in order, you need to be a bit careful to not block other requests (unless you intentionally do that). This basically does what it says on the tin. The behavior of everything else is unchanged -- you can KeepControl, you can return false to say it wasn't handled, etc. The logic and control flow is a good bit ugly, but it works and is fairly documented and "well contained". In working on this, I also found and fixed a bug that resulted in correllation errors when handling join&sync. kgo group tests still work against kfake's "hidden" main.go, and I have tested SleepControl with/without KeepControl, and with/without returning handled=true. fix go.* kfake: add DropControl, SleepOutOfOrder, CoordinatorFor, RehashCoordinators * Sleeping was a bit limited because if two requests came in on the same connection, you could not really chain logic. Sleeping out of order allows you to at least run some logic to gate how requests behave with each other. It's not the most obvious, so it is not the default. * Adds SleepOutOfOrder * Adds CoordinatorFor so you can see which "broker" a coordinator request will go to * Adds RehashCoordinators to change where requests are hashed to The latter two allow you to loop rehashing until a coordinator for your key changes, if you want to force NotCoordinator requests. kgo: do not cancel FindCoordinator if the parent context cancels Some load testing in Redpanda showed a failure where consuming quit unexpectedly and unrecoverably. The sequence of events is: * if OffsetCommit is issued just before Heartbeat * and the group needs to be loaded so FindCoordinator is triggered, * and OffsetCommit happens again, canceling the prior commit's context Then, * FindCoordinator would cancel * Heartbeat, which is waiting on the same load, would fail with context.Canceled * This error is seen as a group leave error * The group management logic would quit entirely. Now, the context used for FindCoordinator is the client context, which is only closed on client close. This is also better anyway -- if two requests are waiting for the same coordinator load, we don't want the first request canceling to error the second request. If all requests cancel and we have a stray FindCoordinator in flight, that's ok too, because well, worst case we'll just eventually have a little bit of extra data cached that is likely needed in the future anyway. Closes redpanda-data/redpanda#15131 CHANGELOG: document incoming v1.15.4 --- .github/workflows/lint-and-test.yml | 2 +- CHANGELOG.md | 67 ++ examples/admin_client/go.mod | 12 +- examples/admin_client/go.sum | 24 +- examples/bench/compare/sarama/go.mod | 10 +- examples/bench/compare/sarama/go.sum | 20 +- examples/bench/compare/segment/go.mod | 9 +- examples/bench/compare/segment/go.sum | 27 +- examples/bench/go.mod | 23 +- examples/bench/go.sum | 49 +- .../autocommit_marks/go.mod | 8 +- .../autocommit_marks/go.sum | 16 +- .../autocommit_normal/go.mod | 8 +- .../autocommit_normal/go.sum | 16 +- .../manual_commit/go.mod | 8 +- .../manual_commit/go.sum | 16 +- examples/group_consuming/go.mod | 8 +- examples/group_consuming/go.sum | 16 +- .../expansive_prometheus/go.mod | 21 +- .../expansive_prometheus/go.sum | 45 +- .../plugin_go-metrics/go.mod | 8 +- .../plugin_go-metrics/go.sum | 16 +- .../hooks_and_logging/plugin_kotel/go.mod | 28 +- .../hooks_and_logging/plugin_kotel/go.sum | 60 +- .../plugin_prometheus/go.mod | 21 +- .../plugin_prometheus/go.sum | 45 +- examples/hooks_and_logging/plugin_zap/go.mod | 10 +- examples/hooks_and_logging/plugin_zap/go.sum | 21 +- examples/manual_committing/go.mod | 12 +- examples/manual_committing/go.sum | 24 +- examples/sasl/aws_msk_iam/go.mod | 10 +- examples/sasl/aws_msk_iam/go.sum | 48 +- examples/sasl/plaintext/go.mod | 8 +- examples/sasl/plaintext/go.sum | 16 +- examples/sasl/sasl_ssl_plain/go.mod | 8 +- examples/sasl/sasl_ssl_plain/go.sum | 16 +- examples/schema_registry/go.mod | 12 +- examples/schema_registry/go.sum | 24 +- examples/transactions/eos/go.mod | 8 +- examples/transactions/eos/go.sum | 16 +- .../transactions/produce_and_consume/go.mod | 8 +- .../transactions/produce_and_consume/go.sum | 16 +- go.mod | 4 +- go.sum | 8 +- pkg/kadm/go.mod | 10 +- pkg/kadm/go.sum | 20 +- pkg/kfake/01_fetch.go | 4 +- pkg/kfake/08_offset_commit.go | 2 +- pkg/kfake/09_offset_fetch.go | 2 +- pkg/kfake/11_join_group.go | 2 +- pkg/kfake/12_heartbeat.go | 2 +- pkg/kfake/13_leave_group.go | 2 +- pkg/kfake/14_sync_group.go | 2 +- pkg/kfake/15_describe_groups.go | 2 +- pkg/kfake/16_list_groups.go | 2 +- pkg/kfake/17_sasl_handshake.go | 2 +- pkg/kfake/36_sasl_authenticate.go | 2 +- pkg/kfake/42_delete_groups.go | 2 +- pkg/kfake/47_offset_delete.go | 2 +- pkg/kfake/client_conn.go | 9 +- pkg/kfake/cluster.go | 603 ++++++++++++++++-- pkg/kfake/config.go | 11 + pkg/kfake/go.mod | 6 +- pkg/kfake/go.sum | 12 +- pkg/kfake/groups.go | 57 +- pkg/kfake/sasl.go | 2 +- pkg/kgo/client.go | 62 +- pkg/kgo/compression.go | 14 +- pkg/kgo/config.go | 2 +- pkg/kgo/consumer.go | 14 +- pkg/kgo/consumer_direct_test.go | 156 ++++- pkg/kgo/consumer_group.go | 51 +- pkg/kgo/internal/sticky/go121.go | 28 + pkg/kgo/internal/sticky/goold.go | 22 + pkg/kgo/internal/sticky/sticky.go | 68 +- pkg/kgo/internal/sticky/sticky_test.go | 14 + pkg/kgo/source.go | 88 ++- pkg/sasl/kerberos/go.mod | 6 +- pkg/sasl/kerberos/go.sum | 12 +- pkg/sr/api.go | 4 +- pkg/sr/client.go | 21 +- pkg/sr/params.go | 10 + plugin/kgmetrics/go.mod | 8 +- plugin/kgmetrics/go.sum | 16 +- plugin/klogr/go.mod | 10 +- plugin/klogr/go.sum | 20 +- plugin/klogrus/go.mod | 15 +- plugin/klogrus/go.sum | 21 +- plugin/klogrus/klogrus.go | 26 +- plugin/klogrus/klogrus_test.go | 44 ++ plugin/kotel/go.mod | 18 +- plugin/kotel/go.sum | 38 +- plugin/kphuslog/go.mod | 10 +- plugin/kphuslog/go.sum | 20 +- plugin/kprom/go.mod | 21 +- plugin/kprom/go.sum | 45 +- plugin/kslog/go.mod | 8 +- plugin/kslog/go.sum | 16 +- plugin/kzap/go.mod | 10 +- plugin/kzap/go.sum | 21 +- plugin/kzerolog/go.mod | 14 +- plugin/kzerolog/go.sum | 32 +- 102 files changed, 1750 insertions(+), 845 deletions(-) create mode 100644 pkg/kgo/internal/sticky/go121.go create mode 100644 pkg/kgo/internal/sticky/goold.go create mode 100644 plugin/klogrus/klogrus_test.go diff --git a/.github/workflows/lint-and-test.yml b/.github/workflows/lint-and-test.yml index 351c39f7..9ddd2a49 100644 --- a/.github/workflows/lint-and-test.yml +++ b/.github/workflows/lint-and-test.yml @@ -69,7 +69,7 @@ jobs: container: golang:1.21.3 services: redpanda: - image: vectorized/redpanda-nightly:latest + image: redpandadata/redpanda ports: - 9092:9092 env: diff --git a/CHANGELOG.md b/CHANGELOG.md index 242381e0..0a6ea858 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,70 @@ +v1.15.4 +=== + +This patch release fixes a difficult to encounter, but +fatal-for-group-consuming bug. + +The sequence of events to trigger this bug: +* OffsetCommit is issued before Heartbeat +* The coordinator for the group needs to be loaded (so, likely, a previous `NOT_COORDINATOR` error was received) +* OffsetCommit triggers the load +* a second OffsetCommit happens while the first is still running, canceling the first OffsetCommit's context + +In this sequence of events, FindCoordinator will fail with `context.Canceled` +and, importantly, also return that error to Heartbeat. In the guts of the +client, a `context.Canceled` error _should_ only happen when a group is being +left, so this error is recognized as a group-is-leaving error and the group +management goroutine exits. Thus, the group is never rejoined. + +This likely requires a system to be overloaded to begin with, because +FindCoordinator requests are usually very fast. + +The fix is to use the client context when issuing FindCoordinator, rather than +the parent request. The parent request can still quit, but FindCoordinator +continues. No parent request can affect any other waiting request. + +This patch also includes a dep bump for everything but klauspost/compress; +klauspost/compress changed go.mod to require go1.19, while this repo still +requires 1.18. v1.16 will change to require 1.19 and then this repo will bump +klauspost/compress. + +There were multiple additions to the yet-unversioned kfake package, so that an +advanced "test" could be written to trigger the behavior for this patch and +then ensure it is fixed. To see the test, please check the comment on PR +[650](https://github.com/twmb/franz-go/pull/650). + +- [`7d050fc`](https://github.com/twmb/franz-go/commit/7d050fc) kgo: do not cancel FindCoordinator if the parent context cancels + +v1.15.3 +=== + +This patch release fixes one minor bug, reduces allocations on gzip and lz4 +decompression, and contains a behavior improvement when OffsetOutOfRange is +received while consuming. + +For the bugfix: previously, if the client was using a fetch session (as is the +default when consuming), and all partitions for a topic transfer to a different +broker, the client would not properly unregister the topic from the prior +broker's fetch session. This could result in more data being consumed and +discarded than necessary (although, it's possible the broker just reset the +fetch session anyway, I'm not entirely positive). + +- [`fdf371c`](https://github.com/twmb/franz-go/commit/fdf371c) use bytes buffer instead of ReadAll (thanks [@kalbhor](https://github.com/kalbhor)!) +- [`e6ed69f`](https://github.com/twmb/franz-go/commit/e6ed69f) consuming: reset to nearest if we receive OOOR while fetching +- [`1b6a721`](https://github.com/twmb/franz-go/commit/1b6a721) **bugfix** kgo source: use the proper topic-to-id map when forgetting topics + +v1.15.2 +=== + +This patch release fixes two bugs and changes Mark functions to be no-ops when +not using AutoCommitMarks to avoid confusion. This also includes a minor commit +further improving the sticky balancer. See the commits for more details. + +- [`72778cb`](https://github.com/twmb/franz-go/commit/72778cb) **behavior change** kgo: no-op mark functions when not using AutoCommitMarks +- [`e209bb6`](https://github.com/twmb/franz-go/commit/e209bb6) **bugfix** kgo: pin AddPartitionsToTxn to v3 when using one transaction +- [`36b4437`](https://github.com/twmb/franz-go/commit/36b4437) sticky: further improvements +- [`af5bc1f`](https://github.com/twmb/franz-go/commit/af5bc1f) **bugfix** kgo: be sure to use topics when other topics are paused + v1.15.1 === diff --git a/examples/admin_client/go.mod b/examples/admin_client/go.mod index f3609ed4..5e78f731 100644 --- a/examples/admin_client/go.mod +++ b/examples/admin_client/go.mod @@ -3,13 +3,13 @@ module admin_client go 1.20 require ( - github.com/twmb/franz-go v1.14.3 - github.com/twmb/franz-go/pkg/kadm v1.9.0 + github.com/twmb/franz-go v1.15.3 + github.com/twmb/franz-go/pkg/kadm v1.10.0 ) require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect - golang.org/x/crypto v0.11.0 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect + golang.org/x/crypto v0.17.0 // indirect ) diff --git a/examples/admin_client/go.sum b/examples/admin_client/go.sum index 9f6e3201..df0861c6 100644 --- a/examples/admin_client/go.sum +++ b/examples/admin_client/go.sum @@ -1,12 +1,12 @@ -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kadm v1.9.0 h1:UgwBu0YCd6P8HLdg6ZRA4v9W6/zoI1042fOd2CvvLBE= -github.com/twmb/franz-go/pkg/kadm v1.9.0/go.mod h1:eG3f+GHUndq1CUSVvjp+WdNq5zePeJi3tEHzyTkao6g= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= -golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kadm v1.10.0 h1:3oYKNP+e3HGo4GYadrDeRxOaAIsOXmX6LBVMz9PxpCU= +github.com/twmb/franz-go/pkg/kadm v1.10.0/go.mod h1:hUMoV4SRho+2ij/S9cL39JaLsr+XINjn0ZkCdBY2DXc= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= diff --git a/examples/bench/compare/sarama/go.mod b/examples/bench/compare/sarama/go.mod index b12269a7..ee752117 100644 --- a/examples/bench/compare/sarama/go.mod +++ b/examples/bench/compare/sarama/go.mod @@ -6,7 +6,7 @@ require github.com/Shopify/sarama v1.38.1 require ( github.com/davecgh/go-spew v1.1.1 // indirect - github.com/eapache/go-resiliency v1.3.0 // indirect + github.com/eapache/go-resiliency v1.5.0 // indirect github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 // indirect github.com/eapache/queue v1.1.0 // indirect github.com/golang/snappy v0.0.4 // indirect @@ -18,9 +18,9 @@ require ( github.com/jcmturner/gofork v1.7.6 // indirect github.com/jcmturner/gokrb5/v8 v8.4.4 // indirect github.com/jcmturner/rpc/v2 v2.0.3 // indirect - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/net v0.17.0 // indirect + golang.org/x/crypto v0.17.0 // indirect + golang.org/x/net v0.19.0 // indirect ) diff --git a/examples/bench/compare/sarama/go.sum b/examples/bench/compare/sarama/go.sum index cc819026..f2d83342 100644 --- a/examples/bench/compare/sarama/go.sum +++ b/examples/bench/compare/sarama/go.sum @@ -4,8 +4,8 @@ github.com/Shopify/toxiproxy/v2 v2.5.0 h1:i4LPT+qrSlKNtQf5QliVjdP08GyAH8+BUIc9gT github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/eapache/go-resiliency v1.3.0 h1:RRL0nge+cWGlxXbUzJ7yMcq6w2XBEr19dCN6HECGaT0= -github.com/eapache/go-resiliency v1.3.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho= +github.com/eapache/go-resiliency v1.5.0 h1:dRsaR00whmQD+SgVKlq/vCRFNgtEb5yppyeVos3Yce0= +github.com/eapache/go-resiliency v1.5.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho= github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 h1:Oy0F4ALJ04o5Qqpdz8XLIpNA3WM/iSIXqxtqo7UGVws= github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3/go.mod h1:YvSRo5mw33fLEx1+DlK6L2VV43tJt5Eyel9n9XBcR+0= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= @@ -35,10 +35,10 @@ github.com/jcmturner/gokrb5/v8 v8.4.4 h1:x1Sv4HaTpepFkXbt2IkL29DXRf8sOfZXo8eRKh6 github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs= github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= @@ -55,8 +55,8 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -64,8 +64,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= diff --git a/examples/bench/compare/segment/go.mod b/examples/bench/compare/segment/go.mod index 6f57b94c..508fb23c 100644 --- a/examples/bench/compare/segment/go.mod +++ b/examples/bench/compare/segment/go.mod @@ -2,14 +2,13 @@ module segment go 1.20 -require github.com/segmentio/kafka-go v0.4.42 +require github.com/segmentio/kafka-go v0.4.47 require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/text v0.14.0 // indirect ) diff --git a/examples/bench/compare/segment/go.sum b/examples/bench/compare/segment/go.sum index e87916cf..8ff7b834 100644 --- a/examples/bench/compare/segment/go.sum +++ b/examples/bench/compare/segment/go.sum @@ -2,15 +2,15 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/segmentio/kafka-go v0.4.42 h1:qffhBZCz4WcWyNuHEclHjIMLs2slp6mZO8px+5W5tfU= -github.com/segmentio/kafka-go v0.4.42/go.mod h1:d0g15xPMqoUookug0OU75DhGZxXwCFxSLeJ4uphwJzg= +github.com/segmentio/kafka-go v0.4.47 h1:IqziR4pA3vrZq7YdRxaT3w1/5fvIH5qpCwstUanQQB0= +github.com/segmentio/kafka-go v0.4.47/go.mod h1:HjF6XbOKh0Pjlkr5GVZxt6CsjjwnmhVOfURM5KMd8qg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -25,34 +25,45 @@ github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gi github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/examples/bench/go.mod b/examples/bench/go.mod index 69ddf961..5997e1f1 100644 --- a/examples/bench/go.mod +++ b/examples/bench/go.mod @@ -3,7 +3,7 @@ module bench go 1.20 require ( - github.com/twmb/franz-go v1.14.3 + github.com/twmb/franz-go v1.15.3 github.com/twmb/franz-go/plugin/kprom v1.1.0 github.com/twmb/tlscfg v1.2.1 ) @@ -11,16 +11,15 @@ require ( require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/klauspost/compress v1.16.7 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/prometheus/client_golang v1.16.0 // indirect - github.com/prometheus/client_model v0.4.0 // indirect - github.com/prometheus/common v0.44.0 // indirect - github.com/prometheus/procfs v0.11.1 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect - golang.org/x/crypto v0.11.0 // indirect - golang.org/x/sys v0.10.0 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/prometheus/client_golang v1.17.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect + golang.org/x/crypto v0.17.0 // indirect + golang.org/x/sys v0.15.0 // indirect google.golang.org/protobuf v1.31.0 // indirect ) diff --git a/examples/bench/go.sum b/examples/bench/go.sum index f843e76b..0d75115f 100644 --- a/examples/bench/go.sum +++ b/examples/bench/go.sum @@ -3,41 +3,36 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= -github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= -github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= -github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= -github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= -github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= -github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= github.com/twmb/franz-go/plugin/kprom v1.1.0 h1:grGeIJbm4llUBF8jkDjTb/b8rKllWSXjMwIqeCCcNYQ= github.com/twmb/franz-go/plugin/kprom v1.1.0/go.mod h1:cTDrPMSkyrO99LyGx3AtiwF9W6+THHjZrkDE2+TEBIU= github.com/twmb/tlscfg v1.2.1 h1:IU2efmP9utQEIV2fufpZjPq7xgcZK4qu25viD51BB44= github.com/twmb/tlscfg v1.2.1/go.mod h1:GameEQddljI+8Es373JfQEBvtI4dCTLKWGJbqT2kErs= -golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= diff --git a/examples/goroutine_per_partition_consuming/autocommit_marks/go.mod b/examples/goroutine_per_partition_consuming/autocommit_marks/go.mod index bdf62ebb..e1efa093 100644 --- a/examples/goroutine_per_partition_consuming/autocommit_marks/go.mod +++ b/examples/goroutine_per_partition_consuming/autocommit_marks/go.mod @@ -2,10 +2,10 @@ module goroutine_per_partition_consuming_autocommit_marks go 1.20 -require github.com/twmb/franz-go v1.14.3 +require github.com/twmb/franz-go v1.15.3 require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect ) diff --git a/examples/goroutine_per_partition_consuming/autocommit_marks/go.sum b/examples/goroutine_per_partition_consuming/autocommit_marks/go.sum index ad59f273..35d50b5c 100644 --- a/examples/goroutine_per_partition_consuming/autocommit_marks/go.sum +++ b/examples/goroutine_per_partition_consuming/autocommit_marks/go.sum @@ -1,8 +1,8 @@ -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= diff --git a/examples/goroutine_per_partition_consuming/autocommit_normal/go.mod b/examples/goroutine_per_partition_consuming/autocommit_normal/go.mod index 118917a9..b2d5ad54 100644 --- a/examples/goroutine_per_partition_consuming/autocommit_normal/go.mod +++ b/examples/goroutine_per_partition_consuming/autocommit_normal/go.mod @@ -2,10 +2,10 @@ module goroutine_per_partition_consuming_autocommit_normal go 1.20 -require github.com/twmb/franz-go v1.14.3 +require github.com/twmb/franz-go v1.15.3 require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect ) diff --git a/examples/goroutine_per_partition_consuming/autocommit_normal/go.sum b/examples/goroutine_per_partition_consuming/autocommit_normal/go.sum index ad59f273..35d50b5c 100644 --- a/examples/goroutine_per_partition_consuming/autocommit_normal/go.sum +++ b/examples/goroutine_per_partition_consuming/autocommit_normal/go.sum @@ -1,8 +1,8 @@ -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= diff --git a/examples/goroutine_per_partition_consuming/manual_commit/go.mod b/examples/goroutine_per_partition_consuming/manual_commit/go.mod index 449fb761..e46583f2 100644 --- a/examples/goroutine_per_partition_consuming/manual_commit/go.mod +++ b/examples/goroutine_per_partition_consuming/manual_commit/go.mod @@ -2,10 +2,10 @@ module goroutine_per_partition_consuming_manual_commit go 1.20 -require github.com/twmb/franz-go v1.14.3 +require github.com/twmb/franz-go v1.15.3 require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect ) diff --git a/examples/goroutine_per_partition_consuming/manual_commit/go.sum b/examples/goroutine_per_partition_consuming/manual_commit/go.sum index ad59f273..35d50b5c 100644 --- a/examples/goroutine_per_partition_consuming/manual_commit/go.sum +++ b/examples/goroutine_per_partition_consuming/manual_commit/go.sum @@ -1,8 +1,8 @@ -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= diff --git a/examples/group_consuming/go.mod b/examples/group_consuming/go.mod index a84f75ce..59c3b2d5 100644 --- a/examples/group_consuming/go.mod +++ b/examples/group_consuming/go.mod @@ -2,10 +2,10 @@ module group_consuming go 1.20 -require github.com/twmb/franz-go v1.14.3 +require github.com/twmb/franz-go v1.15.3 require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect ) diff --git a/examples/group_consuming/go.sum b/examples/group_consuming/go.sum index ad59f273..35d50b5c 100644 --- a/examples/group_consuming/go.sum +++ b/examples/group_consuming/go.sum @@ -1,8 +1,8 @@ -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= diff --git a/examples/hooks_and_logging/expansive_prometheus/go.mod b/examples/hooks_and_logging/expansive_prometheus/go.mod index 8e189e80..560ed56b 100644 --- a/examples/hooks_and_logging/expansive_prometheus/go.mod +++ b/examples/hooks_and_logging/expansive_prometheus/go.mod @@ -3,21 +3,20 @@ module prometheus_hooks go 1.20 require ( - github.com/prometheus/client_golang v1.16.0 - github.com/twmb/franz-go v1.14.3 + github.com/prometheus/client_golang v1.17.0 + github.com/twmb/franz-go v1.15.3 ) require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/klauspost/compress v1.16.7 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/prometheus/client_model v0.4.0 // indirect - github.com/prometheus/common v0.44.0 // indirect - github.com/prometheus/procfs v0.11.1 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect - golang.org/x/sys v0.10.0 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect + golang.org/x/sys v0.15.0 // indirect google.golang.org/protobuf v1.31.0 // indirect ) diff --git a/examples/hooks_and_logging/expansive_prometheus/go.sum b/examples/hooks_and_logging/expansive_prometheus/go.sum index 3e0cd1fe..e8f9f202 100644 --- a/examples/hooks_and_logging/expansive_prometheus/go.sum +++ b/examples/hooks_and_logging/expansive_prometheus/go.sum @@ -3,35 +3,30 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= -github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= -github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= -github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= -github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= -github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= -github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= diff --git a/examples/hooks_and_logging/plugin_go-metrics/go.mod b/examples/hooks_and_logging/plugin_go-metrics/go.mod index 5843b266..8f412029 100644 --- a/examples/hooks_and_logging/plugin_go-metrics/go.mod +++ b/examples/hooks_and_logging/plugin_go-metrics/go.mod @@ -4,12 +4,12 @@ go 1.20 require ( github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 - github.com/twmb/franz-go v1.14.3 + github.com/twmb/franz-go v1.15.3 github.com/twmb/franz-go/plugin/kgmetrics v1.0.0 ) require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect ) diff --git a/examples/hooks_and_logging/plugin_go-metrics/go.sum b/examples/hooks_and_logging/plugin_go-metrics/go.sum index 68de925d..331fdfc8 100644 --- a/examples/hooks_and_logging/plugin_go-metrics/go.sum +++ b/examples/hooks_and_logging/plugin_go-metrics/go.sum @@ -10,11 +10,11 @@ github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxy github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc= github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/pierrec/lz4/v4 v4.1.8/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -22,12 +22,12 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/twmb/franz-go v1.0.0/go.mod h1:cdFLk8d/5/ox88y38xgiDKP3Yo338OO0t5QbTEM2K6I= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= github.com/twmb/franz-go/pkg/kmsg v0.0.0-20210901051457-3c197a133ddd/go.mod h1:SxG/xJKhgPu25SamAq0rrucfp7lbzCpEXOC+vH/ELrY= github.com/twmb/franz-go/pkg/kmsg v0.0.0-20210914042331-106aef61b693/go.mod h1:SxG/xJKhgPu25SamAq0rrucfp7lbzCpEXOC+vH/ELrY= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= github.com/twmb/franz-go/plugin/kgmetrics v1.0.0 h1:7grMPw0J5u9VibFvKYlU4WCwa28nDLjdB4Ld3BzvMDk= github.com/twmb/franz-go/plugin/kgmetrics v1.0.0/go.mod h1:MIsGiK0+sP+jJp8r0fY+O5CSaL+7vRUITcbHb99V7U8= github.com/twmb/go-rbtree v1.0.0/go.mod h1:UlIAI8gu3KRPkXSobZnmJfVwCJgEhD/liWzT5ppzIyc= diff --git a/examples/hooks_and_logging/plugin_kotel/go.mod b/examples/hooks_and_logging/plugin_kotel/go.mod index cd389cca..e47819da 100644 --- a/examples/hooks_and_logging/plugin_kotel/go.mod +++ b/examples/hooks_and_logging/plugin_kotel/go.mod @@ -3,23 +3,23 @@ module kotel_hooks go 1.20 require ( - github.com/google/uuid v1.3.0 - github.com/twmb/franz-go v1.14.3 + github.com/google/uuid v1.5.0 + github.com/twmb/franz-go v1.15.3 github.com/twmb/franz-go/plugin/kotel v1.4.0 - go.opentelemetry.io/otel v1.16.0 - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.39.0 - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.16.0 - go.opentelemetry.io/otel/sdk v1.16.0 - go.opentelemetry.io/otel/sdk/metric v0.39.0 - go.opentelemetry.io/otel/trace v1.16.0 + go.opentelemetry.io/otel v1.21.0 + go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.44.0 + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0 + go.opentelemetry.io/otel/sdk v1.21.0 + go.opentelemetry.io/otel/sdk/metric v1.21.0 + go.opentelemetry.io/otel/trace v1.21.0 ) require ( - github.com/go-logr/logr v1.2.4 // indirect + github.com/go-logr/logr v1.3.0 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect - go.opentelemetry.io/otel/metric v1.16.0 // indirect - golang.org/x/sys v0.10.0 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect + go.opentelemetry.io/otel/metric v1.21.0 // indirect + golang.org/x/sys v0.15.0 // indirect ) diff --git a/examples/hooks_and_logging/plugin_kotel/go.sum b/examples/hooks_and_logging/plugin_kotel/go.sum index 21ff907c..0f2591e3 100644 --- a/examples/hooks_and_logging/plugin_kotel/go.sum +++ b/examples/hooks_and_logging/plugin_kotel/go.sum @@ -1,38 +1,38 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= +github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= github.com/twmb/franz-go/plugin/kotel v1.4.0 h1:x/+P5e2OpGj6HtFRDkLjdvbD/6PFLKCBh+AqqWLVnd4= github.com/twmb/franz-go/plugin/kotel v1.4.0/go.mod h1:InwNkeoCy8ZTHLR3qQrunBsddwOkCLirTgQaeFfgklY= -go.opentelemetry.io/otel v1.16.0 h1:Z7GVAX/UkAXPKsy94IU+i6thsQS4nb7LviLpnaNeW8s= -go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeHrT/bx4= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.39.0 h1:fl2WmyenEf6LYYlfHAtCUEDyGcpwJNqD4dHGO7PVm4w= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.39.0/go.mod h1:csyQxQ0UHHKVA8KApS7eUO/klMO5sd/av5CNZNU4O6w= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.16.0 h1:+XWJd3jf75RXJq29mxbuXhCXFDG3S3R4vBUeSI2P7tE= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.16.0/go.mod h1:hqgzBPTf4yONMFgdZvL/bK42R/iinTyVQtiWihs3SZc= -go.opentelemetry.io/otel/metric v1.16.0 h1:RbrpwVG1Hfv85LgnZ7+txXioPDoh6EdbZHo26Q3hqOo= -go.opentelemetry.io/otel/metric v1.16.0/go.mod h1:QE47cpOmkwipPiefDwo2wDzwJrlfxxNYodqc4xnGCo4= -go.opentelemetry.io/otel/sdk v1.16.0 h1:Z1Ok1YsijYL0CSJpHt4cS3wDDh7p572grzNrBMiMWgE= -go.opentelemetry.io/otel/sdk v1.16.0/go.mod h1:tMsIuKXuuIWPBAOrH+eHtvhTL+SntFtXF9QD68aP6p4= -go.opentelemetry.io/otel/sdk/metric v0.39.0 h1:Kun8i1eYf48kHH83RucG93ffz0zGV1sh46FAScOTuDI= -go.opentelemetry.io/otel/sdk/metric v0.39.0/go.mod h1:piDIRgjcK7u0HCL5pCA4e74qpK/jk3NiUoAHATVAmiI= -go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs= -go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= +go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.44.0 h1:dEZWPjVN22urgYCza3PXRUGEyCB++y1sAqm6guWFesk= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.44.0/go.mod h1:sTt30Evb7hJB/gEk27qLb1+l9n4Tb8HvHkR0Wx3S6CU= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0 h1:VhlEQAPp9R1ktYfrPk5SOryw1e9LDDTZCbIPFrho0ec= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0/go.mod h1:kB3ufRbfU+CQ4MlUcqtW8Z7YEOBeK2DJ6CmR5rYYF3E= +go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= +go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= +go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/sdk/metric v1.21.0 h1:smhI5oD714d6jHE6Tie36fPx4WDFIg+Y6RfAY4ICcR0= +go.opentelemetry.io/otel/sdk/metric v1.21.0/go.mod h1:FJ8RAsoPGv/wYMgBdUJXOm+6pzFY3YdljnXtv1SBE8Q= +go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= +go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/examples/hooks_and_logging/plugin_prometheus/go.mod b/examples/hooks_and_logging/plugin_prometheus/go.mod index 436f2366..01fe11ee 100644 --- a/examples/hooks_and_logging/plugin_prometheus/go.mod +++ b/examples/hooks_and_logging/plugin_prometheus/go.mod @@ -3,22 +3,21 @@ module dropin_prometheus go 1.20 require ( - github.com/twmb/franz-go v1.14.3 + github.com/twmb/franz-go v1.15.3 github.com/twmb/franz-go/plugin/kprom v1.1.0 ) require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/klauspost/compress v1.16.7 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/prometheus/client_golang v1.16.0 // indirect - github.com/prometheus/client_model v0.4.0 // indirect - github.com/prometheus/common v0.44.0 // indirect - github.com/prometheus/procfs v0.11.1 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect - golang.org/x/sys v0.10.0 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/prometheus/client_golang v1.17.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect + golang.org/x/sys v0.15.0 // indirect google.golang.org/protobuf v1.31.0 // indirect ) diff --git a/examples/hooks_and_logging/plugin_prometheus/go.sum b/examples/hooks_and_logging/plugin_prometheus/go.sum index 432bfd9d..014cd284 100644 --- a/examples/hooks_and_logging/plugin_prometheus/go.sum +++ b/examples/hooks_and_logging/plugin_prometheus/go.sum @@ -3,37 +3,32 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= -github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= -github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= -github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= -github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= -github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= -github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= github.com/twmb/franz-go/plugin/kprom v1.1.0 h1:grGeIJbm4llUBF8jkDjTb/b8rKllWSXjMwIqeCCcNYQ= github.com/twmb/franz-go/plugin/kprom v1.1.0/go.mod h1:cTDrPMSkyrO99LyGx3AtiwF9W6+THHjZrkDE2+TEBIU= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= diff --git a/examples/hooks_and_logging/plugin_zap/go.mod b/examples/hooks_and_logging/plugin_zap/go.mod index a2e9621e..d80c9a84 100644 --- a/examples/hooks_and_logging/plugin_zap/go.mod +++ b/examples/hooks_and_logging/plugin_zap/go.mod @@ -3,14 +3,14 @@ module dropin_zap go 1.20 require ( - github.com/twmb/franz-go v1.14.3 + github.com/twmb/franz-go v1.15.3 github.com/twmb/franz-go/plugin/kzap v1.1.2 - go.uber.org/zap v1.25.0 + go.uber.org/zap v1.26.0 ) require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect go.uber.org/multierr v1.11.0 // indirect ) diff --git a/examples/hooks_and_logging/plugin_zap/go.sum b/examples/hooks_and_logging/plugin_zap/go.sum index 0a787776..8986dfba 100644 --- a/examples/hooks_and_logging/plugin_zap/go.sum +++ b/examples/hooks_and_logging/plugin_zap/go.sum @@ -1,20 +1,19 @@ -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= github.com/twmb/franz-go/plugin/kzap v1.1.2 h1:0arX5xJ0soUPX1LlDay6ZZoxuWkWk1lggQ5M/IgRXAE= github.com/twmb/franz-go/plugin/kzap v1.1.2/go.mod h1:53Cl9Uz1pbdOPDvUISIxLrZIWSa2jCuY1bTMauRMBmo= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= -go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/examples/manual_committing/go.mod b/examples/manual_committing/go.mod index 39adb198..f076bd79 100644 --- a/examples/manual_committing/go.mod +++ b/examples/manual_committing/go.mod @@ -3,13 +3,13 @@ module manual_committing go 1.20 require ( - github.com/twmb/franz-go v1.14.3 - github.com/twmb/franz-go/pkg/kadm v1.9.0 + github.com/twmb/franz-go v1.15.3 + github.com/twmb/franz-go/pkg/kadm v1.10.0 ) require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect - golang.org/x/crypto v0.11.0 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect + golang.org/x/crypto v0.17.0 // indirect ) diff --git a/examples/manual_committing/go.sum b/examples/manual_committing/go.sum index 9f6e3201..df0861c6 100644 --- a/examples/manual_committing/go.sum +++ b/examples/manual_committing/go.sum @@ -1,12 +1,12 @@ -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kadm v1.9.0 h1:UgwBu0YCd6P8HLdg6ZRA4v9W6/zoI1042fOd2CvvLBE= -github.com/twmb/franz-go/pkg/kadm v1.9.0/go.mod h1:eG3f+GHUndq1CUSVvjp+WdNq5zePeJi3tEHzyTkao6g= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= -golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kadm v1.10.0 h1:3oYKNP+e3HGo4GYadrDeRxOaAIsOXmX6LBVMz9PxpCU= +github.com/twmb/franz-go/pkg/kadm v1.10.0/go.mod h1:hUMoV4SRho+2ij/S9cL39JaLsr+XINjn0ZkCdBY2DXc= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= diff --git a/examples/sasl/aws_msk_iam/go.mod b/examples/sasl/aws_msk_iam/go.mod index 70a4d500..1da7dd26 100644 --- a/examples/sasl/aws_msk_iam/go.mod +++ b/examples/sasl/aws_msk_iam/go.mod @@ -3,13 +3,13 @@ module aws_msk_iam go 1.20 require ( - github.com/aws/aws-sdk-go v1.44.316 - github.com/twmb/franz-go v1.14.3 - github.com/twmb/franz-go/pkg/kmsg v1.6.1 + github.com/aws/aws-sdk-go v1.49.5 + github.com/twmb/franz-go v1.15.3 + github.com/twmb/franz-go/pkg/kmsg v1.7.0 ) require ( github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect ) diff --git a/examples/sasl/aws_msk_iam/go.sum b/examples/sasl/aws_msk_iam/go.sum index 1e65628c..7bb39529 100644 --- a/examples/sasl/aws_msk_iam/go.sum +++ b/examples/sasl/aws_msk_iam/go.sum @@ -1,50 +1,22 @@ -github.com/aws/aws-sdk-go v1.44.316 h1:UC3alCEyzj2XU13ZFGIOHW3yjCNLGTIGVauyetl9fwE= -github.com/aws/aws-sdk-go v1.44.316/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.49.5 h1:y2yfBlwjPDi3/sBVKeznYEdDy6wIhjA2L5NCBMLUIYA= +github.com/aws/aws-sdk-go v1.49.5/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/examples/sasl/plaintext/go.mod b/examples/sasl/plaintext/go.mod index fe8398a0..cc58c6a3 100644 --- a/examples/sasl/plaintext/go.mod +++ b/examples/sasl/plaintext/go.mod @@ -2,10 +2,10 @@ module plaintext go 1.20 -require github.com/twmb/franz-go v1.14.3 +require github.com/twmb/franz-go v1.15.3 require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect ) diff --git a/examples/sasl/plaintext/go.sum b/examples/sasl/plaintext/go.sum index ad59f273..35d50b5c 100644 --- a/examples/sasl/plaintext/go.sum +++ b/examples/sasl/plaintext/go.sum @@ -1,8 +1,8 @@ -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= diff --git a/examples/sasl/sasl_ssl_plain/go.mod b/examples/sasl/sasl_ssl_plain/go.mod index 377c4086..8c0b14f3 100644 --- a/examples/sasl/sasl_ssl_plain/go.mod +++ b/examples/sasl/sasl_ssl_plain/go.mod @@ -2,10 +2,10 @@ module sasl_ssl_plain go 1.20 -require github.com/twmb/franz-go v1.14.3 +require github.com/twmb/franz-go v1.15.3 require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect ) diff --git a/examples/sasl/sasl_ssl_plain/go.sum b/examples/sasl/sasl_ssl_plain/go.sum index ad59f273..35d50b5c 100644 --- a/examples/sasl/sasl_ssl_plain/go.sum +++ b/examples/sasl/sasl_ssl_plain/go.sum @@ -1,8 +1,8 @@ -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= diff --git a/examples/schema_registry/go.mod b/examples/schema_registry/go.mod index a97c7866..92d270be 100644 --- a/examples/schema_registry/go.mod +++ b/examples/schema_registry/go.mod @@ -3,18 +3,18 @@ module schema_registry go 1.20 require ( - github.com/hamba/avro/v2 v2.13.0 - github.com/twmb/franz-go v1.14.3 - github.com/twmb/franz-go/pkg/sr v0.0.0-20230803134058-4af255fa846b + github.com/hamba/avro/v2 v2.18.0 + github.com/twmb/franz-go v1.15.3 + github.com/twmb/franz-go/pkg/sr v0.0.0-20231219191020-e530330cbd8b ) require ( github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.16.7 // indirect + github.com/klauspost/compress v1.17.4 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect github.com/stretchr/testify v1.7.2 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect ) diff --git a/examples/schema_registry/go.sum b/examples/schema_registry/go.sum index 43dc0dd2..357bfb78 100644 --- a/examples/schema_registry/go.sum +++ b/examples/schema_registry/go.sum @@ -2,12 +2,12 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/hamba/avro/v2 v2.13.0 h1:QY2uX2yvJTW0OoMKelGShvq4v1hqab6CxJrPwh0fnj0= -github.com/hamba/avro/v2 v2.13.0/go.mod h1:Q9YK+qxAhtVrNqOhwlZTATLgLA8qxG2vtvkhK8fJ7Jo= +github.com/hamba/avro/v2 v2.18.0 h1:U7T0xI8MGw9+m3SS48E2KHUxas/Hb0EvS0CpkmVcLoI= +github.com/hamba/avro/v2 v2.18.0/go.mod h1:dEG+AHrykTpkXvBYsc+XXTuRlvGC645Ix5d2qR8EdEs= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -15,20 +15,20 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= -github.com/twmb/franz-go/pkg/sr v0.0.0-20230803134058-4af255fa846b h1:VDFQ7lQBLS94Mxwg/N22EJ+doI9FUizNe9yVEmYfkJg= -github.com/twmb/franz-go/pkg/sr v0.0.0-20230803134058-4af255fa846b/go.mod h1:egX+kicq83hpztv3PRCXKLNO132Ol9JTAJOCRZcqUxI= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/twmb/franz-go/pkg/sr v0.0.0-20231219191020-e530330cbd8b h1:zsn9FBuKGUM2X67gUhGGpcV9WaRfrKWEILso+u4eAeU= +github.com/twmb/franz-go/pkg/sr v0.0.0-20231219191020-e530330cbd8b/go.mod h1:egX+kicq83hpztv3PRCXKLNO132Ol9JTAJOCRZcqUxI= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/examples/transactions/eos/go.mod b/examples/transactions/eos/go.mod index 4e2e4186..6d2b72e8 100644 --- a/examples/transactions/eos/go.mod +++ b/examples/transactions/eos/go.mod @@ -2,10 +2,10 @@ module eos go 1.20 -require github.com/twmb/franz-go v1.14.3 +require github.com/twmb/franz-go v1.15.3 require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect ) diff --git a/examples/transactions/eos/go.sum b/examples/transactions/eos/go.sum index ad59f273..35d50b5c 100644 --- a/examples/transactions/eos/go.sum +++ b/examples/transactions/eos/go.sum @@ -1,8 +1,8 @@ -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= diff --git a/examples/transactions/produce_and_consume/go.mod b/examples/transactions/produce_and_consume/go.mod index 8cae5b03..488fdbfa 100644 --- a/examples/transactions/produce_and_consume/go.mod +++ b/examples/transactions/produce_and_consume/go.mod @@ -2,10 +2,10 @@ module produce_and_consume go 1.20 -require github.com/twmb/franz-go v1.14.3 +require github.com/twmb/franz-go v1.15.3 require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect ) diff --git a/examples/transactions/produce_and_consume/go.sum b/examples/transactions/produce_and_consume/go.sum index ad59f273..35d50b5c 100644 --- a/examples/transactions/produce_and_consume/go.sum +++ b/examples/transactions/produce_and_consume/go.sum @@ -1,8 +1,8 @@ -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= diff --git a/go.mod b/go.mod index 399672da..c18e44b5 100644 --- a/go.mod +++ b/go.mod @@ -4,9 +4,9 @@ go 1.18 require ( github.com/klauspost/compress v1.16.7 - github.com/pierrec/lz4/v4 v4.1.18 + github.com/pierrec/lz4/v4 v4.1.19 github.com/twmb/franz-go/pkg/kmsg v1.7.0 - golang.org/x/crypto v0.11.0 + golang.org/x/crypto v0.17.0 ) retract v1.11.4 // This version is actually a breaking change and requires a major version change. diff --git a/go.sum b/go.sum index b9431395..d70d81d3 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,8 @@ github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= -golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= diff --git a/pkg/kadm/go.mod b/pkg/kadm/go.mod index 7e72edcb..860afa7b 100644 --- a/pkg/kadm/go.mod +++ b/pkg/kadm/go.mod @@ -3,12 +3,12 @@ module github.com/twmb/franz-go/pkg/kadm go 1.19 require ( - github.com/twmb/franz-go v1.15.0 - github.com/twmb/franz-go/pkg/kmsg v1.6.1 - golang.org/x/crypto v0.13.0 + github.com/twmb/franz-go v1.15.3 + github.com/twmb/franz-go/pkg/kmsg v1.7.0 + golang.org/x/crypto v0.17.0 ) require ( - github.com/klauspost/compress v1.17.0 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect ) diff --git a/pkg/kadm/go.sum b/pkg/kadm/go.sum index 48e93676..3fc29924 100644 --- a/pkg/kadm/go.sum +++ b/pkg/kadm/go.sum @@ -1,10 +1,10 @@ -github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= -github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/twmb/franz-go v1.15.0 h1:bw5n1COKJzWpkCXG/kMtHrurcS9HSWV6e3If5CUdc+M= -github.com/twmb/franz-go v1.15.0/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= -golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= diff --git a/pkg/kfake/01_fetch.go b/pkg/kfake/01_fetch.go index 08053d1e..f0fc4f07 100644 --- a/pkg/kfake/01_fetch.go +++ b/pkg/kfake/01_fetch.go @@ -18,7 +18,7 @@ import ( func init() { regKey(1, 4, 13) } -func (c *Cluster) handleFetch(creq clientReq, w *watchFetch) (kmsg.Response, error) { +func (c *Cluster) handleFetch(creq *clientReq, w *watchFetch) (kmsg.Response, error) { var ( req = creq.kreq.(*kmsg.FetchRequest) resp = req.ResponseKind().(*kmsg.FetchResponse) @@ -182,7 +182,7 @@ type watchFetch struct { need int needp tps[int] deadline time.Time - creq clientReq + creq *clientReq in []*partData cb func() diff --git a/pkg/kfake/08_offset_commit.go b/pkg/kfake/08_offset_commit.go index 69e9dab7..692f4cc0 100644 --- a/pkg/kfake/08_offset_commit.go +++ b/pkg/kfake/08_offset_commit.go @@ -7,7 +7,7 @@ import ( func init() { regKey(8, 0, 8) } -func (c *Cluster) handleOffsetCommit(creq clientReq) (kmsg.Response, error) { +func (c *Cluster) handleOffsetCommit(creq *clientReq) (kmsg.Response, error) { req := creq.kreq.(*kmsg.OffsetCommitRequest) resp := req.ResponseKind().(*kmsg.OffsetCommitResponse) diff --git a/pkg/kfake/09_offset_fetch.go b/pkg/kfake/09_offset_fetch.go index 24047d4f..204339ec 100644 --- a/pkg/kfake/09_offset_fetch.go +++ b/pkg/kfake/09_offset_fetch.go @@ -6,7 +6,7 @@ import ( func init() { regKey(9, 0, 8) } -func (c *Cluster) handleOffsetFetch(creq clientReq) (kmsg.Response, error) { +func (c *Cluster) handleOffsetFetch(creq *clientReq) (kmsg.Response, error) { req := creq.kreq.(*kmsg.OffsetFetchRequest) if err := checkReqVersion(req.Key(), req.Version); err != nil { diff --git a/pkg/kfake/11_join_group.go b/pkg/kfake/11_join_group.go index ef537785..70ed1d89 100644 --- a/pkg/kfake/11_join_group.go +++ b/pkg/kfake/11_join_group.go @@ -6,7 +6,7 @@ import ( func init() { regKey(11, 0, 9) } -func (c *Cluster) handleJoinGroup(creq clientReq) (kmsg.Response, error) { +func (c *Cluster) handleJoinGroup(creq *clientReq) (kmsg.Response, error) { req := creq.kreq.(*kmsg.JoinGroupRequest) if err := checkReqVersion(req.Key(), req.Version); err != nil { diff --git a/pkg/kfake/12_heartbeat.go b/pkg/kfake/12_heartbeat.go index b8e1a188..59f12712 100644 --- a/pkg/kfake/12_heartbeat.go +++ b/pkg/kfake/12_heartbeat.go @@ -7,7 +7,7 @@ import ( func init() { regKey(12, 0, 4) } -func (c *Cluster) handleHeartbeat(creq clientReq) (kmsg.Response, error) { +func (c *Cluster) handleHeartbeat(creq *clientReq) (kmsg.Response, error) { req := creq.kreq.(*kmsg.HeartbeatRequest) resp := req.ResponseKind().(*kmsg.HeartbeatResponse) diff --git a/pkg/kfake/13_leave_group.go b/pkg/kfake/13_leave_group.go index 9f17ec6c..e941f19e 100644 --- a/pkg/kfake/13_leave_group.go +++ b/pkg/kfake/13_leave_group.go @@ -7,7 +7,7 @@ import ( func init() { regKey(13, 0, 5) } -func (c *Cluster) handleLeaveGroup(creq clientReq) (kmsg.Response, error) { +func (c *Cluster) handleLeaveGroup(creq *clientReq) (kmsg.Response, error) { req := creq.kreq.(*kmsg.LeaveGroupRequest) resp := req.ResponseKind().(*kmsg.LeaveGroupResponse) diff --git a/pkg/kfake/14_sync_group.go b/pkg/kfake/14_sync_group.go index 07ea0538..9944b112 100644 --- a/pkg/kfake/14_sync_group.go +++ b/pkg/kfake/14_sync_group.go @@ -7,7 +7,7 @@ import ( func init() { regKey(14, 0, 5) } -func (c *Cluster) handleSyncGroup(creq clientReq) (kmsg.Response, error) { +func (c *Cluster) handleSyncGroup(creq *clientReq) (kmsg.Response, error) { req := creq.kreq.(*kmsg.SyncGroupRequest) resp := req.ResponseKind().(*kmsg.SyncGroupResponse) diff --git a/pkg/kfake/15_describe_groups.go b/pkg/kfake/15_describe_groups.go index 1152bcf8..8791759b 100644 --- a/pkg/kfake/15_describe_groups.go +++ b/pkg/kfake/15_describe_groups.go @@ -6,7 +6,7 @@ import ( func init() { regKey(15, 0, 5) } -func (c *Cluster) handleDescribeGroups(creq clientReq) (kmsg.Response, error) { +func (c *Cluster) handleDescribeGroups(creq *clientReq) (kmsg.Response, error) { req := creq.kreq.(*kmsg.DescribeGroupsRequest) if err := checkReqVersion(req.Key(), req.Version); err != nil { diff --git a/pkg/kfake/16_list_groups.go b/pkg/kfake/16_list_groups.go index e254284b..6d0189c4 100644 --- a/pkg/kfake/16_list_groups.go +++ b/pkg/kfake/16_list_groups.go @@ -6,7 +6,7 @@ import ( func init() { regKey(16, 0, 4) } -func (c *Cluster) handleListGroups(creq clientReq) (kmsg.Response, error) { +func (c *Cluster) handleListGroups(creq *clientReq) (kmsg.Response, error) { req := creq.kreq.(*kmsg.ListGroupsRequest) if err := checkReqVersion(req.Key(), req.Version); err != nil { diff --git a/pkg/kfake/17_sasl_handshake.go b/pkg/kfake/17_sasl_handshake.go index 34028bc8..8a80cbf1 100644 --- a/pkg/kfake/17_sasl_handshake.go +++ b/pkg/kfake/17_sasl_handshake.go @@ -7,7 +7,7 @@ import ( func init() { regKey(17, 1, 1) } -func (c *Cluster) handleSASLHandshake(creq clientReq) (kmsg.Response, error) { +func (c *Cluster) handleSASLHandshake(creq *clientReq) (kmsg.Response, error) { req := creq.kreq.(*kmsg.SASLHandshakeRequest) resp := req.ResponseKind().(*kmsg.SASLHandshakeResponse) diff --git a/pkg/kfake/36_sasl_authenticate.go b/pkg/kfake/36_sasl_authenticate.go index ec0e2a97..b94d2f01 100644 --- a/pkg/kfake/36_sasl_authenticate.go +++ b/pkg/kfake/36_sasl_authenticate.go @@ -9,7 +9,7 @@ import ( func init() { regKey(36, 0, 2) } -func (c *Cluster) handleSASLAuthenticate(creq clientReq) (kmsg.Response, error) { +func (c *Cluster) handleSASLAuthenticate(creq *clientReq) (kmsg.Response, error) { req := creq.kreq.(*kmsg.SASLAuthenticateRequest) resp := req.ResponseKind().(*kmsg.SASLAuthenticateResponse) diff --git a/pkg/kfake/42_delete_groups.go b/pkg/kfake/42_delete_groups.go index e820b94f..68257415 100644 --- a/pkg/kfake/42_delete_groups.go +++ b/pkg/kfake/42_delete_groups.go @@ -6,7 +6,7 @@ import ( func init() { regKey(42, 0, 2) } -func (c *Cluster) handleDeleteGroups(creq clientReq) (kmsg.Response, error) { +func (c *Cluster) handleDeleteGroups(creq *clientReq) (kmsg.Response, error) { req := creq.kreq.(*kmsg.DeleteGroupsRequest) if err := checkReqVersion(req.Key(), req.Version); err != nil { diff --git a/pkg/kfake/47_offset_delete.go b/pkg/kfake/47_offset_delete.go index 900b8bee..878e83b4 100644 --- a/pkg/kfake/47_offset_delete.go +++ b/pkg/kfake/47_offset_delete.go @@ -7,7 +7,7 @@ import ( func init() { regKey(47, 0, 0) } -func (c *Cluster) handleOffsetDelete(creq clientReq) (kmsg.Response, error) { +func (c *Cluster) handleOffsetDelete(creq *clientReq) (kmsg.Response, error) { req := creq.kreq.(*kmsg.OffsetDeleteRequest) resp := req.ResponseKind().(*kmsg.OffsetDeleteResponse) diff --git a/pkg/kfake/client_conn.go b/pkg/kfake/client_conn.go index 2d6b89f1..a78b574f 100644 --- a/pkg/kfake/client_conn.go +++ b/pkg/kfake/client_conn.go @@ -25,8 +25,8 @@ type ( cc *clientConn kreq kmsg.Request at time.Time - corr int32 cid string + corr int32 seq uint32 } @@ -38,7 +38,7 @@ type ( } ) -func (creq clientReq) empty() bool { return creq.cc == nil || creq.kreq == nil } +func (creq *clientReq) empty() bool { return creq == nil || creq.cc == nil || creq.kreq == nil } func (cc *clientConn) read() { defer cc.conn.Close() @@ -101,7 +101,7 @@ func (cc *clientConn) read() { } select { - case cc.c.reqCh <- clientReq{cc, kreq, time.Now(), corr, cid, seq}: + case cc.c.reqCh <- &clientReq{cc, kreq, time.Now(), cid, corr, seq}: seq++ case <-cc.c.die: return @@ -141,6 +141,9 @@ func (cc *clientConn) write() { case <-cc.c.die: return } + } else { + delete(oooresp, seq) + seq++ } if err := resp.err; err != nil { cc.c.cfg.logger.Logf(LogLevelInfo, "client %s request unable to be handled: %v", who, err) diff --git a/pkg/kfake/cluster.go b/pkg/kfake/cluster.go index 0fc46a8d..fb622f41 100644 --- a/pkg/kfake/cluster.go +++ b/pkg/kfake/cluster.go @@ -29,14 +29,19 @@ type ( controller *broker bs []*broker + coordinatorGen atomic.Uint64 + adminCh chan func() - reqCh chan clientReq + reqCh chan *clientReq + wakeCh chan *slept watchFetchCh chan *watchFetch - controlMu sync.Mutex - control map[int16][]controlFn - keepCurrentControl atomic.Bool - currentBroker atomic.Pointer[broker] + controlMu sync.Mutex + control map[int16]map[*controlCtx]struct{} + currentBroker *broker + currentControl *controlCtx + sleeping map[*clientConn]*bsleep + controlSleep chan sleepChs data data pids pids @@ -56,6 +61,20 @@ type ( } controlFn func(kmsg.Request) (kmsg.Response, error, bool) + + controlCtx struct { + key int16 + fn controlFn + keep bool + drop bool + lastReq map[*clientConn]*clientReq // used to not re-run requests that slept, see doc comments below + } + + controlResp struct { + kresp kmsg.Response + err error + handled bool + } ) // MustCluster is like NewCluster, but panics on error. @@ -91,9 +110,13 @@ func NewCluster(opts ...Opt) (*Cluster, error) { cfg: cfg, adminCh: make(chan func()), - reqCh: make(chan clientReq, 20), + reqCh: make(chan *clientReq, 20), + wakeCh: make(chan *slept, 10), watchFetchCh: make(chan *watchFetch, 20), - control: make(map[int16][]controlFn), + control: make(map[int16]map[*controlCtx]struct{}), + controlSleep: make(chan sleepChs, 1), + + sleeping: make(map[*clientConn]*bsleep), data: data{ id2t: make(map[uuid]string), @@ -234,28 +257,89 @@ func (b *broker) listen() { } func (c *Cluster) run() { +outer: for { - var creq clientReq - var w *watchFetch + var ( + creq *clientReq + w *watchFetch + s *slept + kreq kmsg.Request + kresp kmsg.Response + err error + handled bool + ) select { + case <-c.die: + return + + case admin := <-c.adminCh: + admin() + continue + case creq = <-c.reqCh: + if c.cfg.sleepOutOfOrder { + break + } + // If we have any sleeping request on this node, + // we enqueue the new live request to the end and + // wait for the sleeping request to finish. + bs := c.sleeping[creq.cc] + if bs.enqueue(&slept{ + creq: creq, + waiting: true, + }) { + continue + } + + case s = <-c.wakeCh: + // On wakeup, we know we are handling a control + // function that was slept, or a request that was + // waiting for a control function to finish sleeping. + creq = s.creq + if s.waiting { + break + } + + // We continue a previously sleeping request, and + // handle results similar to tryControl. + // + // Control flow is weird here, but is described more + // fully in the finish/resleep/etc methods. + c.continueSleptControl(s) + inner: + for { + select { + case <-c.die: + return + case admin := <-c.adminCh: + admin() + continue inner + case res := <-s.res: + c.finishSleptControl(s) + cctx := s.cctx + s = nil + kresp, err, handled = res.kresp, res.err, res.handled + c.maybePopControl(handled, cctx) + if handled { + goto afterControl + } + break inner + case sleepChs := <-c.controlSleep: + c.resleepSleptControl(s, sleepChs) + continue outer + } + } + case w = <-c.watchFetchCh: if w.cleaned { continue // already cleaned up, this is an extraneous timer fire } w.cleanup(c) creq = w.creq - case <-c.die: - return - case fn := <-c.adminCh: - // Run a custom request in the context of the cluster - fn() - continue } - kreq := creq.kreq - kresp, err, handled := c.tryControl(kreq, creq.cc.b) + kresp, err, handled = c.tryControl(creq) if handled { goto afterControl } @@ -267,6 +351,7 @@ func (c *Cluster) run() { } } + kreq = creq.kreq switch k := kmsg.Key(kreq.Key()); k { case kmsg.Produce: kresp, err = c.handleProduce(creq.cc.b, kreq) @@ -331,11 +416,18 @@ func (c *Cluster) run() { case kmsg.AlterUserSCRAMCredentials: kresp, err = c.handleAlterUserSCRAMCredentials(creq.cc.b, kreq) default: - err = fmt.Errorf("unahndled key %v", k) + err = fmt.Errorf("unhandled key %v", k) } afterControl: - if kresp == nil && err == nil { // produce request with no acks, or hijacked group request + // If s is non-nil, this is either a previously slept control + // that finished but was not handled, or a previously slept + // waiting request. In either case, we need to signal to the + // sleep dequeue loop to continue. + if s != nil { + s.continueDequeue <- struct{}{} + } + if kresp == nil && err == nil { // produce request with no acks, or otherwise hijacked request (group, sleep) continue } @@ -358,14 +450,17 @@ func (c *Cluster) run() { // Controlling a request drops the control function from the cluster, meaning // that a control function can only control *one* request. To keep the control // function handling more requests, you can call KeepControl within your -// control function. +// control function. Alternatively, if you want to just run some logic in your +// control function but then have the cluster handle the request as normal, +// you can call DropControl to drop a control function that was not handled. // -// It is safe to add new control functions within a control function. Control -// functions are not called concurrently. +// It is safe to add new control functions within a control function. +// +// Control functions are run serially unless you use SleepControl, multiple +// control functions are "in progress", and you run Cluster.Close. Closing a +// Cluster awakens all sleeping control functions. func (c *Cluster) Control(fn func(kmsg.Request) (kmsg.Response, error, bool)) { - c.controlMu.Lock() - defer c.controlMu.Unlock() - c.control[-1] = append(c.control[-1], fn) + c.ControlKey(-1, fn) } // Control is a function to call on a specific request key that the cluster @@ -380,71 +475,457 @@ func (c *Cluster) Control(fn func(kmsg.Request) (kmsg.Response, error, bool)) { // Controlling a request drops the control function from the cluster, meaning // that a control function can only control *one* request. To keep the control // function handling more requests, you can call KeepControl within your -// control function. +// control function. Alternatively, if you want to just run some logic in your +// control function but then have the cluster handle the request as normal, +// you can call DropControl to drop a control function that was not handled. // // It is safe to add new control functions within a control function. +// +// Control functions are run serially unless you use SleepControl, multiple +// control functions are "in progress", and you run Cluster.Close. Closing a +// Cluster awakens all sleeping control functions. func (c *Cluster) ControlKey(key int16, fn func(kmsg.Request) (kmsg.Response, error, bool)) { c.controlMu.Lock() defer c.controlMu.Unlock() - c.control[key] = append(c.control[key], fn) + m := c.control[key] + if m == nil { + m = make(map[*controlCtx]struct{}) + c.control[key] = m + } + m[&controlCtx{ + key: key, + fn: fn, + lastReq: make(map[*clientConn]*clientReq), + }] = struct{}{} } // KeepControl marks the currently running control function to be kept even if // you handle the request and return true. This can be used to continuously // control requests without needing to re-add control functions manually. func (c *Cluster) KeepControl() { - c.keepCurrentControl.Swap(true) + c.controlMu.Lock() + defer c.controlMu.Unlock() + if c.currentControl != nil { + c.currentControl.keep = true + } +} + +// DropControl allows you to drop the current control function. This takes +// precedence over KeepControl. The use of this function is you can run custom +// control logic *once*, drop the control function, and return that the +// function was not handled -- thus allowing other control functions to run, or +// allowing the kfake cluster to process the request as normal. +func (c *Cluster) DropControl() { + c.controlMu.Lock() + defer c.controlMu.Unlock() + if c.currentControl != nil { + c.currentControl.drop = true + } +} + +// SleepControl sleeps the current control function until wakeup returns. This +// yields to run any other connection. +// +// Note that per protocol, requests on the same connection must be replied to +// in order. Many clients write multiple requests to the same connection, so +// if you sleep until a different request runs, you may sleep forever -- you +// must know the semantics of your client to know whether requests run on +// different connections (or, ensure you are writing to different brokers). +// +// For example, franz-go uses a dedicated connection for: +// - produce requests +// - fetch requests +// - join&sync requests +// - requests with a Timeout field +// - all other request +// +// So, for franz-go, there are up to five separate connections depending +// on what you are doing. +// +// You can run SleepControl multiple times in the same control function. If you +// sleep a request you are controlling, and another request of the same key +// comes in, it will run the same control function and may also sleep (i.e., +// you must have logic if you want to avoid sleeping on the same request). +func (c *Cluster) SleepControl(wakeup func()) { + c.controlMu.Lock() + if c.currentControl == nil { + c.controlMu.Unlock() + return + } + c.controlMu.Unlock() + + sleepChs := sleepChs{ + clientWait: make(chan struct{}, 1), + clientCont: make(chan struct{}, 1), + } + go func() { + wakeup() + sleepChs.clientWait <- struct{}{} + }() + + c.controlSleep <- sleepChs + select { + case <-sleepChs.clientCont: + case <-c.die: + } } // CurrentNode is solely valid from within a control function; it returns // the broker id that the request was received by. // If there's no request currently inflight, this returns -1. func (c *Cluster) CurrentNode() int32 { - if b := c.currentBroker.Load(); b != nil { + c.controlMu.Lock() + defer c.controlMu.Unlock() + if b := c.currentBroker; b != nil { return b.node } return -1 } -func (c *Cluster) tryControl(kreq kmsg.Request, b *broker) (kresp kmsg.Response, err error, handled bool) { - c.currentBroker.Store(b) - defer c.currentBroker.Store(nil) +func (c *Cluster) tryControl(creq *clientReq) (kresp kmsg.Response, err error, handled bool) { c.controlMu.Lock() defer c.controlMu.Unlock() if len(c.control) == 0 { return nil, nil, false } - kresp, err, handled = c.tryControlKey(kreq.Key(), kreq, b) + kresp, err, handled = c.tryControlKey(creq.kreq.Key(), creq) if !handled { - kresp, err, handled = c.tryControlKey(-1, kreq, b) + kresp, err, handled = c.tryControlKey(-1, creq) } return kresp, err, handled } -func (c *Cluster) tryControlKey(key int16, kreq kmsg.Request, b *broker) (kresp kmsg.Response, err error, handled bool) { - for i, fn := range c.control[key] { - kresp, err, handled = c.callControl(key, kreq, fn) - if handled { - // fn may have called Control, ControlKey, or KeepControl, - // all of which will append to c.control; refresh the slice. - fns := c.control[key] - c.control[key] = append(fns[:i], fns[i+1:]...) - return +func (c *Cluster) tryControlKey(key int16, creq *clientReq) (kmsg.Response, error, bool) { + for cctx := range c.control[key] { + if cctx.lastReq[creq.cc] == creq { + continue + } + cctx.lastReq[creq.cc] = creq + res := c.runControl(cctx, creq) + for { + select { + case <-c.die: + return nil, nil, false + case admin := <-c.adminCh: + admin() + continue + case res := <-res: + c.maybePopControl(res.handled, cctx) + return res.kresp, res.err, res.handled + case sleepChs := <-c.controlSleep: + c.beginSleptControl(&slept{ + cctx: cctx, + sleepChs: sleepChs, + res: res, + creq: creq, + }) + return nil, nil, true + } } } - return + return nil, nil, false } -func (c *Cluster) callControl(key int16, req kmsg.Request, fn controlFn) (kresp kmsg.Response, err error, handled bool) { - c.keepCurrentControl.Swap(false) +func (c *Cluster) runControl(cctx *controlCtx, creq *clientReq) chan controlResp { + res := make(chan controlResp, 1) + c.currentBroker = creq.cc.b + c.currentControl = cctx + // We unlock before entering a control function so that the control + // function can modify / add more control. We re-lock when exiting the + // control function. This does pose some weird control flow issues + // w.r.t. sleeping requests. Here, we have to re-lock before sending + // down res, otherwise we risk unlocking an unlocked mu in + // finishSleepControl. c.controlMu.Unlock() - defer func() { + go func() { + kresp, err, handled := cctx.fn(creq.kreq) c.controlMu.Lock() - if handled && c.keepCurrentControl.Swap(false) { - c.control[key] = append(c.control[key], fn) + c.currentControl = nil + c.currentBroker = nil + res <- controlResp{kresp, err, handled} + }() + return res +} + +func (c *Cluster) beginSleptControl(s *slept) { + // Control flow gets really weird here. We unlocked when entering the + // control function, so we have to re-lock now so that tryControl can + // unlock us safely. + bs := c.sleeping[s.creq.cc] + if bs == nil { + bs = &bsleep{ + c: c, + set: make(map[*slept]struct{}), + setWake: make(chan *slept, 1), + } + c.sleeping[s.creq.cc] = bs + } + bs.enqueue(s) + c.controlMu.Lock() + c.currentControl = nil + c.currentBroker = nil +} + +func (c *Cluster) continueSleptControl(s *slept) { + // When continuing a slept control, we are in the main run loop and are + // not currently under the control mu. We need to re-set the current + // broker and current control before resuming. + c.controlMu.Lock() + c.currentBroker = s.creq.cc.b + c.currentControl = s.cctx + c.controlMu.Unlock() + s.sleepChs.clientCont <- struct{}{} +} + +func (c *Cluster) finishSleptControl(s *slept) { + // When finishing a slept control, the control function exited and + // grabbed the control mu. We clear the control, unlock, and allow the + // slept control to be dequeued. + c.currentControl = nil + c.currentBroker = nil + c.controlMu.Unlock() + s.continueDequeue <- struct{}{} +} + +func (c *Cluster) resleepSleptControl(s *slept, sleepChs sleepChs) { + // A control function previously slept and is now again sleeping. We + // need to clear the control broker / etc, update the sleep channels, + // and allow the sleep dequeueing to continue. The control function + // will not be deqeueued in the loop because we updated sleepChs with + // a non-nil clientWait. + c.controlMu.Lock() + c.currentBroker = nil + c.currentControl = nil + c.controlMu.Unlock() + s.sleepChs = sleepChs + s.continueDequeue <- struct{}{} + // For OOO requests, we need to manually trigger a goroutine to + // watch for the sleep to end. + s.bs.maybeWaitOOOWake(s) +} + +func (c *Cluster) maybePopControl(handled bool, cctx *controlCtx) { + if handled && !cctx.keep || cctx.drop { + delete(c.control[cctx.key], cctx) + } +} + +// bsleep manages sleeping requests on a connection to a broker, or +// non-sleeping requests that are waiting for sleeping requests to finish. +type bsleep struct { + c *Cluster + mu sync.Mutex + queue []*slept + set map[*slept]struct{} + setWake chan *slept +} + +type slept struct { + bs *bsleep + cctx *controlCtx + sleepChs sleepChs + res <-chan controlResp + creq *clientReq + waiting bool + + continueDequeue chan struct{} +} + +type sleepChs struct { + clientWait chan struct{} + clientCont chan struct{} +} + +// enqueue has a few potential behaviors. +// +// (1) If s is waiting, this is a new request enqueueing to the back of an +// existing queue, where we are waiting for the head request to finish +// sleeping. Easy case. +// +// (2) If s is not waiting, this is a sleeping request. If the queue is empty, +// this is the first sleeping request on a node. We enqueue and start our wait +// goroutine. Easy. +// +// (3) If s is not waiting, but our queue is non-empty, this must be from a +// convoluted scenario: +// +// (a) the user has SleepOutOfOrder configured, +// (b) or, there was a request in front of us that slept, we were waiting, +// and now we ourselves are sleeping +// (c) or, we are sleeping for the second time in a single control +func (bs *bsleep) enqueue(s *slept) bool { + if bs == nil { + return false // Do not enqueue, nothing sleeping + } + s.continueDequeue = make(chan struct{}, 1) + s.bs = bs + bs.mu.Lock() + defer bs.mu.Unlock() + if s.waiting { + if bs.c.cfg.sleepOutOfOrder { + panic("enqueueing a waiting request even though we are sleeping out of order") + } + if !bs.empty() { + bs.keep(s) // Case (1) + return true + } + return false // We do not enqueue, do not wait: nothing sleeping ahead of us + } + if bs.empty() { + bs.keep(s) + go bs.wait() // Case (2) + return true + } + var q0 *slept + if !bs.c.cfg.sleepOutOfOrder { + q0 = bs.queue[0] // Case (3b) or (3c) -- just update values below + } else { + // Case (3a), out of order sleep: we need to check the entire + // queue to see if this request was already sleeping and, if + // so, update the values. If it was not already sleeping, we + // "keep" the new sleeping item. + bs.keep(s) + return true + } + if q0.creq != s.creq { + panic("internal error: sleeping request not head request") + } + // We do not update continueDequeue because it is actively being read, + // we just reuse the old value. + q0.cctx = s.cctx + q0.sleepChs = s.sleepChs + q0.res = s.res + q0.waiting = s.waiting + return true +} + +// keep stores a sleeping request to be managed. For out of order control, the +// log is a bit more complicated and we need to watch for the control sleep +// finishing here, and forward the "I'm done sleeping" notification to waitSet. +func (bs *bsleep) keep(s *slept) { + if !bs.c.cfg.sleepOutOfOrder { + bs.queue = append(bs.queue, s) + return + } + bs.set[s] = struct{}{} + bs.maybeWaitOOOWake(s) +} + +func (bs *bsleep) maybeWaitOOOWake(s *slept) { + if !bs.c.cfg.sleepOutOfOrder { + return + } + go func() { + select { + case <-bs.c.die: + case <-s.sleepChs.clientWait: + select { + case <-bs.c.die: + case bs.setWake <- s: + } } }() - return fn(req) +} + +func (bs *bsleep) empty() bool { + return len(bs.queue) == 0 && len(bs.set) == 0 +} + +func (bs *bsleep) wait() { + if bs.c.cfg.sleepOutOfOrder { + bs.waitSet() + } else { + bs.waitQueue() + } +} + +// For out of order control, all control functions run concurrently, serially. +// Whenever they wake up, they send themselves down setWake. waitSet manages +// handling the wake up and interacting with the serial manage goroutine to +// run everything properly. +func (bs *bsleep) waitSet() { + for { + bs.mu.Lock() + if len(bs.set) == 0 { + bs.mu.Unlock() + return + } + bs.mu.Unlock() + + // Wait for a control function to awaken. + var q *slept + select { + case <-bs.c.die: + return + case q = <-bs.setWake: + q.sleepChs.clientWait = nil + } + + // Now, schedule ourselves with the run loop. + select { + case <-bs.c.die: + return + case bs.c.wakeCh <- q: + } + + // Wait for this control function to finish its loop in the run + // function. Once it does, if clientWait is non-nil, the + // control function went back to sleep. If it is nil, the + // control function is done and we remove this from tracking. + select { + case <-bs.c.die: + return + case <-q.continueDequeue: + } + if q.sleepChs.clientWait == nil { + bs.mu.Lock() + delete(bs.set, q) + bs.mu.Unlock() + } + } +} + +// For in-order control functions, the concept is slightly simpler but the +// logic flow is the same. We wait for the head control function to wake up, +// try to run it, and then wait for it to finish. The logic of this function is +// the same as waitSet, minus the middle part where we wait for something to +// wake up. +func (bs *bsleep) waitQueue() { + for { + bs.mu.Lock() + if len(bs.queue) == 0 { + bs.mu.Unlock() + return + } + q0 := bs.queue[0] + bs.mu.Unlock() + + if q0.sleepChs.clientWait != nil { + select { + case <-bs.c.die: + return + case <-q0.sleepChs.clientWait: + q0.sleepChs.clientWait = nil + } + } + + select { + case <-bs.c.die: + return + case bs.c.wakeCh <- q0: + } + + select { + case <-bs.c.die: + return + case <-q0.continueDequeue: + } + if q0.sleepChs.clientWait == nil { + bs.mu.Lock() + bs.queue = bs.queue[1:] + bs.mu.Unlock() + } + } } // Various administrative requests can be passed into the cluster to simulate @@ -485,6 +966,28 @@ func (c *Cluster) MoveTopicPartition(topic string, partition int32, nodeID int32 return err } +// CoordinatorFor returns the node ID of the group or transaction coordinator +// for the given key. +func (c *Cluster) CoordinatorFor(key string) int32 { + var n int32 + c.admin(func() { + l := len(c.bs) + if l == 0 { + n = -1 + return + } + n = c.coordinator(key).node + }) + return n +} + +// RehashCoordinators simulates group and transacational ID coordinators moving +// around. All group and transactional IDs are rekeyed. This forces clients to +// reload coordinators. +func (c *Cluster) RehashCoordinators() { + c.coordinatorGen.Add(1) +} + // AddNode adds a node to the cluster. If nodeID is -1, the next node ID is // used. If port is 0 or negative, a random port is chosen. This returns the // added node ID and the port used, or an error if the node already exists or diff --git a/pkg/kfake/config.go b/pkg/kfake/config.go index d0f01106..75b34fb2 100644 --- a/pkg/kfake/config.go +++ b/pkg/kfake/config.go @@ -34,6 +34,8 @@ type cfg struct { enableSASL bool sasls map[struct{ m, u string }]string // cleared after client initialization tls *tls.Config + + sleepOutOfOrder bool } // NumBrokers sets the number of brokers to start in the fake cluster. @@ -113,3 +115,12 @@ func TLS(c *tls.Config) Opt { func SeedTopics(partitions int32, ts ...string) Opt { return opt{func(cfg *cfg) { cfg.seedTopics = append(cfg.seedTopics, seedTopics{partitions, ts}) }} } + +// SleepOutOfOrder allows functions to be handled out of order when control +// functions are sleeping. The functions are be handled internally out of +// order, but responses still wait for the sleeping requests to finish. This +// can be used to set up complicated chains of control where functions only +// advance when you know another request is actively being handled. +func SleepOutOfOrder() Opt { + return opt{func(cfg *cfg) { cfg.sleepOutOfOrder = true }} +} diff --git a/pkg/kfake/go.mod b/pkg/kfake/go.mod index 00424211..a174462c 100644 --- a/pkg/kfake/go.mod +++ b/pkg/kfake/go.mod @@ -3,7 +3,7 @@ module github.com/twmb/franz-go/pkg/kfake go 1.20 require ( - github.com/twmb/franz-go v1.14.3 - github.com/twmb/franz-go/pkg/kmsg v1.6.1 - golang.org/x/crypto v0.11.0 + github.com/twmb/franz-go v1.15.3 + github.com/twmb/franz-go/pkg/kmsg v1.7.0 + golang.org/x/crypto v0.17.0 ) diff --git a/pkg/kfake/go.sum b/pkg/kfake/go.sum index 1ebccb91..9aea1130 100644 --- a/pkg/kfake/go.sum +++ b/pkg/kfake/go.sum @@ -1,6 +1,6 @@ -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= -golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= diff --git a/pkg/kfake/groups.go b/pkg/kfake/groups.go index a0a70b11..a0e5a98e 100644 --- a/pkg/kfake/groups.go +++ b/pkg/kfake/groups.go @@ -38,7 +38,7 @@ type ( protocols map[string]int protocol string - reqCh chan clientReq + reqCh chan *clientReq controlCh chan func() nJoining int @@ -58,7 +58,7 @@ type ( // waitingReply is non-nil if a client is waiting for a reply // from us for a JoinGroupRequest or a SyncGroupRequest. - waitingReply clientReq + waitingReply *clientReq assignment []byte @@ -101,11 +101,12 @@ func (gs groupState) String() string { } func (c *Cluster) coordinator(id string) *broker { - n := hashString(id) % uint64(len(c.bs)) + gen := c.coordinatorGen.Load() + n := hashString(fmt.Sprint("%d", gen)+"\x00\x00"+id) % uint64(len(c.bs)) return c.bs[n] } -func (c *Cluster) validateGroup(creq clientReq, group string) *kerr.Error { +func (c *Cluster) validateGroup(creq *clientReq, group string) *kerr.Error { switch key := kmsg.Key(creq.kreq.Key()); key { case kmsg.OffsetCommit, kmsg.OffsetFetch, kmsg.DescribeGroups, kmsg.DeleteGroups: default: @@ -132,7 +133,7 @@ func generateMemberID(clientID string, instanceID *string) string { //////////// // handleJoin completely hijacks the incoming request. -func (gs *groups) handleJoin(creq clientReq) { +func (gs *groups) handleJoin(creq *clientReq) { if gs.gs == nil { gs.gs = make(map[string]*group) } @@ -147,7 +148,7 @@ start: members: make(map[string]*groupMember), pending: make(map[string]*groupMember), protocols: make(map[string]int), - reqCh: make(chan clientReq), + reqCh: make(chan *clientReq), controlCh: make(chan func()), quitCh: make(chan struct{}), } @@ -165,7 +166,7 @@ start: // Returns true if the request is hijacked and handled, otherwise false if the // group does not exist. -func (gs *groups) handleHijack(group string, creq clientReq) bool { +func (gs *groups) handleHijack(group string, creq *clientReq) bool { if gs.gs == nil { return false } @@ -181,27 +182,27 @@ func (gs *groups) handleHijack(group string, creq clientReq) bool { } } -func (gs *groups) handleSync(creq clientReq) bool { +func (gs *groups) handleSync(creq *clientReq) bool { return gs.handleHijack(creq.kreq.(*kmsg.SyncGroupRequest).Group, creq) } -func (gs *groups) handleHeartbeat(creq clientReq) bool { +func (gs *groups) handleHeartbeat(creq *clientReq) bool { return gs.handleHijack(creq.kreq.(*kmsg.HeartbeatRequest).Group, creq) } -func (gs *groups) handleLeave(creq clientReq) bool { +func (gs *groups) handleLeave(creq *clientReq) bool { return gs.handleHijack(creq.kreq.(*kmsg.LeaveGroupRequest).Group, creq) } -func (gs *groups) handleOffsetCommit(creq clientReq) bool { +func (gs *groups) handleOffsetCommit(creq *clientReq) bool { return gs.handleHijack(creq.kreq.(*kmsg.OffsetCommitRequest).Group, creq) } -func (gs *groups) handleOffsetDelete(creq clientReq) bool { +func (gs *groups) handleOffsetDelete(creq *clientReq) bool { return gs.handleHijack(creq.kreq.(*kmsg.OffsetDeleteRequest).Group, creq) } -func (gs *groups) handleList(creq clientReq) *kmsg.ListGroupsResponse { +func (gs *groups) handleList(creq *clientReq) *kmsg.ListGroupsResponse { req := creq.kreq.(*kmsg.ListGroupsRequest) resp := req.ResponseKind().(*kmsg.ListGroupsResponse) @@ -233,7 +234,7 @@ func (gs *groups) handleList(creq clientReq) *kmsg.ListGroupsResponse { return resp } -func (gs *groups) handleDescribe(creq clientReq) *kmsg.DescribeGroupsResponse { +func (gs *groups) handleDescribe(creq *clientReq) *kmsg.DescribeGroupsResponse { req := creq.kreq.(*kmsg.DescribeGroupsRequest) resp := req.ResponseKind().(*kmsg.DescribeGroupsResponse) @@ -285,7 +286,7 @@ func (gs *groups) handleDescribe(creq clientReq) *kmsg.DescribeGroupsResponse { return resp } -func (gs *groups) handleDelete(creq clientReq) *kmsg.DeleteGroupsResponse { +func (gs *groups) handleDelete(creq *clientReq) *kmsg.DeleteGroupsResponse { req := creq.kreq.(*kmsg.DeleteGroupsRequest) resp := req.ResponseKind().(*kmsg.DeleteGroupsResponse) @@ -324,7 +325,7 @@ func (gs *groups) handleDelete(creq clientReq) *kmsg.DeleteGroupsResponse { return resp } -func (gs *groups) handleOffsetFetch(creq clientReq) *kmsg.OffsetFetchResponse { +func (gs *groups) handleOffsetFetch(creq *clientReq) *kmsg.OffsetFetchResponse { req := creq.kreq.(*kmsg.OffsetFetchRequest) resp := req.ResponseKind().(*kmsg.OffsetFetchResponse) @@ -423,7 +424,7 @@ func (gs *groups) handleOffsetFetch(creq clientReq) *kmsg.OffsetFetchResponse { return resp } -func (g *group) handleOffsetDelete(creq clientReq) *kmsg.OffsetDeleteResponse { +func (g *group) handleOffsetDelete(creq *clientReq) *kmsg.OffsetDeleteResponse { req := creq.kreq.(*kmsg.OffsetDeleteRequest) resp := req.ResponseKind().(*kmsg.OffsetDeleteResponse) @@ -588,7 +589,7 @@ func (g *group) quitOnce() { // to the client to immediately rejoin if a new client enters the group. // // If this returns nil, the request will be replied to later. -func (g *group) handleJoin(creq clientReq) (kmsg.Response, bool) { +func (g *group) handleJoin(creq *clientReq) (kmsg.Response, bool) { req := creq.kreq.(*kmsg.JoinGroupRequest) resp := req.ResponseKind().(*kmsg.JoinGroupResponse) @@ -664,7 +665,7 @@ func (g *group) handleJoin(creq clientReq) (kmsg.Response, bool) { } // Handles a sync, which can transition us to stable. -func (g *group) handleSync(creq clientReq) kmsg.Response { +func (g *group) handleSync(creq *clientReq) kmsg.Response { req := creq.kreq.(*kmsg.SyncGroupRequest) resp := req.ResponseKind().(*kmsg.SyncGroupResponse) @@ -715,7 +716,7 @@ func (g *group) handleSync(creq clientReq) kmsg.Response { // Handles a heartbeat, a relatively simple request that just delays our // session timeout timer. -func (g *group) handleHeartbeat(creq clientReq) kmsg.Response { +func (g *group) handleHeartbeat(creq *clientReq) kmsg.Response { req := creq.kreq.(*kmsg.HeartbeatRequest) resp := req.ResponseKind().(*kmsg.HeartbeatResponse) @@ -751,7 +752,7 @@ func (g *group) handleHeartbeat(creq clientReq) kmsg.Response { // Handles a leave. We trigger a rebalance for every member leaving in a batch // request, but that's fine because of our manage serialization. -func (g *group) handleLeave(creq clientReq) kmsg.Response { +func (g *group) handleLeave(creq *clientReq) kmsg.Response { req := creq.kreq.(*kmsg.LeaveGroupRequest) resp := req.ResponseKind().(*kmsg.LeaveGroupResponse) @@ -784,7 +785,7 @@ func (g *group) handleLeave(creq clientReq) kmsg.Response { g.stopPending(p) } } else { - g.updateMemberAndRebalance(m, clientReq{}, nil) + g.updateMemberAndRebalance(m, nil, nil) } } @@ -806,7 +807,7 @@ func fillOffsetCommit(req *kmsg.OffsetCommitRequest, resp *kmsg.OffsetCommitResp } // Handles a commit. -func (g *group) handleOffsetCommit(creq clientReq) *kmsg.OffsetCommitResponse { +func (g *group) handleOffsetCommit(creq *clientReq) *kmsg.OffsetCommitResponse { req := creq.kreq.(*kmsg.OffsetCommitRequest) resp := req.ResponseKind().(*kmsg.OffsetCommitResponse) @@ -985,7 +986,7 @@ func (g *group) completeLeaderSync(req *kmsg.SyncGroupRequest) { func (g *group) updateHeartbeat(m *groupMember) { g.atSessionTimeout(m, func() { - g.updateMemberAndRebalance(m, clientReq{}, nil) + g.updateMemberAndRebalance(m, nil, nil) }) } @@ -1024,7 +1025,7 @@ func (g *group) atSessionTimeout(m *groupMember, fn func()) { // This is used to update a member from a new join request, or to clear a // member from failed heartbeats. -func (g *group) updateMemberAndRebalance(m *groupMember, waitingReply clientReq, newJoin *kmsg.JoinGroupRequest) { +func (g *group) updateMemberAndRebalance(m *groupMember, waitingReply *clientReq, newJoin *kmsg.JoinGroupRequest) { for _, p := range m.join.Protocols { g.protocols[p.Name]-- } @@ -1050,7 +1051,7 @@ func (g *group) updateMemberAndRebalance(m *groupMember, waitingReply clientReq, } // Adds a new member to the group and rebalances. -func (g *group) addMemberAndRebalance(m *groupMember, waitingReply clientReq, join *kmsg.JoinGroupRequest) { +func (g *group) addMemberAndRebalance(m *groupMember, waitingReply *clientReq, join *kmsg.JoinGroupRequest) { g.stopPending(m) m.join = join for _, p := range m.join.Protocols { @@ -1132,14 +1133,14 @@ members: return metadata } -func (g *group) reply(creq clientReq, kresp kmsg.Response, m *groupMember) { +func (g *group) reply(creq *clientReq, kresp kmsg.Response, m *groupMember) { select { case creq.cc.respCh <- clientResp{kresp: kresp, corr: creq.corr, seq: creq.seq}: case <-g.c.die: return } if m != nil { - m.waitingReply = clientReq{} + m.waitingReply = nil g.updateHeartbeat(m) } } diff --git a/pkg/kfake/sasl.go b/pkg/kfake/sasl.go index 9140157b..413bb3bd 100644 --- a/pkg/kfake/sasl.go +++ b/pkg/kfake/sasl.go @@ -47,7 +47,7 @@ const ( saslStageComplete ) -func (c *Cluster) handleSASL(creq clientReq) (allow bool) { +func (c *Cluster) handleSASL(creq *clientReq) (allow bool) { switch creq.cc.saslStage { case saslStageBegin: switch creq.kreq.(type) { diff --git a/pkg/kgo/client.go b/pkg/kgo/client.go index d11befa9..3f9fe29d 100644 --- a/pkg/kgo/client.go +++ b/pkg/kgo/client.go @@ -1505,6 +1505,31 @@ func (cl *Client) loadCoordinator(ctx context.Context, typ int8, key string) (*b } func (cl *Client) loadCoordinators(ctx context.Context, typ int8, keys ...string) map[string]brokerOrErr { + mch := make(chan map[string]brokerOrErr, 1) + go func() { mch <- cl.doLoadCoordinators(ctx, typ, keys...) }() + select { + case m := <-mch: + return m + case <-ctx.Done(): + m := make(map[string]brokerOrErr, len(keys)) + for _, k := range keys { + m[k] = brokerOrErr{nil, ctx.Err()} + } + return m + } +} + +// doLoadCoordinators uses the caller context to cancel loading metadata +// (brokerOrErr), but we use the client context to actually issue the request. +// There should be only one direct call to doLoadCoordinators, just above in +// loadCoordinator. It is possible for two requests to be loading the same +// coordinator (in fact, that's the point of this function -- collapse these +// requests). We do not want the first request canceling it's context to cause +// errors for the second request. +// +// It is ok to leave FindCoordinator running even if the caller quits. Worst +// case, we just cache things for some time in the future; yay. +func (cl *Client) doLoadCoordinators(ctx context.Context, typ int8, keys ...string) map[string]brokerOrErr { m := make(map[string]brokerOrErr, len(keys)) if len(keys) == 0 { return m @@ -1575,7 +1600,12 @@ func (cl *Client) loadCoordinators(ctx context.Context, typ int8, keys ...string } } - shards := cl.RequestSharded(ctx, req) + cl.cfg.logger.Log(LogLevelDebug, "prepared to issue find coordinator request", + "coordinator_type", typ, + "coordinator_keys", req.CoordinatorKeys, + ) + + shards := cl.RequestSharded(cl.ctx, req) for _, shard := range shards { if shard.Err != nil { @@ -1674,10 +1704,17 @@ func (cl *Client) maybeDeleteStaleCoordinator(name string, typ int8, err error) func (cl *Client) deleteStaleCoordinator(name string, typ int8) { cl.coordinatorsMu.Lock() defer cl.coordinatorsMu.Unlock() - delete(cl.coordinators, coordinatorKey{ - name: name, - typ: typ, - }) + k := coordinatorKey{name, typ} + v := cl.coordinators[k] + if v == nil { + return + } + select { + case <-v.loadWait: + delete(cl.coordinators, k) + default: + // We are actively reloading this coordinator. + } } type brokerOrErr struct { @@ -3420,10 +3457,17 @@ func (cl *addPartitionsToTxnSharder) shard(ctx context.Context, kreq kmsg.Reques var issues []issueShard for id, req := range brokerReqs { - issues = append(issues, issueShard{ - req: req, - broker: id, - }) + if len(req.Transactions) <= 1 || len(req.Transactions) == 1 && !req.Transactions[0].VerifyOnly { + issues = append(issues, issueShard{ + req: &pinReq{Request: req, pinMax: true, max: 3}, + broker: id, + }) + } else { + issues = append(issues, issueShard{ + req: req, + broker: id, + }) + } } for _, unkerr := range unkerrs { issues = append(issues, issueShard{ diff --git a/pkg/kgo/compression.go b/pkg/kgo/compression.go index 208951a6..27bfe6db 100644 --- a/pkg/kgo/compression.go +++ b/pkg/kgo/compression.go @@ -5,7 +5,7 @@ import ( "compress/gzip" "encoding/binary" "errors" - "io/ioutil" + "io" "runtime" "sync" @@ -268,7 +268,11 @@ func (d *decompressor) decompress(src []byte, codec byte) ([]byte, error) { if err := ungz.Reset(bytes.NewReader(src)); err != nil { return nil, err } - return ioutil.ReadAll(ungz) + out := new(bytes.Buffer) + if _, err := io.Copy(out, ungz); err != nil { + return nil, err + } + return out.Bytes(), nil case 2: if len(src) > 16 && bytes.HasPrefix(src, xerialPfx) { return xerialDecode(src) @@ -278,7 +282,11 @@ func (d *decompressor) decompress(src []byte, codec byte) ([]byte, error) { unlz4 := d.unlz4Pool.Get().(*lz4.Reader) defer d.unlz4Pool.Put(unlz4) unlz4.Reset(bytes.NewReader(src)) - return ioutil.ReadAll(unlz4) + out := new(bytes.Buffer) + if _, err := io.Copy(out, unlz4); err != nil { + return nil, err + } + return out.Bytes(), nil case 4: unzstd := d.unzstdPool.Get().(*zstdDecoder) defer d.unzstdPool.Put(unzstd) diff --git a/pkg/kgo/config.go b/pkg/kgo/config.go index d7c08645..221095cf 100644 --- a/pkg/kgo/config.go +++ b/pkg/kgo/config.go @@ -1110,7 +1110,7 @@ func RecordDeliveryTimeout(timeout time.Duration) ProducerOpt { // the equation. You must also assign a group to consume from. // // To produce transactionally, you first BeginTransaction, then produce records -// consumed from a group, then you EndTransaction. All records prodcued outside +// consumed from a group, then you EndTransaction. All records produced outside // of a transaction will fail immediately with an error. // // After producing a batch, you must commit what you consumed. Auto committing diff --git a/pkg/kgo/consumer.go b/pkg/kgo/consumer.go index 6569a60d..ceaed081 100644 --- a/pkg/kgo/consumer.go +++ b/pkg/kgo/consumer.go @@ -1763,10 +1763,16 @@ func (s *consumerSession) handleListOrEpochResults(loaded loadedOffsets) (reload // guard this entire function. debug := s.c.cl.cfg.logger.Level() >= LogLevelDebug - var using, reloading map[string]map[int32]EpochOffset + + var using map[string]map[int32]EpochOffset + type epochOffsetWhy struct { + EpochOffset + error + } + var reloading map[string]map[int32]epochOffsetWhy if debug { using = make(map[string]map[int32]EpochOffset) - reloading = make(map[string]map[int32]EpochOffset) + reloading = make(map[string]map[int32]epochOffsetWhy) defer func() { t := "list" if loaded.loadType == loadTypeEpoch { @@ -1818,10 +1824,10 @@ func (s *consumerSession) handleListOrEpochResults(loaded loadedOffsets) (reload if debug { treloading := reloading[load.topic] if treloading == nil { - treloading = make(map[int32]EpochOffset) + treloading = make(map[int32]epochOffsetWhy) reloading[load.topic] = treloading } - treloading[load.partition] = EpochOffset{load.leaderEpoch, load.offset} + treloading[load.partition] = epochOffsetWhy{EpochOffset{load.leaderEpoch, load.offset}, load.err} } } } diff --git a/pkg/kgo/consumer_direct_test.go b/pkg/kgo/consumer_direct_test.go index ac385e8e..f4ddc4db 100644 --- a/pkg/kgo/consumer_direct_test.go +++ b/pkg/kgo/consumer_direct_test.go @@ -263,10 +263,19 @@ func TestAddRemovePartitions(t *testing.T) { } } +func closed(ch <-chan struct{}) bool { + select { + case <-ch: + return true + default: + return false + } +} + func TestPauseIssue489(t *testing.T) { t.Parallel() - t1, cleanup := tmpTopicPartitions(t, 2) + t1, cleanup := tmpTopicPartitions(t, 3) defer cleanup() cl, _ := NewClient( @@ -282,47 +291,142 @@ func TestPauseIssue489(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) go func() { var exit atomic.Bool - var zeroOne uint8 + var which uint8 for !exit.Load() { r := StringRecord("v") - r.Partition = int32(zeroOne % 2) - zeroOne++ + r.Partition = int32(which % 3) + which++ cl.Produce(ctx, r, func(r *Record, err error) { if err == context.Canceled { exit.Store(true) } }) + time.Sleep(100 * time.Microsecond) } }() defer cancel() - for i := 0; i < 10; i++ { - var sawZero, sawOne bool - for !sawZero || !sawOne { - fs := cl.PollFetches(ctx) - fs.EachRecord(func(r *Record) { - sawZero = sawZero || r.Partition == 0 - sawOne = sawOne || r.Partition == 1 - }) - } - cl.PauseFetchPartitions(map[string][]int32{t1: {0}}) - sawZero, sawOne = false, false + for _, pollfn := range []struct { + name string + fn func(context.Context) Fetches + }{ + {"fetches", func(ctx context.Context) Fetches { return cl.PollFetches(ctx) }}, + {"records", func(ctx context.Context) Fetches { return cl.PollRecords(ctx, 1000) }}, + } { for i := 0; i < 10; i++ { - var fs Fetches - if i < 5 { - fs = cl.PollFetches(ctx) - } else { - fs = cl.PollRecords(ctx, 2) + ctx, cancel := context.WithTimeout(ctx, 10*time.Second) + var sawZero, sawOne, sawTwo bool + for (!sawZero || !sawOne || !sawTwo) && !closed(ctx.Done()) { + fs := pollfn.fn(ctx) + fs.EachRecord(func(r *Record) { + sawZero = sawZero || r.Partition == 0 + sawOne = sawOne || r.Partition == 1 + sawTwo = sawTwo || r.Partition == 2 + }) } - fs.EachRecord(func(r *Record) { - sawZero = sawZero || r.Partition == 0 - sawOne = sawOne || r.Partition == 1 + cl.PauseFetchPartitions(map[string][]int32{t1: {0}}) + sawZero, sawOne, sawTwo = false, false, false + for i := 0; i < 10 && !closed(ctx.Done()); i++ { + fs := pollfn.fn(ctx) + fs.EachRecord(func(r *Record) { + sawZero = sawZero || r.Partition == 0 + sawOne = sawOne || r.Partition == 1 + sawTwo = sawTwo || r.Partition == 2 + }) + } + cancel() + if sawZero { + t.Fatalf("%s: saw partition zero even though it was paused", pollfn.name) + } + if !sawOne { + t.Fatalf("%s: did not see partition one even though it was not paused", pollfn.name) + } + if !sawTwo { + t.Fatalf("%s: did not see partition two even though it was not paused", pollfn.name) + } + cl.ResumeFetchPartitions(map[string][]int32{t1: {0}}) + } + } +} + +func TestPauseIssueOct2023(t *testing.T) { + t.Parallel() + + t1, cleanup1 := tmpTopicPartitions(t, 1) + t2, cleanup2 := tmpTopicPartitions(t, 1) + t3, cleanup3 := tmpTopicPartitions(t, 1) + defer cleanup1() + defer cleanup2() + defer cleanup3() + ts := []string{t1, t2, t3} + + cl, _ := NewClient( + getSeedBrokers(), + UnknownTopicRetries(-1), + ConsumeTopics(ts...), + MetadataMinAge(50*time.Millisecond), + FetchMaxWait(100*time.Millisecond), + ) + defer cl.Close() + + ctx, cancel := context.WithCancel(context.Background()) + go func() { + var exit atomic.Bool + var which int + for !exit.Load() { + r := StringRecord("v") + r.Topic = ts[which%len(ts)] + which++ + cl.Produce(ctx, r, func(r *Record, err error) { + if err == context.Canceled { + exit.Store(true) + } }) + time.Sleep(100 * time.Microsecond) } - if sawZero { - t.Error("saw partition zero even though it was paused") + }() + defer cancel() + + for _, pollfn := range []struct { + name string + fn func(context.Context) Fetches + }{ + {"fetches", func(ctx context.Context) Fetches { return cl.PollFetches(ctx) }}, + {"records", func(ctx context.Context) Fetches { return cl.PollRecords(ctx, 1000) }}, + } { + for i := 0; i < 10; i++ { + ctx, cancel := context.WithTimeout(ctx, 10*time.Second) + var sawt1, sawt2, sawt3 bool + for (!sawt1 || !sawt2 || !sawt3) && !closed(ctx.Done()) { + fs := pollfn.fn(ctx) + fs.EachRecord(func(r *Record) { + sawt1 = sawt1 || r.Topic == t1 + sawt2 = sawt2 || r.Topic == t2 + sawt3 = sawt3 || r.Topic == t3 + }) + } + cl.PauseFetchTopics(t1) + sawt1, sawt2, sawt3 = false, false, false + for i := 0; i < 10 && !closed(ctx.Done()); i++ { + fs := pollfn.fn(ctx) + fs.EachRecord(func(r *Record) { + sawt1 = sawt1 || r.Topic == t1 + sawt2 = sawt2 || r.Topic == t2 + sawt3 = sawt3 || r.Topic == t3 + }) + } + cancel() + if sawt1 { + t.Fatalf("%s: saw topic t1 even though it was paused", pollfn.name) + } + if !sawt2 { + t.Fatalf("%s: did not see topic t2 even though it was not paused", pollfn.name) + } + if !sawt3 { + t.Fatalf("%s: did not see topic t3 even though it was not paused", pollfn.name) + } + cl.ResumeFetchTopics(t1) } - cl.ResumeFetchPartitions(map[string][]int32{t1: {0}}) } } diff --git a/pkg/kgo/consumer_group.go b/pkg/kgo/consumer_group.go index 43203023..f4475ec7 100644 --- a/pkg/kgo/consumer_group.go +++ b/pkg/kgo/consumer_group.go @@ -2201,14 +2201,6 @@ func (g *groupConsumer) getSetAssigns(setOffsets map[string]map[int32]EpochOffse // offsets are always updated on calls to PollFetches. // // If there are no uncommitted offsets, this returns nil. -// -// Note that, if manually committing, you should be careful with committing -// during group rebalances. You must ensure you commit before the group's -// session timeout is reached, otherwise this client will be kicked from the -// group and the commit will fail. -// -// If using a cooperative balancer, commits while consuming during rebalancing -// may fail with REBALANCE_IN_PROGRESS. func (cl *Client) UncommittedOffsets() map[string]map[int32]EpochOffset { if g := cl.consumer.g; g != nil { return g.getUncommitted(true) @@ -2218,27 +2210,14 @@ func (cl *Client) UncommittedOffsets() map[string]map[int32]EpochOffset { // MarkedOffsets returns the latest marked offsets. When autocommitting, a // marked offset is an offset that can be committed, in comparison to a dirty -// offset that cannot yet be committed. You usually see marked offsets with -// AutoCommitMarks and MarkCommitRecords, but you can also use this function to -// grab the current offsets that are candidates for committing from normal -// autocommitting. -// -// If you set a custom OnPartitionsRevoked, marked offsets are not committed -// when partitions are revoked. You can use this function to mark records and -// issue a commit inside your OnPartitionsRevoked. -// -// Note that, if manually committing, you should be careful with committing -// during group rebalances. You must ensure you commit before the group's -// session timeout is reached, otherwise this client will be kicked from the -// group and the commit will fail. -// -// If using a cooperative balancer, commits while consuming during rebalancing -// may fail with REBALANCE_IN_PROGRESS. +// offset that cannot yet be committed. MarkedOffsets returns nil if you are +// not using AutoCommitMarks. func (cl *Client) MarkedOffsets() map[string]map[int32]EpochOffset { - if g := cl.consumer.g; g != nil { - return g.getUncommitted(false) + g := cl.consumer.g + if g == nil || !cl.cfg.autocommitMarks { + return nil } - return nil + return g.getUncommitted(false) } // CommittedOffsets returns the latest committed offsets. Committed offsets are @@ -2464,13 +2443,13 @@ func (cl *Client) CommitUncommittedOffsets(ctx context.Context) error { return cl.commitOffsets(ctx, cl.UncommittedOffsets()) } -// CommitMarkedOffsets issues a synchronous offset commit for any -// partition that has been consumed from that has marked offsets. -// Retryable errors are retried up to the configured retry limit, and any -// unretryable error is returned. +// CommitMarkedOffsets issues a synchronous offset commit for any partition +// that has been consumed from that has marked offsets. Retryable errors are +// retried up to the configured retry limit, and any unretryable error is +// returned. // -// This function is useful if you have marked offsets with MarkCommitRecords -// when using AutoCommitMarks. +// This function is only useful if you have marked offsets with +// MarkCommitRecords when using AutoCommitMarks, otherwise this is a no-op. // // The recommended pattern for using this function is to have a poll / process // / commit loop. First PollFetches, then process every record, @@ -2480,7 +2459,11 @@ func (cl *Client) CommitUncommittedOffsets(ctx context.Context) error { // As an alternative if you want to commit specific records, see CommitRecords. func (cl *Client) CommitMarkedOffsets(ctx context.Context) error { // This function is just the tail end of CommitRecords just above. - return cl.commitOffsets(ctx, cl.MarkedOffsets()) + marked := cl.MarkedOffsets() + if len(marked) == 0 { + return nil + } + return cl.commitOffsets(ctx, marked) } func (cl *Client) commitOffsets(ctx context.Context, offsets map[string]map[int32]EpochOffset) error { diff --git a/pkg/kgo/internal/sticky/go121.go b/pkg/kgo/internal/sticky/go121.go new file mode 100644 index 00000000..3cf972b6 --- /dev/null +++ b/pkg/kgo/internal/sticky/go121.go @@ -0,0 +1,28 @@ +//go:build go1.21 +// +build go1.21 + +package sticky + +import "slices" + +func sortPartNums(ps memberPartitions) { + slices.Sort(ps) +} + +func (b *balancer) sortMemberByLiteralPartNum(memberNum int) { + partNums := b.plan[memberNum] + slices.SortFunc(partNums, func(lpNum, rpNum int32) int { + ltNum, rtNum := b.partOwners[lpNum], b.partOwners[rpNum] + li, ri := b.topicInfos[ltNum], b.topicInfos[rtNum] + lt, rt := li.topic, ri.topic + lp, rp := lpNum-li.partNum, rpNum-ri.partNum + if lp < rp { + return -1 + } else if lp > rp { + return 1 + } else if lt < rt { + return -1 + } + return 1 + }) +} diff --git a/pkg/kgo/internal/sticky/goold.go b/pkg/kgo/internal/sticky/goold.go new file mode 100644 index 00000000..addd2bbc --- /dev/null +++ b/pkg/kgo/internal/sticky/goold.go @@ -0,0 +1,22 @@ +//go:build !go1.21 +// +build !go1.21 + +package sticky + +import "sort" + +func sortPartNums(partNums memberPartitions) { + sort.Slice(partNums, func(i, j int) bool { return partNums[i] < partNums[j] }) +} + +func (b *balancer) sortMemberByLiteralPartNum(memberNum int) { + partNums := b.plan[memberNum] + sort.Slice(partNums, func(i, j int) bool { + lpNum, rpNum := partNums[i], partNums[j] + ltNum, rtNum := b.partOwners[lpNum], b.partOwners[rpNum] + li, ri := b.topicInfos[ltNum], b.topicInfos[rtNum] + lt, rt := li.topic, ri.topic + lp, rp := lpNum-li.partNum, rpNum-ri.partNum + return lp < rp || (lp == rp && lt < rt) + }) +} diff --git a/pkg/kgo/internal/sticky/sticky.go b/pkg/kgo/internal/sticky/sticky.go index a653b67d..9f48d7dc 100644 --- a/pkg/kgo/internal/sticky/sticky.go +++ b/pkg/kgo/internal/sticky/sticky.go @@ -7,7 +7,6 @@ package sticky import ( "math" - "sort" "github.com/twmb/franz-go/pkg/kbin" "github.com/twmb/franz-go/pkg/kmsg" @@ -138,7 +137,7 @@ func (b *balancer) into() Plan { // partOwners is created by topic, and partNums refers to // indices in partOwners. If we sort by partNum, we have sorted // topics and partitions. - sort.Sort(&partNums) //nolint:gosec // sorting the slice, not using the pointer across iter + sortPartNums(partNums) // We can reuse partNums for our topic partitions. topicParts := partNums[:0] @@ -203,10 +202,6 @@ func (m *memberPartitions) add(partNum int32) { *m = append(*m, partNum) } -func (m *memberPartitions) Len() int { return len(*m) } -func (m *memberPartitions) Less(i, j int) bool { return (*m)[i] < (*m)[j] } -func (m *memberPartitions) Swap(i, j int) { (*m)[i], (*m)[j] = (*m)[j], (*m)[i] } - // membersPartitions maps members to their partitions. type membersPartitions []memberPartitions @@ -479,33 +474,42 @@ func (b *balancer) assignUnassignedAndInitGraph() { // all topics. This benefits the standard case the most, where all // members consume equally. for memberNum := range b.plan { - partNums := b.plan[memberNum] - sort.Slice(partNums, func(i, j int) bool { - lpNum, rpNum := partNums[i], partNums[j] - ltNum, rtNum := b.partOwners[lpNum], b.partOwners[rpNum] - li, ri := b.topicInfos[ltNum], b.topicInfos[rtNum] - lt, rt := li.topic, ri.topic - lp, rp := lpNum-li.partNum, rpNum-ri.partNum - return lp < rp || (lp == rp && lt < rt) - }) - } - - for _, potentials := range topicPotentials { - (&membersByPartitions{potentials, b.plan}).init() + b.sortMemberByLiteralPartNum(memberNum) } - for partNum, owner := range partitionConsumers { - if owner.memberNum != unassignedPart { - continue + if !b.isComplex && len(topicPotentials) > 0 { + potentials := topicPotentials[0] + (&membersByPartitions{potentials, b.plan}).init() + for partNum, owner := range partitionConsumers { + if owner.memberNum != unassignedPart { + continue + } + assigned := potentials[0] + b.plan[assigned].add(int32(partNum)) + (&membersByPartitions{potentials, b.plan}).fix0() + partitionConsumers[partNum].memberNum = assigned } - potentials := topicPotentials[b.partOwners[partNum]] - if len(potentials) == 0 { - continue + } else { + for partNum, owner := range partitionConsumers { + if owner.memberNum != unassignedPart { + continue + } + potentials := topicPotentials[b.partOwners[partNum]] + if len(potentials) == 0 { + continue + } + leastConsumingPotential := potentials[0] + leastConsuming := len(b.plan[leastConsumingPotential]) + for _, potential := range potentials[1:] { + potentialConsuming := len(b.plan[potential]) + if potentialConsuming < leastConsuming { + leastConsumingPotential = potential + leastConsuming = potentialConsuming + } + } + b.plan[leastConsumingPotential].add(int32(partNum)) + partitionConsumers[partNum].memberNum = leastConsumingPotential } - assigned := potentials[0] - b.plan[assigned].add(int32(partNum)) - (&membersByPartitions{potentials, b.plan}).fix0() - partitionConsumers[partNum].memberNum = assigned } // Lastly, with everything assigned, we build our steal graph for @@ -553,7 +557,7 @@ func (b *balancer) tryRestickyStales( currentOwner := partitionConsumers[staleNum].memberNum lastOwnerPartitions := &b.plan[lastOwnerNum] currentOwnerPartitions := &b.plan[currentOwner] - if lastOwnerPartitions.Len()+1 < currentOwnerPartitions.Len() { + if len(*lastOwnerPartitions)+1 < len(*currentOwnerPartitions) { currentOwnerPartitions.remove(staleNum) lastOwnerPartitions.add(staleNum) } @@ -704,8 +708,8 @@ func (b *balancer) reassignPartition(src, dst uint16, partNum int32) { srcPartitions := &b.plan[src] dstPartitions := &b.plan[dst] - oldSrcLevel := srcPartitions.Len() - oldDstLevel := dstPartitions.Len() + oldSrcLevel := len(*srcPartitions) + oldDstLevel := len(*dstPartitions) srcPartitions.remove(partNum) dstPartitions.add(partNum) diff --git a/pkg/kgo/internal/sticky/sticky_test.go b/pkg/kgo/internal/sticky/sticky_test.go index 264b41e2..b5e0eef5 100644 --- a/pkg/kgo/internal/sticky/sticky_test.go +++ b/pkg/kgo/internal/sticky/sticky_test.go @@ -1541,6 +1541,20 @@ func Test_stickyAddEqualMove(t *testing.T) { } } +func Test_stickyTwoJoinEqualBalance(t *testing.T) { + t.Parallel() + topics := map[string]int32{"foo": 16, "bar": 16} + members := []GroupMember{ + {ID: "1", Topics: []string{"foo", "bar"}}, + {ID: "2", Topics: []string{"foo", "bar"}}, + } + plan := Balance(members, topics) + if len(plan["1"]["foo"]) != 8 || len(plan["1"]["bar"]) != 8 || + len(plan["2"]["foo"]) != 8 || len(plan["2"]["bar"]) != 8 { + t.Errorf("bad distribution: %v", plan) + } +} + func Test_stickyBalanceStrategy_Plan_AssignmentWithConflictingPreviousGenerations(t *testing.T) { t.Parallel() diff --git a/pkg/kgo/source.go b/pkg/kgo/source.go index 3086e60d..e1dd5477 100644 --- a/pkg/kgo/source.go +++ b/pkg/kgo/source.go @@ -152,6 +152,11 @@ type cursorOffset struct { // details. lastConsumedEpoch int32 + // If we receive OFFSET_OUT_OF_RANGE, and we previously *know* we + // consumed an offset, we reset to the nearest offset after our prior + // known valid consumed offset. + lastConsumedTime time.Time + // The current high watermark of the partition. Uninitialized (0) means // we do not know the HWM, or there is no lag. hwm int64 @@ -355,6 +360,10 @@ func (s *source) takeBuffered(paused pausedTopics) Fetch { // and strip the topic entirely. pps, ok := paused.t(t) if !ok { + for _, o := range ps { + o.from.setOffset(o.cursorOffset) + o.from.allowUsable() + } continue } if strip == nil { @@ -368,7 +377,6 @@ func (s *source) takeBuffered(paused pausedTopics) Fetch { continue } stript := make(map[int32]struct{}) - strip[t] = stript for _, o := range ps { if _, ok := pps.m[o.from.partition]; ok { o.from.allowUsable() @@ -378,6 +386,15 @@ func (s *source) takeBuffered(paused pausedTopics) Fetch { o.from.setOffset(o.cursorOffset) o.from.allowUsable() } + // We only add stript to strip if there are any + // stripped partitions. We could have a paused + // partition that is on another broker, while this + // broker has no paused partitions -- if we add stript + // here, our logic below (stripping this entire topic) + // is more confusing (present nil vs. non-present nil). + if len(stript) > 0 { + strip[t] = stript + } } }) if strip != nil { @@ -435,9 +452,15 @@ func (s *source) takeNBuffered(paused pausedTopics, n int) (Fetch, int, bool) { continue } - r.Topics = append(r.Topics, *t) - rt := &r.Topics[len(r.Topics)-1] - rt.Partitions = nil + var rt *FetchTopic + ensureTopicAdded := func() { + if rt != nil { + return + } + r.Topics = append(r.Topics, *t) + rt = &r.Topics[len(r.Topics)-1] + rt.Partitions = nil + } tCursors := b.usedOffsets[t.Topic] @@ -455,6 +478,7 @@ func (s *source) takeNBuffered(paused pausedTopics, n int) (Fetch, int, bool) { continue } + ensureTopicAdded() rt.Partitions = append(rt.Partitions, *p) rp := &rt.Partitions[len(rt.Partitions)-1] @@ -487,6 +511,7 @@ func (s *source) takeNBuffered(paused pausedTopics, n int) (Fetch, int, bool) { pCursor.from.setOffset(cursorOffset{ offset: lastReturnedRecord.Offset + 1, lastConsumedEpoch: lastReturnedRecord.LeaderEpoch, + lastConsumedTime: lastReturnedRecord.Timestamp, hwm: p.HighWatermark, }) } @@ -1048,23 +1073,44 @@ func (s *source) handleReqResp(br *broker, req *fetchRequest, resp *kmsg.FetchRe // In all cases except case 4, we also have to check if // no reset offset was configured. If so, we ignore // trying to reset and instead keep our failed partition. - addList := func(replica int32) { + addList := func(replica int32, log bool) { if s.cl.cfg.resetOffset.noReset { keep = true + } else if !partOffset.from.lastConsumedTime.IsZero() { + reloadOffsets.addLoad(topic, partition, loadTypeList, offsetLoad{ + replica: replica, + Offset: NewOffset().AfterMilli(partOffset.from.lastConsumedTime.UnixMilli()), + }) + if log { + s.cl.cfg.logger.Log(LogLevelWarn, "received OFFSET_OUT_OF_RANGE, resetting to the nearest offset; either you were consuming too slowly and the broker has deleted the segment you were in the middle of consuming, or the broker has lost data and has not yet transferred leadership", + "broker", logID(s.nodeID), + "topic", topic, + "partition", partition, + "prior_offset", partOffset.offset, + ) + } } else { reloadOffsets.addLoad(topic, partition, loadTypeList, offsetLoad{ replica: replica, Offset: s.cl.cfg.resetOffset, }) + if log { + s.cl.cfg.logger.Log(LogLevelInfo, "received OFFSET_OUT_OF_RANGE on the first fetch, resetting to the configured ConsumeResetOffset", + "broker", logID(s.nodeID), + "topic", topic, + "partition", partition, + "prior_offset", partOffset.offset, + ) + } } } switch { case s.nodeID == partOffset.from.leader: // non KIP-392 case - addList(-1) + addList(-1, true) case partOffset.offset < fp.LogStartOffset: // KIP-392 case 3 - addList(s.nodeID) + addList(s.nodeID, false) default: // partOffset.offset > fp.HighWatermark, KIP-392 case 4 if kip320 { @@ -1079,7 +1125,7 @@ func (s *source) handleReqResp(br *broker, req *fetchRequest, resp *kmsg.FetchRe // If the broker does not support offset for leader epoch but // does support follower fetching for some reason, we have to // fallback to listing. - addList(-1) + addList(-1, true) } } @@ -1611,6 +1657,7 @@ func (o *cursorOffsetNext) maybeKeepRecord(fp *FetchPartition, record *Record, a // topic is compacted. o.offset = record.Offset + 1 o.lastConsumedEpoch = record.LeaderEpoch + o.lastConsumedTime = record.Timestamp } /////////////////////////////// @@ -1722,6 +1769,26 @@ type fetchRequest struct { torder []string // order of topics to write porder map[string][]int32 // per topic, order of partitions to write + // topic2id and id2topic track bidirectional lookup of topics and IDs + // that are being added to *this* specific request. topic2id slightly + // duplicates the map t2id in the fetch session, but t2id is different + // in that t2id tracks IDs in use from all prior requests -- and, + // importantly, t2id is cleared of IDs that are no longer used (see + // ForgottenTopics). + // + // We need to have both a session t2id map and a request t2id map: + // + // * The session t2id is what we use when creating forgotten topics. + // If we are forgetting a topic, the ID is not in the req t2id. + // + // * The req topic2id is used for adding to the session t2id. When + // building a request, if the id is in req.topic2id but not + // session.t2id, we promote the ID into the session map. + // + // Lastly, id2topic is used when handling the response, as our reverse + // lookup from the ID back to the topic (and then we work with the + // topic name only). There is no equivalent in the session because + // there is no need for the id2topic lookup ever in the session. topic2id map[string][16]byte id2topic map[[16]byte]string @@ -2048,7 +2115,7 @@ func (f *fetchRequest) AppendTo(dst []byte) []byte { if forgottenTopic == nil { t := kmsg.NewFetchRequestForgottenTopic() t.Topic = topic - t.TopicID = f.topic2id[topic] + t.TopicID = f.session.t2id[topic] req.ForgottenTopics = append(req.ForgottenTopics, t) forgottenTopic = &req.ForgottenTopics[len(req.ForgottenTopics)-1] } @@ -2060,7 +2127,8 @@ func (f *fetchRequest) AppendTo(dst []byte) []byte { id := f.session.t2id[topic] delete(f.session.t2id, topic) // If we deleted a topic that was missing an ID, then we clear the - // previous disableIDs state and potentially reenable it. + // previous disableIDs state. We potentially *reenable* disableIDs + // if any remaining topics in our session are also missing their ID. var noID [16]byte if id == noID { f.session.disableIDs = false diff --git a/pkg/sasl/kerberos/go.mod b/pkg/sasl/kerberos/go.mod index fa1144f7..234f3e71 100644 --- a/pkg/sasl/kerberos/go.mod +++ b/pkg/sasl/kerberos/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( github.com/jcmturner/gokrb5/v8 v8.4.4 - github.com/twmb/franz-go v1.14.3 + github.com/twmb/franz-go v1.15.3 ) require ( @@ -13,6 +13,6 @@ require ( github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect github.com/jcmturner/gofork v1.7.6 // indirect github.com/jcmturner/rpc/v2 v2.0.3 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/net v0.17.0 // indirect + golang.org/x/crypto v0.17.0 // indirect + golang.org/x/net v0.19.0 // indirect ) diff --git a/pkg/sasl/kerberos/go.sum b/pkg/sasl/kerberos/go.sum index 00d50547..735250ea 100644 --- a/pkg/sasl/kerberos/go.sum +++ b/pkg/sasl/kerberos/go.sum @@ -28,14 +28,14 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -43,8 +43,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/pkg/sr/api.go b/pkg/sr/api.go index 2d06838f..4eeb866c 100644 --- a/pkg/sr/api.go +++ b/pkg/sr/api.go @@ -404,7 +404,7 @@ func (cl *Client) DeleteSubject(ctx context.Context, subject string, how DeleteH // DELETE /subjects/{subject}?permanent={x} path := pathSubject(subject) if how == HardDelete { - path += "?permanent=true" + ctx = WithParams(ctx, hardDelete) } var versions []int defer func() { sort.Ints(versions) }() @@ -419,7 +419,7 @@ func (cl *Client) DeleteSchema(ctx context.Context, subject string, version int, // DELETE /subjects/{subject}/versions/{version}?permanent={x} path := pathSubjectVersion(subject, version) if how == HardDelete { - path += "?permanent=true" + ctx = WithParams(ctx, hardDelete) } return cl.delete(ctx, path, nil) } diff --git a/pkg/sr/client.go b/pkg/sr/client.go index 850a1c20..0a53618c 100644 --- a/pkg/sr/client.go +++ b/pkg/sr/client.go @@ -24,6 +24,7 @@ import ( "fmt" "io" "net/http" + "net/url" "time" ) @@ -100,21 +101,25 @@ func (cl *Client) do(ctx context.Context, method, path string, v, into any) erro urls := cl.urls start: - url := fmt.Sprintf("%s%s", urls[0], path) + reqURL, err := url.JoinPath(urls[0], path) + if err != nil { + return fmt.Errorf("unable to join path for %q and %q: %w", urls[0], path, err) + } + urls = urls[1:] var reqBody io.Reader if v != nil { marshaled, err := json.Marshal(v) if err != nil { - return fmt.Errorf("unable to encode body for %s %q: %w", method, url, err) + return fmt.Errorf("unable to encode body for %s %q: %w", method, reqURL, err) } reqBody = bytes.NewReader(marshaled) } - req, err := http.NewRequestWithContext(ctx, method, url, reqBody) + req, err := http.NewRequestWithContext(ctx, method, reqURL, reqBody) if err != nil { - return fmt.Errorf("unable to create request for %s %q: %v", method, url, err) + return fmt.Errorf("unable to create request for %s %q: %v", method, reqURL, err) } req.Header.Set("Content-Type", "application/vnd.schemaregistry.v1+json") req.Header.Set("Accept", "application/vnd.schemaregistry.v1+json") @@ -127,7 +132,7 @@ start: resp, err := cl.httpcl.Do(req) if err != nil { if len(urls) == 0 { - return fmt.Errorf("unable to %s %q: %w", method, url, err) + return fmt.Errorf("unable to %s %q: %w", method, reqURL, err) } goto start } @@ -135,13 +140,13 @@ start: body, err := io.ReadAll(resp.Body) resp.Body.Close() if err != nil { - return fmt.Errorf("unable to read response body from %s %q: %w", method, url, err) + return fmt.Errorf("unable to read response body from %s %q: %w", method, reqURL, err) } if resp.StatusCode >= 300 { e := &ResponseError{ Method: method, - URL: url, + URL: reqURL, Raw: body, } _ = json.Unmarshal(body, e) // best effort @@ -154,7 +159,7 @@ start: *into = body // return raw body to caller default: if err := json.Unmarshal(body, into); err != nil { - return fmt.Errorf("unable to decode ok response body from %s %q: %w", method, url, err) + return fmt.Errorf("unable to decode ok response body from %s %q: %w", method, reqURL, err) } } } diff --git a/pkg/sr/params.go b/pkg/sr/params.go index 33eb3c56..59c680c5 100644 --- a/pkg/sr/params.go +++ b/pkg/sr/params.go @@ -22,6 +22,7 @@ type Param struct { subject string page *int limit int + hardDelete bool } // WithParams adds query parameters to the given context. This is a merge @@ -83,6 +84,9 @@ func (p Param) apply(req *http.Request) { if p.limit > 0 { q.Set("limit", fmt.Sprintf("%d", p.limit)) } + if p.hardDelete { + q.Set("permanent", "true") + } req.URL.RawQuery = q.Encode() } @@ -130,6 +134,9 @@ func mergeParams(p ...Param) Param { if p.limit > 0 { merged.limit = p.limit } + if p.hardDelete { + merged.hardDelete = p.hardDelete + } } return merged } @@ -167,6 +174,9 @@ var ( // DeletedOnly is a Param that configures whether to return only // deleted schemas or subjects in certain get operations. DeletedOnly = Param{deletedOnly: true} + + // hardDelete is internal, and set when DeleteHow == HardDelete. + hardDelete = Param{hardDelete: true} ) // Format returns a Param that configures how schema's are returned in certain diff --git a/plugin/kgmetrics/go.mod b/plugin/kgmetrics/go.mod index 09ed03fe..5d75f856 100644 --- a/plugin/kgmetrics/go.mod +++ b/plugin/kgmetrics/go.mod @@ -4,11 +4,11 @@ go 1.18 require ( github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 - github.com/twmb/franz-go v1.14.3 + github.com/twmb/franz-go v1.15.3 ) require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect ) diff --git a/plugin/kgmetrics/go.sum b/plugin/kgmetrics/go.sum index 8286c692..047be3a9 100644 --- a/plugin/kgmetrics/go.sum +++ b/plugin/kgmetrics/go.sum @@ -1,10 +1,10 @@ -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= diff --git a/plugin/klogr/go.mod b/plugin/klogr/go.mod index f474a845..b8f67777 100644 --- a/plugin/klogr/go.mod +++ b/plugin/klogr/go.mod @@ -3,12 +3,12 @@ module github.com/twmb/franz-go/plugin/klogr go 1.18 require ( - github.com/go-logr/logr v1.2.4 - github.com/twmb/franz-go v1.14.3 + github.com/go-logr/logr v1.3.0 + github.com/twmb/franz-go v1.15.3 ) require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect ) diff --git a/plugin/klogr/go.sum b/plugin/klogr/go.sum index 3ff1ed61..9df4b2e9 100644 --- a/plugin/klogr/go.sum +++ b/plugin/klogr/go.sum @@ -1,10 +1,10 @@ -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= +github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= diff --git a/plugin/klogrus/go.mod b/plugin/klogrus/go.mod index 5f4e7366..aec8b14d 100644 --- a/plugin/klogrus/go.mod +++ b/plugin/klogrus/go.mod @@ -4,13 +4,16 @@ go 1.18 require ( github.com/sirupsen/logrus v1.9.3 - github.com/twmb/franz-go v1.14.3 + github.com/stretchr/testify v1.8.0 + github.com/twmb/franz-go v1.15.3 ) require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/stretchr/testify v1.8.0 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect - golang.org/x/sys v0.10.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect + golang.org/x/sys v0.15.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/plugin/klogrus/go.sum b/plugin/klogrus/go.sum index 7c4e7669..6eea62ef 100644 --- a/plugin/klogrus/go.sum +++ b/plugin/klogrus/go.sum @@ -1,10 +1,10 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= @@ -15,13 +15,14 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/plugin/klogrus/klogrus.go b/plugin/klogrus/klogrus.go index 70ec6364..da10380a 100644 --- a/plugin/klogrus/klogrus.go +++ b/plugin/klogrus/klogrus.go @@ -7,17 +7,37 @@ import ( "github.com/twmb/franz-go/pkg/kgo" ) +var ( + _ FieldLogger = (*logrus.Logger)(nil) + _ kgo.Logger = (*Logger)(nil) +) + +// FieldLogger interface combines logrus.FieldLogger with GetLevel method +// useful to represent a wrapper around *logrus.Logger. +type FieldLogger interface { + logrus.FieldLogger + GetLevel() logrus.Level +} + // Logger provides the kgo.Logger interface for usage in kgo.WithLogger when // initializing a client. type Logger struct { - lr *logrus.Logger + lr FieldLogger } -// New returns a new Logger. +// New returns a new Logger using a *logrus.Logger instance. func New(lr *logrus.Logger) *Logger { return &Logger{lr} } +// NewFieldLogger returns a new Logger using a FieldLogger interface. +// it is isofunctional with New constructor, except it can accept either +// *logrus.Logger or a possible wrapper that implements logrus.FieldLogger +// and includes GetLevel method. +func NewFieldLogger(fl FieldLogger) *Logger { + return &Logger{fl} +} + // Level is for the kgo.Logger interface. func (l *Logger) Level() kgo.LogLevel { return logrusToKgoLevel(l.lr.GetLevel()) @@ -45,6 +65,8 @@ func kgoToLogrusLevel(level kgo.LogLevel) (logrus.Level, bool) { return logrus.InfoLevel, true case kgo.LogLevelDebug: return logrus.DebugLevel, true + case kgo.LogLevelNone: + return logrus.TraceLevel, false } return logrus.TraceLevel, false } diff --git a/plugin/klogrus/klogrus_test.go b/plugin/klogrus/klogrus_test.go new file mode 100644 index 00000000..1aba950d --- /dev/null +++ b/plugin/klogrus/klogrus_test.go @@ -0,0 +1,44 @@ +package klogrus_test + +import ( + "testing" + + "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus/hooks/test" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/twmb/franz-go/pkg/kgo" + "github.com/twmb/franz-go/plugin/klogrus" +) + +func ExampleNew() { + l := klogrus.New(logrus.New()) + + l.Log(kgo.LogLevelInfo, "test message", "test-key", "test-val") + // Output: +} + +func TestFieldLogger(t *testing.T) { + logger, hook := test.NewNullLogger() + + l := klogrus.NewFieldLogger(logger) + + level := l.Level() + assert.Equal(t, kgo.LogLevelInfo, level) + + l.Log(kgo.LogLevelInfo, "test message", "test-key", "test-val") + + require.Equal(t, 1, len(hook.Entries)) + lastEntry := hook.LastEntry() + + assert.Equal(t, logrus.InfoLevel, lastEntry.Level) + assert.Equal(t, "test message", lastEntry.Message) + + value, ok := lastEntry.Data["test-key"] + assert.True(t, ok) + assert.Equal(t, "test-val", value) + + hook.Reset() + assert.Nil(t, hook.LastEntry()) +} diff --git a/plugin/kotel/go.mod b/plugin/kotel/go.mod index 91d0176a..074a653d 100644 --- a/plugin/kotel/go.mod +++ b/plugin/kotel/go.mod @@ -3,22 +3,22 @@ module github.com/twmb/franz-go/plugin/kotel go 1.19 require ( - github.com/stretchr/testify v1.8.3 - github.com/twmb/franz-go v1.14.3 - go.opentelemetry.io/otel v1.16.0 - go.opentelemetry.io/otel/metric v1.16.0 - go.opentelemetry.io/otel/trace v1.16.0 + github.com/stretchr/testify v1.8.4 + github.com/twmb/franz-go v1.15.3 + go.opentelemetry.io/otel v1.21.0 + go.opentelemetry.io/otel/metric v1.21.0 + go.opentelemetry.io/otel/trace v1.21.0 ) require ( github.com/davecgh/go-spew v1.1.1 // indirect - github.com/go-logr/logr v1.2.4 // indirect + github.com/go-logr/logr v1.3.0 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/klauspost/compress v1.16.7 // indirect + github.com/klauspost/compress v1.17.4 // indirect github.com/kr/pretty v0.1.0 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/plugin/kotel/go.sum b/plugin/kotel/go.sum index d3bfe495..bb88d230 100644 --- a/plugin/kotel/go.sum +++ b/plugin/kotel/go.sum @@ -1,34 +1,34 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= +github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= -go.opentelemetry.io/otel v1.16.0 h1:Z7GVAX/UkAXPKsy94IU+i6thsQS4nb7LviLpnaNeW8s= -go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeHrT/bx4= -go.opentelemetry.io/otel/metric v1.16.0 h1:RbrpwVG1Hfv85LgnZ7+txXioPDoh6EdbZHo26Q3hqOo= -go.opentelemetry.io/otel/metric v1.16.0/go.mod h1:QE47cpOmkwipPiefDwo2wDzwJrlfxxNYodqc4xnGCo4= -go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs= -go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= +go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= +go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= +go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= +go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= +go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/plugin/kphuslog/go.mod b/plugin/kphuslog/go.mod index 34bdd247..f8c5bdb5 100644 --- a/plugin/kphuslog/go.mod +++ b/plugin/kphuslog/go.mod @@ -3,12 +3,12 @@ module github.com/twmb/franz-go/plugin/kphuslog go 1.19 require ( - github.com/phuslu/log v1.0.87 - github.com/twmb/franz-go v1.14.3 + github.com/phuslu/log v1.0.88 + github.com/twmb/franz-go v1.15.3 ) require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect ) diff --git a/plugin/kphuslog/go.sum b/plugin/kphuslog/go.sum index bea2cf7b..ce6b5b3b 100644 --- a/plugin/kphuslog/go.sum +++ b/plugin/kphuslog/go.sum @@ -1,10 +1,10 @@ -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/phuslu/log v1.0.87 h1:NpQQzepT/NvYcxz6jD/NR+12BOCm9++ju1FxlE3sjhc= -github.com/phuslu/log v1.0.87/go.mod h1:F8osGJADo5qLK/0F88djWwdyoZZ9xDJQL1HYRHFEkS0= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/phuslu/log v1.0.88 h1:kivXMpYQ2hd9BxiJNhRM5xnaEZaGunQYlnRQdk/aBw8= +github.com/phuslu/log v1.0.88/go.mod h1:F8osGJADo5qLK/0F88djWwdyoZZ9xDJQL1HYRHFEkS0= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= diff --git a/plugin/kprom/go.mod b/plugin/kprom/go.mod index 422d51ad..d995a7c5 100644 --- a/plugin/kprom/go.mod +++ b/plugin/kprom/go.mod @@ -3,21 +3,20 @@ module github.com/twmb/franz-go/plugin/kprom go 1.18 require ( - github.com/prometheus/client_golang v1.16.0 - github.com/twmb/franz-go v1.14.3 + github.com/prometheus/client_golang v1.17.0 + github.com/twmb/franz-go v1.15.3 ) require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/klauspost/compress v1.16.7 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/prometheus/client_model v0.4.0 // indirect - github.com/prometheus/common v0.44.0 // indirect - github.com/prometheus/procfs v0.11.1 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect - golang.org/x/sys v0.10.0 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect + golang.org/x/sys v0.15.0 // indirect google.golang.org/protobuf v1.31.0 // indirect ) diff --git a/plugin/kprom/go.sum b/plugin/kprom/go.sum index 3e0cd1fe..e8f9f202 100644 --- a/plugin/kprom/go.sum +++ b/plugin/kprom/go.sum @@ -3,35 +3,30 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= -github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= -github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= -github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= -github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= -github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= -github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= diff --git a/plugin/kslog/go.mod b/plugin/kslog/go.mod index 5e0ab27b..04eea620 100644 --- a/plugin/kslog/go.mod +++ b/plugin/kslog/go.mod @@ -2,10 +2,10 @@ module github.com/twmb/franz-go/plugin/kslog go 1.21.0 -require github.com/twmb/franz-go v1.15.0 +require github.com/twmb/franz-go v1.15.3 require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect ) diff --git a/plugin/kslog/go.sum b/plugin/kslog/go.sum index 9b32193a..35d50b5c 100644 --- a/plugin/kslog/go.sum +++ b/plugin/kslog/go.sum @@ -1,8 +1,8 @@ -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/twmb/franz-go v1.15.0 h1:bw5n1COKJzWpkCXG/kMtHrurcS9HSWV6e3If5CUdc+M= -github.com/twmb/franz-go v1.15.0/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= diff --git a/plugin/kzap/go.mod b/plugin/kzap/go.mod index 399f8d04..b64168ab 100644 --- a/plugin/kzap/go.mod +++ b/plugin/kzap/go.mod @@ -3,13 +3,13 @@ module github.com/twmb/franz-go/plugin/kzap go 1.18 require ( - github.com/twmb/franz-go v1.14.3 - go.uber.org/zap v1.25.0 + github.com/twmb/franz-go v1.15.3 + go.uber.org/zap v1.26.0 ) require ( - github.com/klauspost/compress v1.16.7 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect go.uber.org/multierr v1.11.0 // indirect ) diff --git a/plugin/kzap/go.sum b/plugin/kzap/go.sum index f1d50715..6cdbb044 100644 --- a/plugin/kzap/go.sum +++ b/plugin/kzap/go.sum @@ -1,18 +1,17 @@ -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= -go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/plugin/kzerolog/go.mod b/plugin/kzerolog/go.mod index 8830a66a..cb568c8c 100644 --- a/plugin/kzerolog/go.mod +++ b/plugin/kzerolog/go.mod @@ -3,15 +3,15 @@ module github.com/twmb/franz-go/plugin/kzerolog go 1.18 require ( - github.com/rs/zerolog v1.30.0 - github.com/twmb/franz-go v1.14.3 + github.com/rs/zerolog v1.31.0 + github.com/twmb/franz-go v1.15.3 ) require ( - github.com/klauspost/compress v1.16.7 // indirect + github.com/klauspost/compress v1.17.4 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.19 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.6.1 // indirect - golang.org/x/sys v0.10.0 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect + golang.org/x/sys v0.15.0 // indirect ) diff --git a/plugin/kzerolog/go.sum b/plugin/kzerolog/go.sum index 2b470ed8..298e64e3 100644 --- a/plugin/kzerolog/go.sum +++ b/plugin/kzerolog/go.sum @@ -1,27 +1,25 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= -github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= -github.com/twmb/franz-go v1.14.3 h1:cq8rxAnVYU1uF3SRVn8eEaUf+AaXKWlB0Cl3Ca7JSa4= -github.com/twmb/franz-go v1.14.3/go.mod h1:nMAvTC2kHtK+ceaSHeHm4dlxC78389M/1DjpOswEgu4= -github.com/twmb/franz-go/pkg/kmsg v1.6.1 h1:tm6hXPv5antMHLasTfKv9R+X03AjHSkSkXhQo2c5ALM= -github.com/twmb/franz-go/pkg/kmsg v1.6.1/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= +github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/twmb/franz-go v1.15.3 h1:96nCgxz4DvGPSCumz6giquYy8GGDNsYCwWcloBdjJ4w= +github.com/twmb/franz-go v1.15.3/go.mod h1:aos+d/UBuigWkOs+6WoqEPto47EvC2jipLAO5qrAu48= +github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E= +github.com/twmb/franz-go/pkg/kmsg v1.7.0/go.mod h1:se9Mjdt0Nwzc9lnjJ0HyDtLyBnaBDAd7pCje47OhSyw= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=