keystone.cache.redis config arguments url conflict host and port

Bug #1618705 reported by chuang
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
OpenStack Identity (keystone)
Invalid
Low
Unassigned

Bug Description

version: 8.1.3.dev1
branch: stable/liberty

in my keystone.conf
```
[cache]
config_prefix = cache.keystone
expiration_time = 600
backend = dogpile.cache.redis
backend_argument = host:127.0.0.1
backend_argument = port:6380
backend_argument = db:0
```

Using this keystone.conf is not working.
```
2016-08-31 13:46:56.552 10387 CRITICAL keystone [-] AttributeError: 'list' object has no attribute 'decode'
2016-08-31 13:46:56.552 10387 ERROR keystone Traceback (most recent call last):
2016-08-31 13:46:56.552 10387 ERROR keystone File "/home/chuangwang/.ostack/bin/keystone-wsgi-admin", line 34, in <module>
2016-08-31 13:46:56.552 10387 ERROR keystone server = wss.make_server('', args.port, initialize_admin_application())
2016-08-31 13:46:56.552 10387 ERROR keystone File "/home/chuangwang/.ostack/lib/python3.5/site-packages/keystone/server/wsgi.py", line 78, in initialize_admin_application
2016-08-31 13:46:56.552 10387 ERROR keystone return initialize_application('admin')
2016-08-31 13:46:56.552 10387 ERROR keystone File "/home/chuangwang/.ostack/lib/python3.5/site-packages/keystone/server/wsgi.py", line 64, in initialize_application
2016-08-31 13:46:56.552 10387 ERROR keystone startup_application_fn=loadapp)
2016-08-31 13:46:56.552 10387 ERROR keystone File "/home/chuangwang/.ostack/lib/python3.5/site-packages/keystone/server/common.py", line 49, in setup_backends
2016-08-31 13:46:56.552 10387 ERROR keystone drivers = backends.load_backends()
2016-08-31 13:46:56.552 10387 ERROR keystone File "/home/chuangwang/.ostack/lib/python3.5/site-packages/keystone/server/backends.py", line 33, in load_backends
2016-08-31 13:46:56.552 10387 ERROR keystone cache.configure_cache_region(cache.REGION)
2016-08-31 13:46:56.552 10387 ERROR keystone File "/home/chuangwang/.ostack/lib/python3.5/site-packages/keystone/common/cache/core.py", line 142, in configure_cache_region
2016-08-31 13:46:56.552 10387 ERROR keystone '%s.' % CONF.cache.config_prefix)
2016-08-31 13:46:56.552 10387 ERROR keystone File "/home/chuangwang/.ostack/lib/python3.5/site-packages/dogpile/cache/region.py", line 552, in configure_from_config
2016-08-31 13:46:56.552 10387 ERROR keystone "%swrap" % prefix, None),
2016-08-31 13:46:56.552 10387 ERROR keystone File "/home/chuangwang/.ostack/lib/python3.5/site-packages/dogpile/cache/region.py", line 417, in configure
2016-08-31 13:46:56.552 10387 ERROR keystone _config_prefix
2016-08-31 13:46:56.552 10387 ERROR keystone File "/home/chuangwang/.ostack/lib/python3.5/site-packages/dogpile/cache/api.py", line 81, in from_config_dict
2016-08-31 13:46:56.552 10387 ERROR keystone for key in config_dict
2016-08-31 13:46:56.552 10387 ERROR keystone File "/home/chuangwang/.ostack/lib/python3.5/site-packages/dogpile/cache/backends/redis.py", line 109, in __init__
2016-08-31 13:46:56.552 10387 ERROR keystone self.client = self._create_client()
2016-08-31 13:46:56.552 10387 ERROR keystone File "/home/chuangwang/.ostack/lib/python3.5/site-packages/dogpile/cache/backends/redis.py", line 129, in _create_client
2016-08-31 13:46:56.552 10387 ERROR keystone return redis.StrictRedis.from_url(**args)
2016-08-31 13:46:56.552 10387 ERROR keystone File "/home/chuangwang/.ostack/lib/python3.5/site-packages/redis/client.py", line 391, in from_url
2016-08-31 13:46:56.552 10387 ERROR keystone connection_pool = ConnectionPool.from_url(url, db=db, **kwargs)
2016-08-31 13:46:56.552 10387 ERROR keystone File "/home/chuangwang/.ostack/lib/python3.5/site-packages/redis/connection.py", line 774, in from_url
2016-08-31 13:46:56.552 10387 ERROR keystone url = urlparse(url)
2016-08-31 13:46:56.552 10387 ERROR keystone File "/usr/lib64/python3.5/urllib/parse.py", line 294, in urlparse
2016-08-31 13:46:56.552 10387 ERROR keystone url, scheme, _coerce_result = _coerce_args(url, scheme)
2016-08-31 13:46:56.552 10387 ERROR keystone File "/usr/lib64/python3.5/urllib/parse.py", line 114, in _coerce_args
2016-08-31 13:46:56.552 10387 ERROR keystone return _decode_args(args) + (_encode_result,)
2016-08-31 13:46:56.552 10387 ERROR keystone File "/usr/lib64/python3.5/urllib/parse.py", line 98, in _decode_args
2016-08-31 13:46:56.552 10387 ERROR keystone return tuple(x.decode(encoding, errors) if x else '' for x in args)
2016-08-31 13:46:56.552 10387 ERROR keystone File "/usr/lib64/python3.5/urllib/parse.py", line 98, in <genexpr>
2016-08-31 13:46:56.552 10387 ERROR keystone return tuple(x.decode(encoding, errors) if x else '' for x in args)
2016-08-31 13:46:56.552 10387 ERROR keystone AttributeError: 'list' object has no attribute 'decode'
2016-08-31 13:46:56.552 10387 ERROR keystone
```

