grpc / grpc/grpc-rust

Using (named) interceptors changes the request type from gRPC proto to HTTP (?) when upgrading tonic 0.4->0.5.2

Open
#741 1 comment 0 reactions 1 assignee Claimed by @davidpdrsn View on GitHub
A-tonic
Dominant language
Rust
Stars
12.5k
Forks
1.3k
Avg merge
4d 7h
Merged PRs (30d)
24

Description

## Bug Report

### Version

├── tonic v0.5.2
└── tonic-build v0.5.2

### Platform

64 bit Windows

### Crates

tonic

### Description

My old code:

```
let mut client = Some(
my_service::MyService::with_interceptor(
channel,
move |mut req: Request<()>| {
req.metadata_mut()
.insert("authorization", token_header.clone());
Ok(req)
},
),
);
```

my new code:

```
#[derive(Clone)]
struct AuthBearerInterceptor {
auth_header: MetadataValue,
}

impl tonic::service::Interceptor for AuthBearerInterceptor {
fn call(&mut self, request: tonic::Request<()>) -> Result, tonic::Status> {
let mut result = tonic::Request::new(request.into_inner());
result
.metadata_mut()
.insert("authorization", self.auth_header.clone());
Ok(result)
}
}

...
let mut client = Some(
my_service::MyService::with_interceptor(
channel,
AuthBearerInterceptor { auth_header },
),
);
```

Request against my Go server break after upgrading and changing to a named interceptor however. Here is what requests looked like with 0.4 when it worked:

`{"file":"external/com_github_grpc_ecosystem_go_grpc_middleware/logging/logrus/options.go:211","func":"github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus.DefaultMessageProducer","grpc.code":"OK","grpc.method":"FindJiraTasks","grpc.service":"my_service.MyService","grpc.start_time":"2021-08-11T ││ 12:06:18Z","grpc.time_ms":961.586,"level":"info","msg":"finished unary call with code OK","peer.address":"","span.kind":"server","system":"grpc","time":"2021-08-11T12:06:19Z"}`

Here is what it looks like with 0.5.2. and the above new code:

`{"content_length":-1,"elapsed":"0.022 ms","file":"lib/embark-server/go/middleware/middleware.go:97","func":"github.com//middleware.Logger.func1.1","level":"info","method":"POST","msg":"request processed","path":"/my_service.MyService/FindJiraTasks","protocol":"HT ││ TP/2.0","remote_address":"","status":404,"time":"2021-08-11T12:04:45Z"}`

It appears my server gets an entirely different request type if I use an interceptor. If I do set headers directly on the request however, everything works fine.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.