)]}'
{"tempest/common/rest_client.py":[{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"04a3e4458cf09a902c8ca95b686d3143b1185880","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            body \u003d json.loads(body)"},{"line_number":106,"context_line":"            raise exceptions.BadRequest(body[\u0027badRequest\u0027][\u0027message\u0027])"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        if resp.status \u003d\u003d 409:"},{"line_number":109,"context_line":"            raise exceptions.Duplicate(body)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        if resp.status \u003d\u003d 413:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAD3%2F%2F%2FoE%3D","line":108,"updated":"2012-01-09 23:15:04.000000000","message":"For which API is a 409 a duplicate? From the Nova API, a 409 in general means the server is already taking an action and can\u0027t process the requested API call, for example trying to resize a rebuilding server. If we have response codes used differently by different portions of the API, we may want to handle these requests accordingly in each client.","commit_id":"c4b1104e349a7530831308672556ff3892f5117c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d23bedb5313a819e5fc27166a56af729c42e74fe","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            body \u003d json.loads(body)"},{"line_number":106,"context_line":"            raise exceptions.BadRequest(body[\u0027badRequest\u0027][\u0027message\u0027])"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        if resp.status \u003d\u003d 409:"},{"line_number":109,"context_line":"            raise exceptions.Duplicate(body)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        if resp.status \u003d\u003d 413:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAD3%2F%2F%2FKE%3D","line":108,"in_reply_to":"AAAAD3%2F%2F%2FoE%3D","updated":"2012-01-11 14:41:13.000000000","message":"The Images API returns 409 Conflicts when primary keys are violated:\n\nhttp://glance.openstack.org/glanceapi.html\n\nThe Compute API apparently does not ever have any duplicates since it does not allow the user to specify a primary key... but it uses 409 Conflict for \"backupOrResizeInProgress\" errors.\n\nThe Swift API returns a 409 when trying to delete a container that is not empty but otherwise does not return a 409 on POST/PUT objects because it simply overwrites the object if the object is already in the store.\n\nIndeed, the AWS API raises 409 Conflict when primary keys are violated:\n\nhttps://forums.aws.amazon.com/thread.jspa?threadID\u003d63827\n\nIn general, it\u0027s a pretty common thing to return 409 Conflict for duplicate records in REST APIs.\n\nhttp://stackoverflow.com/questions/3290182/rest-http-status-codes\n\nAll in all, I\u0027ve removed this as it is clearly confusing :)\n\nCheers,\n-jay","commit_id":"c4b1104e349a7530831308672556ff3892f5117c"}],"tempest/services/nova/json/servers_client.py":[{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"04a3e4458cf09a902c8ca95b686d3143b1185880","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            server_status \u003d body[\u0027status\u0027]"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"            if server_status \u003d\u003d \u0027ERROR\u0027:"},{"line_number":145,"context_line":"                raise exceptions.BuildErrorException(server_id\u003dservice_id)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"            if int(time.time()) - start \u003e\u003d self.build_timeout:"},{"line_number":148,"context_line":"                message \u003d \u0027Server %s failed to reach ACTIVE status within the \\"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAD3%2F%2F%2FoQ%3D","line":145,"updated":"2012-01-09 23:15:04.000000000","message":"I think you meant for this to be server_id\u003dserver_id.  I don\u0027t see a variable called service_id.","commit_id":"c4b1104e349a7530831308672556ff3892f5117c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d23bedb5313a819e5fc27166a56af729c42e74fe","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            server_status \u003d body[\u0027status\u0027]"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"            if server_status \u003d\u003d \u0027ERROR\u0027:"},{"line_number":145,"context_line":"                raise exceptions.BuildErrorException(server_id\u003dservice_id)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"            if int(time.time()) - start \u003e\u003d self.build_timeout:"},{"line_number":148,"context_line":"                message \u003d \u0027Server %s failed to reach ACTIVE status within the \\"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAD3%2F%2F%2FKA%3D","line":145,"in_reply_to":"AAAAD3%2F%2F%2FoQ%3D","updated":"2012-01-11 14:41:13.000000000","message":"Done","commit_id":"c4b1104e349a7530831308672556ff3892f5117c"}],"tempest/tests/test_flavors.py":[{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"b3c9f25447521a8631606e949fef6ab41407c2d8","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"from nose.plugins.attrib import attr"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"from temptest import exceptions"},{"line_number":6,"context_line":"from tempest import openstack"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2FtM%3D","line":5,"updated":"2012-01-09 21:16:06.000000000","message":"typo. tempest instead of temptest","commit_id":"baadeaa8ea6d4870202e5fcd5fc889ed81c3b2c3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7d4a182311cf441dd987a1e9e5ef4735311bf4d2","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"from nose.plugins.attrib import attr"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"from temptest import exceptions"},{"line_number":6,"context_line":"from tempest import openstack"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2Fqg%3D","line":5,"in_reply_to":"AAAAD3%2F%2F%2FtM%3D","updated":"2012-01-09 22:13:28.000000000","message":"Done","commit_id":"baadeaa8ea6d4870202e5fcd5fc889ed81c3b2c3"}],"tempest/tests/test_list_servers.py":[{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"b3c9f25447521a8631606e949fef6ab41407c2d8","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"class skip_unless_has_attr(object):"},{"line_number":11,"context_line":"    \"\"\""},{"line_number":12,"context_line":"    Decorator that skips a test if test does"},{"line_number":13,"context_line":"    not have specified attribute."},{"line_number":14,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2FtE%3D","line":11,"updated":"2012-01-09 21:16:06.000000000","message":"Fine for now, but since this is good reusable code, we should probably have a general decorators class/directory so that they are easily reusable.","commit_id":"baadeaa8ea6d4870202e5fcd5fc889ed81c3b2c3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7d4a182311cf441dd987a1e9e5ef4735311bf4d2","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"class skip_unless_has_attr(object):"},{"line_number":11,"context_line":"    \"\"\""},{"line_number":12,"context_line":"    Decorator that skips a test if test does"},{"line_number":13,"context_line":"    not have specified attribute."},{"line_number":14,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2Fqk%3D","line":11,"in_reply_to":"AAAAD3%2F%2F%2FtE%3D","updated":"2012-01-09 22:13:28.000000000","message":"Yep, planned on it at a later patch","commit_id":"baadeaa8ea6d4870202e5fcd5fc889ed81c3b2c3"}]}