Therefore, I view the code, find the reason.

Although I have not configured the `url` of `backend_argument`, the code sets the default `url` values `CONF.cache.memcache_servers`(file `keystone/common/cache/core.py`, line 112-113).

Therefore, the variable of `CONF.cache.memcache_servers` default value is `["localhost:11211"]`(file `keystone/common/config.py`, line 356-359).

So, when the code runs after `build_cache_conf` (file `keystone/common/cache/core.py`, line 139), the configuration of `cache` contain:
```
url = ["localhost:11211"]
host = "127.0.0.1"
port = 6380
db = 0
```

I use the cache backend `dogpile.cache.redis`, when the code is configured the `url` argument and creates `redis_client`, will use the function `StrictRedis.from_url` and `url` argument, and ignore the argument `host`,`port` and `db`.

If I will use the cache backend `dogpile.cache.redis`, I must configure the `keystone.conf`
```
[cache]
config_prefix = cache.keystone
expiration_time = 600
backend = dogpile.cache.redis
backend_argument = url:redis://192.168.7.51:6380/0
```

chuang (nashuiliang)
description: updated
Changed in keystone:
importance: Undecided → Medium
status: New → Confirmed
Changed in keystone:
status: Confirmed → New
importance: Medium → Undecided
tags: added: caching
tags: added: configuration office-hours
Changed in keystone:
status: New → Triaged
importance: Undecided → Low
milestone: none → pike-3
Revision history for this message
Lance Bragstad (lbragstad) wrote :

Keystone doesn't use these options directly. Instead, they are registered as options of the oslo.cache library [0]. Marking this as invalid since I think the fix, if any, would have to come from oslo.cache.

[0] https://github.com/openstack/oslo.cache/blob/cfe395f980603040ec40f9e6cf0a98a952f981ad/oslo_cache/_opts.py#L51-L55

Changed in keystone:
status: Triaged → Invalid
Revision history for this message
Lance Bragstad (lbragstad) wrote :

Please feel free to reopen the issue if the problem resurfaces.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.