kragniz / kragniz/python-etcd3
python-etcd3 is incompatible with grpcio versions newer than 1.44.0 (1.45+)
- Dominant language
- Python
- Stars
- 450
- Forks
- 194
- PR merge metrics
- No merged PRs in 30d
Description
### What version of gRPC and what language are you using?
grpc v1.45.0
### What operating system (Linux, Windows,...) and version?
Ubuntu 20.04
### What runtime / compiler are you using (e.g. python version or version of gcc)
python 3.8.10
### What did you do?
Update grpc from 1.44.0 to 1.45.0 and run it against etcd v3 server with authentication enabled using python-etcd3 module.
### What did you expect to see?
No errors.
### What did you see instead?
```
>>> etcd = etcd3.client(host='etcd_host', port=2379, user='user', password='password')
>>> etcd.get('key_name')
Traceback (most recent call last):
File "", line 1, in
File "/venv-path/lib/python3.8/site-packages/etcd3/client.py", line 283, in get
range_response = self.get_response(key, **kwargs)
File "/venv-path/lib/python3.8/site-packages/etcd3/client.py", line 48, in handler
_translate_exception(exc)
File "/venv-path/lib/python3.8/site-packages/etcd3/client.py", line 46, in handler
return f(*args, **kwargs)
File "/venv-path/lib/python3.8/site-packages/etcd3/client.py", line 257, in get_response
return self.kvstub.Range(
File "/venv-path/lib/python3.8/site-packages/grpc/_channel.py", line 946, in __call__
return _end_unary_response_blocking(state, call, False, None)
File "/venv-path/lib/python3.8/site-packages/grpc/_channel.py", line 849, in _end_unary_response_blocking
raise _InactiveRpcError(state)
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
status = StatusCode.UNAUTHENTICATED
details = "Established channel does not have a sufficient security level to transfer call credential."
debug_error_string = "{"created":"@1652261814.087167077","description":"Error received from peer etcd_host:2379","file":"src/core/lib/surface/call.cc","file_line":952,"grpc_message":"Established channel does not have a sufficient security level to transfer call credential.","grpc_status":16}"
```
Contributor guide
Research direction
Reproduce the authenticated etcd3.client get() call with grpcio 1.44.0 and 1.45.0, then inspect etcd3/client.py at get(), get_response(), and the authentication-related RPC path shown in the traceback. Done means authenticated key reads complete without the security-level error on grpcio 1.45.0 and newer.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- distributed-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100