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

Add "isDecodable" option to middleware function call #141

Merged
merged 5 commits into from
Jun 13, 2023

Conversation

renaz6
Copy link
Member

@renaz6 renaz6 commented Jun 5, 2023

  • Adding isDecodable parameter to the echoFirstTraceNode function
  • Not all calls should be decoded into a wrp-message, this update takes this into account and allows for calls to the tracing middleware without having to decode the request.

@codecov
Copy link

codecov bot commented Jun 5, 2023

Codecov Report

Merging #141 (8bc6dc3) into main (7e49b82) will decrease coverage by 2.10%.
The diff coverage is 0.00%.

@@            Coverage Diff             @@
##             main     #141      +/-   ##
==========================================
- Coverage   71.55%   69.45%   -2.10%     
==========================================
  Files           4        4              
  Lines         232      239       +7     
==========================================
  Hits          166      166              
- Misses         61       68       +7     
  Partials        5        5              
Flag Coverage Δ
unittests 69.45% <0.00%> (-2.10%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
middleware.go 12.96% <0.00%> (-1.94%) ⬇️

@renaz6 renaz6 requested review from denopink and johnabass June 5, 2023 20:18
Copy link
Contributor

@denopink denopink left a comment

Choose a reason for hiding this comment

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

just left a couple of questions, otherwise lgtm 🍻

middleware.go Outdated
Comment on lines 90 to 93
parts := strings.Split(f, ":")
// Remove leading space if there's any
parts[1] = strings.Trim(parts[1], " ")
tmp.Set(parts[0], parts[1])
Copy link
Contributor

Choose a reason for hiding this comment

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

do we want to check whether or not parts is at least len of 2 in case someone gives us a "bad" trace header (if that's possible)?

Copy link
Member Author

Choose a reason for hiding this comment

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

Updated!

middleware.go Show resolved Hide resolved
// EchoFirstNodeTraceInfo captures the trace information from a request, writes it
// back in the response headers, and adds it to the request's context
// It can also decode the request and save the resulting WRP object in the context if isDecodable is true
func EchoFirstTraceNodeInfo(propagator propagation.TextMapPropagator, isDecodable bool) func(http.Handler) http.Handler {
Copy link
Contributor

Choose a reason for hiding this comment

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

For future:

This is the kind of function that will probably grow over time, with new parameters. This makes the API brittle, since you wind up breaking existing clients when you change the function's signature.

If we add more parameters here, it would probably be better to move to either the builder pattern or the functional options pattern described by https://golang.cafe/blog/golang-functional-options-pattern.html.

An really trivial example:

type TraceOption func(*traceHandlerBuilder)

type traceHandlerBuilder {
    // whatever fields are necessary to build the handler
}

func (builder traceHandlerBuilder) build() func(http.Handler) http.Handler { ... }

func EchoFirstTraceNodeInfo(opts ...TraceOption) func(http.Handler) http.Handler {
   var builder traceHandlerBuilder
   for _, o := range opts {
        o(&builder)
   }

   return o.build()
}

Alternatively, you can expose the builder as part of your API. gorilla/mux takes this approach. The choice of which is really more about what will be more stable for a client.

Copy link
Member Author

Choose a reason for hiding this comment

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

Created a ticket for this work: #142

@renaz6 renaz6 self-assigned this Jun 13, 2023
Copy link
Contributor

@denopink denopink left a comment

Choose a reason for hiding this comment

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

lgtm! 🍻

@renaz6 renaz6 merged commit ae1ca8b into main Jun 13, 2023
14 of 16 checks passed
@renaz6 renaz6 deleted the tr1d1umCandlelightBug branch June 13, 2023 22:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants