Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug fix for data race #354

Merged
merged 11 commits into from
Nov 19, 2020
Merged

Bug fix for data race #354

merged 11 commits into from
Nov 19, 2020

Conversation

yashrsharma44
Copy link
Collaborator

@yashrsharma44 yashrsharma44 commented Oct 6, 2020

Changes made in this PR:

  • Fix the data race bug - I have used locks wherever append is called.
  • Updated the importing version of grpc-middleware in the provider module, so that the example tests use the latest example of the new logging API.

Fixes: #319
cc @johanbrandhorst
Signed-off-by: Yash Sharma [email protected]

Copy link
Collaborator

@johanbrandhorst johanbrandhorst left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we need to rethink this mockLogger.

interceptors/logging/interceptors_test.go Outdated Show resolved Hide resolved
@@ -110,11 +110,16 @@ func (l *baseMockLogger) Lines() []LogLine {

type mockLogger struct {
*baseMockLogger

m sync.Mutex
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need a new mutex? Can't we use the same one we're embedding with baseMockLogger?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Having read this a bit more closely, I think we should just merge baseMockLogger and mockLogger. I don't see what having two different structs here gives us, and it's really confusing to read. If we have a single mockLogger with a mutex that should make it easy to reason about where the locks need to be.

What do you think?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, I guess, we should merge both the baseMockLogger and mockLogger, which doesn't make sense to break down the logger into two parts.

Regarding the locks, I read that append operations and map operations are not concurrent safe, so I was using it as a rule of thumb for using the locks there. However, if you have more suggestions about the approach, I would be happy to discuss!

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm confused, I looked at the PR again and it doesn't look like you've made the change to merge these two loggers. Do you agree that this is a good idea? If so, could you please try to do it in this PR?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I kind of clicked on the review option by mistake 😛 I am currently working on merging the loggers, will ping you in slack once done.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should keep the current structure, and change the name of baseMockLogger to sharedResults or sharedLogLines : More Info -
#354 (comment)

…for logging in the example tests

Signed-off-by: Yash Sharma <[email protected]>
@codecov-io
Copy link

codecov-io commented Oct 8, 2020

Codecov Report

Merging #354 into v2 will decrease coverage by 7.59%.
The diff coverage is 92.85%.

Impacted file tree graph

@@            Coverage Diff             @@
##               v2     #354      +/-   ##
==========================================
- Coverage   83.58%   75.98%   -7.60%     
==========================================
  Files          30       30              
  Lines         932      762     -170     
==========================================
- Hits          779      579     -200     
- Misses        114      137      +23     
- Partials       39       46       +7     
Impacted Files Coverage Δ
chain.go 0.00% <ø> (-90.91%) ⬇️
interceptors/logging/payload.go 79.24% <50.00%> (-3.37%) ⬇️
interceptors/retry/retry.go 66.66% <70.00%> (-9.58%) ⬇️
interceptors/logging/interceptors.go 100.00% <100.00%> (ø)
interceptors/logging/logging.go 61.53% <100.00%> (-6.21%) ⬇️
interceptors/tags/fieldextractor.go 82.75% <100.00%> (-2.54%) ⬇️
interceptors/tracing/id_extract.go 76.92% <100.00%> (-8.27%) ⬇️
wrappers.go 50.00% <0.00%> (-50.00%) ⬇️
interceptors/tracing/metadata.go 50.00% <0.00%> (-16.67%) ⬇️
... and 27 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 73cf2ae...52d5001. Read the comment docs.

@yashrsharma44
Copy link
Collaborator Author

yashrsharma44 commented Oct 9, 2020

I had a few runs with the non-refactored code( the current setup) and the refactored code -

// THIS IS THE REFACTORED CODE WITH DATA RACE
type mockLogger struct {
	fields logging.Fields
	m      sync.Mutex
	lines  []LogLine
}

func (l *mockLogger) Lines() []LogLine {
	l.m.Lock()
	defer l.m.Unlock()

	return l.lines
}

func (l *mockLogger) Log(lvl logging.Level, msg string) {
	// since map isn't safe for concurrency, we use a lock
	l.m.Lock()
	defer l.m.Unlock()

	line := LogLine{
		lvl:    lvl,
		msg:    msg,
		fields: map[string]string{},
	}

	for i := 0; i < len(l.fields); i += 2 {
		line.fields[l.fields[i]] = l.fields[i+1]
	}

	l.lines = append(l.lines, line)
}

func (l *mockLogger) With(fields ...string) logging.Logger {
	// Append twice to copy slice, so we don't reuse array.
	l.m.Lock()
	defer l.m.Unlock()

	return &mockLogger{lines: l.lines, fields: append(append(logging.Fields{}, l.fields...), fields...)}
}

The code surprisingly doesn't have any data race for the current setup(using baseMockLogger and mockLogger) but when I merge it, there seems to be data race in spite of using locks .

I also want to merge the two loggers into one, but I am not able to find the issue of the failing tests due to the merged logger.
Suggestions are welcome.

Signed-off-by: Yash Sharma <[email protected]>
Signed-off-by: Yash Sharma <[email protected]>
Copy link
Collaborator

@johanbrandhorst johanbrandhorst left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've suggested some changes that should fix any existing race conditions in the new combined logger.

interceptors/logging/interceptors_test.go Outdated Show resolved Hide resolved
interceptors/logging/interceptors_test.go Outdated Show resolved Hide resolved
interceptors/logging/interceptors_test.go Outdated Show resolved Hide resolved
interceptors/logging/interceptors_test.go Outdated Show resolved Hide resolved
@yashrsharma44
Copy link
Collaborator Author

I applied the changes as you suggested, the data race issue has been removed, however, the fields are returning 0 data -

TestSuite/TestPing: interceptors_test.go:201: 
        	Error Trace:	interceptors_test.go:201
        	Error:      	"[]" should have 4 item(s), but has 0
        	Test:       	TestSuite/TestPing
=== RUN   TestSuite/TestPingError_WithCustomLevels
=== RUN   TestSuite/TestPingError_WithCustomLevels/Internal_must_remap_to_WarnLevel_in_DefaultClientCodeToLevel
    TestSuite/TestPingError_WithCustomLevels/Internal_must_remap_to_WarnLevel_in_DefaultClientCodeToLevel: interceptors_test.go:312: 
        	Error Trace:	interceptors_test.go:312
        	Error:      	"[]" should have 4 item(s), but has 0
        	Test:       	TestSuite/TestPingError_WithCustomLevels/Internal_must_remap_to_WarnLevel_in_DefaultClientCodeToLevel

Signed-off-by: Yash Sharma <[email protected]>
@yashrsharma44
Copy link
Collaborator Author

I read the previous code closely, and wrote some notes about the working of the code -

Untitled-2020-10-14-1001

  • We have a baseMockerLogger which is a struct that contains a slice []LogLine that contains slice of results once we Log in the data.
  • We have a mockLogger which contains a logger with a specific field.
  • By using the With command, it creates another mockLogger, and copies the previous fields into the new logger along with the fields passed in the With function

So if we want to have a single logger, we need to think how to accumulate the final results in a variable that is shared among all the mockLoggers, so that when they perform the logging using Log the data is appended to that shared variable.

I think the current setup is good for the logic, maybe we can change the name of the baseMockLogger, to something sharedResults, that way it is clear why we are using a shared struct for storing results.

Do you have any idea to refactor this logic, because the current setup with name changes sounds good to me?
cc @johanbrandhorst

@johanbrandhorst
Copy link
Collaborator

Honestly I don't have enough understanding of this part of the code to know. I figured my suggested changes would fix the race, maybe we need to update how the tests read the final lines?

@yashrsharma44
Copy link
Collaborator Author

Yeah seems so, if we want a single logger, we need to think of how would we compare the results of logging.

Copy link
Collaborator

@bwplotka bwplotka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR looks good to me, don't see the need of removing shared thing for test purposes as long as we comment it better and ensure result is sorted before check (:

}

type mockLogger struct {
*baseMockLogger
*sharedResults
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I remember now. So this is essentially some kind of output (we can call it like this). Similar to os.StdErr. You push and it goes to some output. Normally it's shared so wanted to mimic this.

The problem might be that it's used concurrently so there is no way to guarantee order.

So we can either sort lines before comparing or remove sharedResult and keep references to all create loggers with With? Whatever works. Maybe if you name it output it will make more sense? (:

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great, thanks for confirming what I understood!

So we can either sort lines before comparing or remove sharedResult and keep references to all create loggers with With? Whatever works. Maybe if you name it output it will make more sense? (:

I think, I would keep the original method of comparing the results, that sounds much more dependable. The references might create a bug-prone experience for comparing the results, so I would stick with the original method.

I have renamed the sharedResults into mockStdOutput, and have added some comments for how we are using it as a shared struct. Would be happy to add more comments if needed.

I have also sorted the output lines so that we have a definitive order for comparing the values.

…lice so that even due to concurrency, the output remains in a fixed sorted order

Signed-off-by: Yash Sharma <[email protected]>
@yashrsharma44
Copy link
Collaborator Author

I have addressed @bwplotka comments, PTAL when you are free 😎

@yashrsharma44
Copy link
Collaborator Author

PR Reviewers : It would be nice if you could add the label hacktoberfest-accepted in this PR, so that this PR counts for hacktoberfest 😛

@johanbrandhorst
Copy link
Collaborator

Sorry for the radio silence on this, I haven't had the time to look at this for a while. I was hoping Bartek could get this over the line but he's been busy as well. We haven't forgotten about your work @yashrsharma44, and we appreciate it 🤗.

@yashrsharma44
Copy link
Collaborator Author

ping @bwplotka Please review this whenever you are free 🤗

Copy link
Collaborator

@bwplotka bwplotka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@bwplotka bwplotka merged commit 7d39267 into grpc-ecosystem:v2 Nov 19, 2020
@yashrsharma44 yashrsharma44 mentioned this pull request Jan 2, 2021
yurishkuro referenced this pull request in jaegertracing/jaeger Jun 13, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/grpc-ecosystem/go-grpc-middleware](https://togithub.com/grpc-ecosystem/go-grpc-middleware)
| `v1.4.0` -> `v2.1.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgrpc-ecosystem%2fgo-grpc-middleware/v2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fgrpc-ecosystem%2fgo-grpc-middleware/v2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fgrpc-ecosystem%2fgo-grpc-middleware/v1.4.0/v2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgrpc-ecosystem%2fgo-grpc-middleware/v1.4.0/v2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>grpc-ecosystem/go-grpc-middleware
(github.com/grpc-ecosystem/go-grpc-middleware)</summary>

###
[`v2.1.0`](https://togithub.com/grpc-ecosystem/go-grpc-middleware/releases/tag/v2.1.0)

[Compare
Source](https://togithub.com/grpc-ecosystem/go-grpc-middleware/compare/v2.0.1...v2.1.0)

#### What's Changed

- Support for subsystem in grpc prometheus counter and histogram metrics
by [@&#8203;rohsaini](https://togithub.com/rohsaini) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/643](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/643)
- doc: update client interceptors chaining example with grpc functions
by [@&#8203;dethi](https://togithub.com/dethi) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/669](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/669)
- adds fields from durationFieldFunc to request/response log entries by
[@&#8203;vroldanbet](https://togithub.com/vroldanbet) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/670](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/670)
- add doc for disabling log opts by
[@&#8203;coleenquadros](https://togithub.com/coleenquadros) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/680](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/680)
- Middleware for determining the real ip of the client by
[@&#8203;MadsRC](https://togithub.com/MadsRC) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/682](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/682)
- protovalidate: add option to ignore certain message types by
[@&#8203;igor-tsiglyar](https://togithub.com/igor-tsiglyar) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/684](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/684)
- Update README.md by [@&#8203;zeroboo](https://togithub.com/zeroboo) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/688](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/688)
- Fix `InitializeMetrics` signature to allow use with `xds.GRPCServer`
by [@&#8203;bozaro](https://togithub.com/bozaro) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/689](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/689)
- Support retriable func condition by
[@&#8203;tamayika](https://togithub.com/tamayika) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/687](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/687)
- Extend realip parsing of GRPC peer address to handle IPv6 by
[@&#8203;surik](https://togithub.com/surik) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/692](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/692)
- Fix logging Example : log only first field by
[@&#8203;arckadious](https://togithub.com/arckadious) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/694](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/694)
- Extent realip interceptors with ip selection based on proxy count and
list by [@&#8203;surik](https://togithub.com/surik) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/695](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/695)
- Fix for vulnerability CVE-2023-44487 by
[@&#8203;vkaushik](https://togithub.com/vkaushik) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/696](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/696)

#### New Contributors

- [@&#8203;rohsaini](https://togithub.com/rohsaini) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/643](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/643)
- [@&#8203;dethi](https://togithub.com/dethi) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/669](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/669)
- [@&#8203;vroldanbet](https://togithub.com/vroldanbet) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/670](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/670)
- [@&#8203;MadsRC](https://togithub.com/MadsRC) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/682](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/682)
- [@&#8203;igor-tsiglyar](https://togithub.com/igor-tsiglyar) made their
first contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/684](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/684)
- [@&#8203;zeroboo](https://togithub.com/zeroboo) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/688](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/688)
- [@&#8203;bozaro](https://togithub.com/bozaro) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/689](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/689)
- [@&#8203;tamayika](https://togithub.com/tamayika) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/687](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/687)
- [@&#8203;surik](https://togithub.com/surik) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/692](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/692)
- [@&#8203;arckadious](https://togithub.com/arckadious) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/694](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/694)
- [@&#8203;vkaushik](https://togithub.com/vkaushik) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/696](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/696)

**Full Changelog**:
grpc-ecosystem/go-grpc-middleware@v2.0.1...v2.1.0

###
[`v2.0.1`](https://togithub.com/grpc-ecosystem/go-grpc-middleware/releases/tag/v2.0.1)

[Compare
Source](https://togithub.com/grpc-ecosystem/go-grpc-middleware/compare/v2.0.0...v2.0.1)

#### What's Changed

- Fix outdated 'make proto' command by
[@&#8203;takp](https://togithub.com/takp) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/623](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/623)
- Fix linting errors by [@&#8203;takp](https://togithub.com/takp) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/624](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/624)
- Logging: Add missing variadic operator for fields by
[@&#8203;olivierlemasle](https://togithub.com/olivierlemasle) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/629](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/629)
- feat: Support extracting fields from CallMeta by
[@&#8203;fsaintjacques](https://togithub.com/fsaintjacques) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/628](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/628)
- Fix "make test" and "make lint" by
[@&#8203;olivierlemasle](https://togithub.com/olivierlemasle) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/627](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/627)
- Do not set timeout for stream initialization by
[@&#8203;DavyJohnes](https://togithub.com/DavyJohnes) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/645](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/645)
- Add logging option to disable fields in log entry by
[@&#8203;coleenquadros](https://togithub.com/coleenquadros) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/631](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/631)
- Update logging adapter docs by
[@&#8203;aboryslawski](https://togithub.com/aboryslawski) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/647](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/647)

#### New Contributors

- [@&#8203;takp](https://togithub.com/takp) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/623](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/623)
- [@&#8203;olivierlemasle](https://togithub.com/olivierlemasle) made
their first contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/629](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/629)
- [@&#8203;fsaintjacques](https://togithub.com/fsaintjacques) made their
first contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/628](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/628)
- [@&#8203;DavyJohnes](https://togithub.com/DavyJohnes) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/645](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/645)
- [@&#8203;coleenquadros](https://togithub.com/coleenquadros) made their
first contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/631](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/631)
- [@&#8203;aboryslawski](https://togithub.com/aboryslawski) made their
first contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/647](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/647)

**Full Changelog**:
grpc-ecosystem/go-grpc-middleware@v2.0.0...v2.0.1

###
[`v2.0.0`](https://togithub.com/grpc-ecosystem/go-grpc-middleware/releases/tag/v2.0.0)

[Compare
Source](https://togithub.com/grpc-ecosystem/go-grpc-middleware/compare/v1.4.0...v2.0.0)

This is the first stable release of the new v2 release branch 🎉

Many of the interceptors have been rewritten from scratch and the
project has been upgraded to use the Go Protobuf v2 API.

See the project README for details and migration guide. Thanks to all
contributors who made this possible! 💪🏽

#### What's Changed

- Initial change for v2. by
[@&#8203;bwplotka](https://togithub.com/bwplotka) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/276](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/276)
- Updated README with note that it's under development. by
[@&#8203;bwplotka](https://togithub.com/bwplotka) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/278](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/278)
- Fix typo in field extractor (splices -> slices)
([#&#8203;287](https://togithub.com/grpc-ecosystem/go-grpc-middleware/issues/287))
by [@&#8203;bvwells](https://togithub.com/bvwells) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/289](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/289)
- Moved imports to v2; Moved to Go 1.14.2 by
[@&#8203;bwplotka](https://togithub.com/bwplotka) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/290](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/290)
- Formatted code; Added goimports to Makefile, Renamed pb_testproto to
testpb. by [@&#8203;bwplotka](https://togithub.com/bwplotka) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/291](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/291)
- Fixed providers go modules, examples and consistency. by
[@&#8203;bwplotka](https://togithub.com/bwplotka) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/292](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/292)
- added example for AuthFuncOverride v2 branch by
[@&#8203;tegk](https://togithub.com/tegk) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/294](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/294)
- Added some description of the Makefile in the contributing.md by
[@&#8203;yashrsharma44](https://togithub.com/yashrsharma44) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/298](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/298)
- v2: Add support for the zerolog logging provider by
[@&#8203;irridia](https://togithub.com/irridia) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/299](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/299)
- proto: fix gogoproto import by
[@&#8203;johanbrandhorst](https://togithub.com/johanbrandhorst) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/302](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/302)
- Retry dial and connection errors for grpc stream. by
[@&#8203;kartlee](https://togithub.com/kartlee) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/308](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/308)
- Moved to GH actions; Added lint; Added issue/PR templates. by
[@&#8203;bwplotka](https://togithub.com/bwplotka) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/296](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/296)
- inline localhost certificate into go file by
[@&#8203;bmon](https://togithub.com/bmon) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/318](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/318)
- Update streaming interceptor example by
[@&#8203;G07cha](https://togithub.com/G07cha) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/322](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/322)
- Do not stop retrying based on earlier good message from the stream by
[@&#8203;kartlee](https://togithub.com/kartlee) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/323](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/323)
- test certs - cherry-pick PR325 on v2 by
[@&#8203;dmitris](https://togithub.com/dmitris) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/331](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/331)
- add all make target, reword instructions by
[@&#8203;dmitris](https://togithub.com/dmitris) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/335](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/335)
- remove 1.12.x from build config for consistency with master by
[@&#8203;dmitris](https://togithub.com/dmitris) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/337](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/337)
- \[v2] Fix the special case for jaeger format traceid extraction by
[@&#8203;nvx](https://togithub.com/nvx) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/340](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/340)
- \[v2] Fix ctxtags TagBasedRequestFieldExtractor extracting from fields
in a oneof by [@&#8203;nvx](https://togithub.com/nvx) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/339](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/339)
- Request Logging by
[@&#8203;yashrsharma44](https://togithub.com/yashrsharma44) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/311](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/311)
- Bug fix for data race by
[@&#8203;yashrsharma44](https://togithub.com/yashrsharma44) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/354](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/354)
- make ratelimit interface context aware by
[@&#8203;xinxiao](https://togithub.com/xinxiao) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/367](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/367)
- Add error param to the decider method of logging middleware by
[@&#8203;yashrsharma44](https://togithub.com/yashrsharma44) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/372](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/372)
- \[v2] Add skip interceptor by
[@&#8203;XSAM](https://togithub.com/XSAM) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/364](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/364)
- Chain middleware by
[@&#8203;drewwells](https://togithub.com/drewwells) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/385](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/385)
- Update travis ci badget to Github actions badge. by
[@&#8203;drewwells](https://togithub.com/drewwells) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/384](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/384)
- Upgraded proto related deps: grpc and protobuf; removed gogo from
core. by [@&#8203;bwplotka](https://togithub.com/bwplotka) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/321](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/321)
- improve v2 rate-limiter by
[@&#8203;MalloZup](https://togithub.com/MalloZup) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/380](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/380)
- Moved to buf; Added buf lint; Fixed ping service to match standards; …
by [@&#8203;bwplotka](https://togithub.com/bwplotka) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/383](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/383)
- Add timer interface for OpenMetrics(Prometheus) Provider by
[@&#8203;yashrsharma44](https://togithub.com/yashrsharma44) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/387](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/387)
- \[Rate-limit provider]: Add token bucket implementation of
rate-limiter by [@&#8203;MalloZup](https://togithub.com/MalloZup) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/386](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/386)
- Add OpenMetrics(Prometheus) in the provider module by
[@&#8203;yashrsharma44](https://togithub.com/yashrsharma44) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/379](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/379)
- v2: Client unary interceptor timeout on v2 branch by
[@&#8203;instabledesign](https://togithub.com/instabledesign) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/330](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/330)
- add onRetryCallback callback function by
[@&#8203;shamil](https://togithub.com/shamil) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/405](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/405)
- v2: validator support for protoc-gen-validate 0.6.0 by
[@&#8203;danielhochman](https://togithub.com/danielhochman) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/418](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/418)
- v2: Refactor metrics interceptor and fix tests by
[@&#8203;ash2k](https://togithub.com/ash2k) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/413](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/413)
- Support customization of timestamp format (v2 branch) by
[@&#8203;stanhu](https://togithub.com/stanhu) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/399](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/399)
- Fixed misleading comments in the interceptor file by
[@&#8203;iamrajiv](https://togithub.com/iamrajiv) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/424](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/424)
- v2: Switch from github.com/go-kit/kit to github.com/go-kit/log
interfaces by [@&#8203;liggitt](https://togithub.com/liggitt) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/427](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/427)
- v2: Add support for the phuslog logging provider by
[@&#8203;ogimenezb](https://togithub.com/ogimenezb) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/425](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/425)
- v2:providers/zap: fix caller annotation by
[@&#8203;jkawamoto](https://togithub.com/jkawamoto) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/432](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/432)
- Added Dependabot by [@&#8203;iamrajiv](https://togithub.com/iamrajiv)
in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/376](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/376)
- Added a Copyright check in the Makefile by
[@&#8203;yashrsharma44](https://togithub.com/yashrsharma44) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/420](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/420)
- Cleanup v2 with some updates by
[@&#8203;yashrsharma44](https://togithub.com/yashrsharma44) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/419](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/419)
- openmetrics: forward server context by
[@&#8203;amenzhinsky](https://togithub.com/amenzhinsky) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/434](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/434)
- recovery: change the default behavior by
[@&#8203;amenzhinsky](https://togithub.com/amenzhinsky) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/439](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/439)
- Add all-validator support by
[@&#8203;leventeliu](https://togithub.com/leventeliu) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/443](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/443)
- Remove backoffutils and added the files to retry package by
[@&#8203;yashrsharma44](https://togithub.com/yashrsharma44) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/390](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/390)
- v2:interceptors/logging: allow to separate request response payload
logging by [@&#8203;michaljemala](https://togithub.com/michaljemala) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/442](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/442)
- Removed tags; Simplified interceptor code; Added logging fields
editability. by [@&#8203;bwplotka](https://togithub.com/bwplotka) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/394](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/394)
- InterceptorTestSuite client connection optimize by
[@&#8203;HUSTtoKTH](https://togithub.com/HUSTtoKTH) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/455](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/455)
- Remove opentracing from go.mod by
[@&#8203;jpkrohling](https://togithub.com/jpkrohling) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/477](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/477)
- Replace two old Go versions with two new ones by
[@&#8203;jpkrohling](https://togithub.com/jpkrohling) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/478](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/478)
- Move util/metautils to root-level package metadata, fixes
[#&#8203;392](https://togithub.com/grpc-ecosystem/go-grpc-middleware/issues/392)
by [@&#8203;rahulkhairwar](https://togithub.com/rahulkhairwar) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/474](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/474)
- Remove data race from zerolog provider by
[@&#8203;ecordell](https://togithub.com/ecordell) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/487](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/487)
- Update provider/kit by
[@&#8203;metalmatze](https://togithub.com/metalmatze) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/490](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/490)
- Refactor tracing interceptor by
[@&#8203;XSAM](https://togithub.com/XSAM) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/450](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/450)
- Add opentracing provider by [@&#8203;XSAM](https://togithub.com/XSAM)
in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/492](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/492)
- update phuslog to fix typo by
[@&#8203;ogimenezb](https://togithub.com/ogimenezb) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/499](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/499)
- Added logr as logging Library provider by
[@&#8203;mcdoker18](https://togithub.com/mcdoker18) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/510](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/510)
- ✨ new feat: selector middleware by
[@&#8203;aimuz](https://togithub.com/aimuz) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/511](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/511)
- Add 1.18.x and 1.19.x unit tests by
[@&#8203;aimuz](https://togithub.com/aimuz) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/513](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/513)
- change the doc.go to the latest format by
[@&#8203;aimuz](https://togithub.com/aimuz) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/512](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/512)
- fix provider examples by
[@&#8203;forsaken628](https://togithub.com/forsaken628) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/529](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/529)
- docs: add `logging.InjectFields` usage description by
[@&#8203;aimuz](https://togithub.com/aimuz) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/541](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/541)
- Bump golang.org/x/net from 0.0.0-20201021035429-f5854403a974 to 0.7.0
by [@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/537](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/537)
- v2: All for v2: Exemplars, Cleanup, Docs, Lint, Proto upgrades and
more by [@&#8203;bwplotka](https://togithub.com/bwplotka) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/543](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/543)
- \[interceptors/validator] feat: add error logging in validator by
[@&#8203;rohanraj7316](https://togithub.com/rohanraj7316) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/544](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/544)
- fix auto-generated docs by
[@&#8203;peczenyj](https://togithub.com/peczenyj) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/548](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/548)
- fix vulnerability GO-2022-0603 by
[@&#8203;peczenyj](https://togithub.com/peczenyj) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/549](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/549)
- add support to trace on grpc_logrus.DefaultMessageProducer by
[@&#8203;peczenyj](https://togithub.com/peczenyj) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/547](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/547)
- Simplified logging middleware; Fields are now "any" type; Moved
logging providers to examples only. by
[@&#8203;bwplotka](https://togithub.com/bwplotka) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/552](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/552)
- Removed deciders; Cleaned up validators. by
[@&#8203;bwplotka](https://togithub.com/bwplotka) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/554](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/554)
- Adjustments to README and consistency of callback options. by
[@&#8203;bwplotka](https://togithub.com/bwplotka) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/555](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/555)
- Merge v2 into main (with -X theirs) by
[@&#8203;bwplotka](https://togithub.com/bwplotka) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/556](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/556)
- Bump golang.org/x/net from 0.5.0 to 0.7.0 in /providers/prometheus by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/561](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/561)
- Fix overwritten logger in zerolog example by
[@&#8203;longshine](https://togithub.com/longshine) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/574](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/574)
- Changed for for mapping fields, different var for logger in zap
example by [@&#8203;MichalFikejs](https://togithub.com/MichalFikejs) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/581](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/581)
- cleanup: no cap definition required by
[@&#8203;aimuz](https://togithub.com/aimuz) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/582](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/582)
- providers/prometheus: Add WithHistogramOpts for native histograms by
[@&#8203;metalmatze](https://togithub.com/metalmatze) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/584](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/584)
- fix: Refactor logger initialization in example_test.go by
[@&#8203;aimuz](https://togithub.com/aimuz) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/580](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/580)
- Minor code cleanups by [@&#8203;ash2k](https://togithub.com/ash2k) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/586](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/586)
- fix prometheus interceptors not converting context errors to gRPC
codes by [@&#8203;vtermanis](https://togithub.com/vtermanis) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/571](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/571)
- Update README.md by [@&#8203;bwplotka](https://togithub.com/bwplotka)
in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/600](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/600)
- Update PULL_REQUEST_TEMPLATE.md by
[@&#8203;bwplotka](https://togithub.com/bwplotka) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/601](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/601)
- Add Client rate limit interceptors 520 by
[@&#8203;rahulkhairwar](https://togithub.com/rahulkhairwar) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/599](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/599)
- Use default go errors package instead of github.com/pkg/errors by
[@&#8203;rifkyazizf](https://togithub.com/rifkyazizf) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/608](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/608)
- fix bug : should drain channel of timer after stop by
[@&#8203;ikenchina](https://togithub.com/ikenchina) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/612](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/612)
- feat: add interceptor for bufbuild/protovalidate by
[@&#8203;gvencadze](https://togithub.com/gvencadze) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/614](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/614)
- Enhancement: Introduce Option Interface for Future Interceptor
Customization by
[@&#8203;elliotmjackson](https://togithub.com/elliotmjackson) in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/615](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/615)

#### New Contributors

- [@&#8203;irridia](https://togithub.com/irridia) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/299](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/299)
- [@&#8203;xinxiao](https://togithub.com/xinxiao) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/367](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/367)
- [@&#8203;XSAM](https://togithub.com/XSAM) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/364](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/364)
- [@&#8203;MalloZup](https://togithub.com/MalloZup) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/380](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/380)
- [@&#8203;instabledesign](https://togithub.com/instabledesign) made
their first contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/330](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/330)
- [@&#8203;shamil](https://togithub.com/shamil) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/405](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/405)
- [@&#8203;ash2k](https://togithub.com/ash2k) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/413](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/413)
- [@&#8203;ogimenezb](https://togithub.com/ogimenezb) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/425](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/425)
- [@&#8203;amenzhinsky](https://togithub.com/amenzhinsky) made their
first contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/434](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/434)
- [@&#8203;leventeliu](https://togithub.com/leventeliu) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/443](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/443)
- [@&#8203;michaljemala](https://togithub.com/michaljemala) made their
first contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/442](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/442)
- [@&#8203;HUSTtoKTH](https://togithub.com/HUSTtoKTH) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/455](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/455)
- [@&#8203;jpkrohling](https://togithub.com/jpkrohling) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/477](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/477)
- [@&#8203;rahulkhairwar](https://togithub.com/rahulkhairwar) made their
first contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/474](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/474)
- [@&#8203;ecordell](https://togithub.com/ecordell) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/487](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/487)
- [@&#8203;metalmatze](https://togithub.com/metalmatze) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/490](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/490)
- [@&#8203;mcdoker18](https://togithub.com/mcdoker18) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/510](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/510)
- [@&#8203;aimuz](https://togithub.com/aimuz) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/511](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/511)
- [@&#8203;forsaken628](https://togithub.com/forsaken628) made their
first contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/529](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/529)
- [@&#8203;dependabot](https://togithub.com/dependabot) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/537](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/537)
- [@&#8203;rohanraj7316](https://togithub.com/rohanraj7316) made their
first contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/544](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/544)
- [@&#8203;peczenyj](https://togithub.com/peczenyj) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/548](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/548)
- [@&#8203;longshine](https://togithub.com/longshine) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/574](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/574)
- [@&#8203;MichalFikejs](https://togithub.com/MichalFikejs) made their
first contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/581](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/581)
- [@&#8203;vtermanis](https://togithub.com/vtermanis) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/571](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/571)
- [@&#8203;rifkyazizf](https://togithub.com/rifkyazizf) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/608](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/608)
- [@&#8203;ikenchina](https://togithub.com/ikenchina) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/612](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/612)
- [@&#8203;gvencadze](https://togithub.com/gvencadze) made their first
contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/614](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/614)
- [@&#8203;elliotmjackson](https://togithub.com/elliotmjackson) made
their first contribution in
[https://github.com/grpc-ecosystem/go-grpc-middleware/pull/615](https://togithub.com/grpc-ecosystem/go-grpc-middleware/pull/615)

**Full Changelog**:
grpc-ecosystem/go-grpc-middleware@v1.4.0...v2.0.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/jaegertracing/jaeger).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zOTMuMCIsInVwZGF0ZWRJblZlciI6IjM3LjM5My4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJjaGFuZ2Vsb2c6ZGVwZW5kZW5jaWVzIl19-->

---------

Signed-off-by: Mend Renovate <[email protected]>
Signed-off-by: Yuri Shkuro <[email protected]>
Co-authored-by: Yuri Shkuro <[email protected]>
Co-authored-by: Yuri Shkuro <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants