error using generated pagination links for Projects collection

Bug #1665780 reported by Thomas Maddox
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
craton
Fix Released
High
Thomas Maddox

Bug Description

It looks like the marker paramter's value being a UUID is having an issue:

Example recreation:

$ curl -s "http://127.0.0.1:8080/v1/projects?sort_dir=asc&limit=30&sort_keys=created_at%2Cid" -H "Content-Type: application/json" -H "X-Auth-Token: demo_root" -H "X-Auth-User: demo_root" -H "X-Auth-Project: b9f10eca66ac4c279c139d01e65f96b4" | jq
{
  "links": [
    {
      "href": "http://127.0.0.1:8080/v1/projects?sort_dir=asc&limit=30&sort_keys=created_at%2Cid",
      "rel": "first"
    },
    {
      "href": "http://127.0.0.1:8080/v1/projects?sort_dir=asc&limit=30&sort_keys=created_at%2Cid",
      "rel": "prev"
    },
    {
      "href": "http://127.0.0.1:8080/v1/projects?sort_dir=asc&limit=30&sort_keys=created_at%2Cid",
      "rel": "self"
    },
    {
      "href": "http://127.0.0.1:8080/v1/projects?marker=b9f10eca-66ac-4c27-9c13-9d01e65f96b4&sort_dir=asc&limit=30&sort_keys=created_at%2Cid",
      "rel": "next"
    }
  ],
  "projects": [
    {
      "created_at": "2017-02-17T20:43:16.000000",
      "id": "b9f10eca-66ac-4c27-9c13-9d01e65f96b4",
      "name": "demo",
      "updated_at": "2017-02-17T20:43:16.000000"
    }
  ]
}
$ curl -s "http://127.0.0.1:8080/v1/projects?marker=b9f10eca-66ac-4c27-9c13-9d01e65f96b4&sort_dir=asc&limit=30&sort_keys=created_at%2Cid" -H "Content-Type: application/json" -H "X-Auth-Token: demo_root" -H "X-Auth-User: demo_root" -H "X-Auth-Project: b9f10eca66ac4c279c139d01e65f96b4"
A server error occurred. Please contact the administrator.

Traceback:

172.17.0.1 - - [17/Feb/2017 20:45:06] "GET /v1/projects?marker=b9f10eca-66ac-4c27-9c13-9d01e65f96b4&sort_dir=asc&limit=30&sort_keys=created_at%2Cid HTTP/1.1" 500 59
Traceback (most recent call last):
  File "/usr/lib/python3.5/wsgiref/handlers.py", line 137, in run
    self.result = application(self.environ, self.start_response)
  File "/craton/lib/python3.5/site-packages/webob/dec.py", line 131, in __call__
    resp = self.call_func(req, *args, **self.kwargs)
  File "/craton/lib/python3.5/site-packages/webob/dec.py", line 196, in call_func
    return self.func(req, *args, **kwargs)
  File "/craton/lib/python3.5/site-packages/oslo_middleware/request_id.py", line 37, in __call__
    response = req.get_response(self.application)
  File "/craton/lib/python3.5/site-packages/webob/request.py", line 1316, in send
    application, catch_exc_info=False)
  File "/craton/lib/python3.5/site-packages/webob/request.py", line 1280, in call_application
    app_iter = application(self.environ, start_response)
  File "/craton/lib/python3.5/site-packages/webob/dec.py", line 131, in __call__
    resp = self.call_func(req, *args, **self.kwargs)
  File "/craton/lib/python3.5/site-packages/webob/dec.py", line 196, in call_func
    return self.func(req, *args, **kwargs)
  File "/craton/lib/python3.5/site-packages/oslo_middleware/base.py", line 126, in __call__
    response = req.get_response(self.application)
  File "/craton/lib/python3.5/site-packages/webob/request.py", line 1316, in send
    application, catch_exc_info=False)
  File "/craton/lib/python3.5/site-packages/webob/request.py", line 1280, in call_application
    app_iter = application(self.environ, start_response)
  File "/craton/lib/python3.5/site-packages/flask/app.py", line 1994, in __call__
    return self.wsgi_app(environ, start_response)
  File "/craton/lib/python3.5/site-packages/flask/app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "/craton/lib/python3.5/site-packages/flask_restful/__init__.py", line 271, in error_router
    return original_handler(e)
  File "/craton/lib/python3.5/site-packages/flask/app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/craton/lib/python3.5/site-packages/flask/_compat.py", line 32, in reraise
    raise value.with_traceback(tb)
  File "/craton/lib/python3.5/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/craton/lib/python3.5/site-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/craton/lib/python3.5/site-packages/flask_restful/__init__.py", line 271, in error_router
    return original_handler(e)
  File "/craton/lib/python3.5/site-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/craton/lib/python3.5/site-packages/flask/_compat.py", line 32, in reraise
    raise value.with_traceback(tb)
  File "/craton/lib/python3.5/site-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/craton/lib/python3.5/site-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/craton/lib/python3.5/site-packages/flask_restful/__init__.py", line 477, in wrapper
    resp = resource(*args, **kwargs)
  File "/craton/lib/python3.5/site-packages/flask/views.py", line 84, in view
    return self.dispatch_request(*args, **kwargs)
  File "/craton/lib/python3.5/site-packages/flask_restful/__init__.py", line 587, in dispatch_request
    resp = meth(*args, **kwargs)
  File "/craton/lib/python3.5/site-packages/craton/api/v1/validators.py", line 243, in wrapper
    resp = view(*args, **kwargs)
  File "/craton/lib/python3.5/site-packages/craton/api/v1/validators.py", line 234, in wrapper
    return view(*args, **kwargs)
  File "/craton/lib/python3.5/site-packages/craton/api/v1/validators.py", line 214, in wrapper
    result = validator.validate(value)
  File "/craton/lib/python3.5/site-packages/craton/api/v1/validators.py", line 193, in validate
    value = self.type_convert(value)
  File "/craton/lib/python3.5/site-packages/craton/api/v1/validators.py", line 189, in type_convert
    result[k] = fun(values)
  File "/craton/lib/python3.5/site-packages/craton/api/v1/validators.py", line 169, in <lambda>
    'integer': lambda v: int(v[0]),
ValueError: invalid literal for int() with base 10: 'b9f10eca-66ac-4c27-9c13-9d01e65f96b4'

Changed in craton:
assignee: nobody → Thomas Maddox (thomas-maddox)
status: New → In Progress
Farid Saad (farid-saad)
Changed in craton:
milestone: none → v0.1.0
Changed in craton:
importance: Undecided → High
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to craton (master)

Reviewed: https://review.openstack.org/435599
Committed: https://git.openstack.org/cgit/openstack/craton/commit/?id=95c61074fbfe94570b9f8eac888f74a5cec1776f
Submitter: Jenkins
Branch: master

commit 95c61074fbfe94570b9f8eac888f74a5cec1776f
Author: Thomas Maddox <email address hidden>
Date: Fri Feb 17 21:22:15 2017 +0000

    Use String for Project ID in schema

    This patch sets the schema to accept a string
    for Project ID since it's actually a UUID

    Change-Id: Iad8733594ca83c3bc061017fd9eae6861f31ee5d
    Closes-Bug: 1665780

Changed in craton:
status: In Progress → Fix Released
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.