go-kit / kit

A standard library for microservices.
https://gokit.io
MIT License
26.53k stars 2.43k forks source link

Add Error Handling for Canceled Contexts during request lifecycle #1277

Open gabizou opened 12 months ago

gabizou commented 12 months ago

What would you like?

Various lifecycle steps can cancel a context.Context, but it would be the responsibility of each consumer to verify the context isn't canceled. It would be great to add:


    for _, f := range s.before {
        ctx = f(ctx, r)
        if ctx.Err() == context.Canceled {
            err := context.Cause(ctx)
            s.errorHandler.Handle(ctx, err)
            s.errorEncoder(ctx, err, w)
            return
        }
    }

    request, err := s.dec(ctx, r)
    if err != nil {
        s.errorHandler.Handle(ctx, err)
        s.errorEncoder(ctx, err, w)
        return
    }
peterbourgon commented 12 months ago

it would be the responsibility of each consumer to verify the context isn't canceled

This is already the case -- consumers must always inspect the received context, and return if it is finished.

gabizou commented 12 months ago

That's fair, but would it make sense to treat the Server as a consumer of the context and "bail" if the context is finished early?

omrihq commented 4 months ago

@peterbourgon I'm curious if there's been any updates here? I'm running into this issue myself and wondering if we could bake cancellation if ctx.Err() == context.Canceled into the request lifecycle.

Thank you!