)]}'
{"guidelines/errors-example.json":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0ed502410c813500cddedfcbbd88d7eb4c775f3b","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    {"},{"line_number":4,"context_line":"      \"id\": \"d413ea12-dfcd-4009-8fad-229b475709f2\","},{"line_number":5,"context_line":"      \"code\": \"compute-1234-abcd\","},{"line_number":6,"context_line":"      \"status\": \"500\","},{"line_number":7,"context_line":"      \"title\": \"No valid host found.\","},{"line_number":8,"context_line":"      \"description\": \"No valid host found for this flavor.\","},{"line_number":9,"context_line":"      \"href\": \"http://example.org/errors#compute-1234-abcd\""}],"source_content_type":"application/json","patch_set":2,"id":"fa963961_fff2d86e","line":6,"updated":"2015-03-26 16:39:32.000000000","message":"For sake of not appearing like we are encouraging such things, I\u0027d prefer an error in the 4xx range, otherwise people will latch on to this and get distracted from the real point.","commit_id":"d1dfc4701680ad62a59ff7e01652fd6569d95a81"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"91178ef5143efdcf973e1161161bf23d14da631b","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    {"},{"line_number":4,"context_line":"      \"id\": \"d413ea12-dfcd-4009-8fad-229b475709f2\","},{"line_number":5,"context_line":"      \"code\": \"compute-1234-abcd\","},{"line_number":6,"context_line":"      \"status\": \"500\","},{"line_number":7,"context_line":"      \"title\": \"No valid host found.\","},{"line_number":8,"context_line":"      \"description\": \"No valid host found for this flavor.\","},{"line_number":9,"context_line":"      \"href\": \"http://example.org/errors#compute-1234-abcd\""}],"source_content_type":"application/json","patch_set":2,"id":"fa963961_bdb666da","line":6,"in_reply_to":"fa963961_fff2d86e","updated":"2015-03-27 21:26:33.000000000","message":"Done","commit_id":"d1dfc4701680ad62a59ff7e01652fd6569d95a81"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"79b654e61d07b4c0f2fc28a490b62e8b36bc11c4","unresolved":false,"context_lines":[{"line_number":2,"context_line":"  \"errors\": ["},{"line_number":3,"context_line":"    {"},{"line_number":4,"context_line":"      \"id\": \"1dc92f06-8ede-4fb4-8921-b507601fb59d\","},{"line_number":5,"context_line":"      \"code\": \"orchestration-7890-xkcd\","},{"line_number":6,"context_line":"      \"status\": \"418\","},{"line_number":7,"context_line":"      \"title\": \"The Stack could not be created.\","},{"line_number":8,"context_line":"      \"description\": \"The Stack could not be created because of error(s) in other parts of the system.\","}],"source_content_type":"application/json","patch_set":4,"id":"da9b358b_e292cd9e","line":5,"updated":"2015-04-01 07:54:33.000000000","message":"If the \u0027code\u0027 string here would be used as unique and specific error code for clients, I prefer the example here could be more readable, like \u0027orchestration.create.failed\u0027(this is bad also, hah, I mean it need a bit readable here)","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4edf31a97eb33bd0640b8d522420a76999587d52","unresolved":false,"context_lines":[{"line_number":4,"context_line":"      \"id\": \"1dc92f06-8ede-4fb4-8921-b507601fb59d\","},{"line_number":5,"context_line":"      \"code\": \"orchestration-7890-xkcd\","},{"line_number":6,"context_line":"      \"status\": \"418\","},{"line_number":7,"context_line":"      \"title\": \"The Stack could not be created.\","},{"line_number":8,"context_line":"      \"description\": \"The Stack could not be created because of error(s) in other parts of the system.\","},{"line_number":9,"context_line":"      \"href\": \"http://example.org/errors#orchestration-7890-xkcd\""},{"line_number":10,"context_line":"    },"}],"source_content_type":"application/json","patch_set":4,"id":"9aa53dc9_57e17499","line":7,"updated":"2015-04-07 17:47:10.000000000","message":"titles probably shouldn\u0027t be punctuated by periods?","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"90b101dde8e659df317ba3ea8ef167005186aa9e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"      \"id\": \"1dc92f06-8ede-4fb4-8921-b507601fb59d\","},{"line_number":5,"context_line":"      \"code\": \"orchestration-7890-xkcd\","},{"line_number":6,"context_line":"      \"status\": \"418\","},{"line_number":7,"context_line":"      \"title\": \"The Stack could not be created.\","},{"line_number":8,"context_line":"      \"description\": \"The Stack could not be created because of error(s) in other parts of the system.\","},{"line_number":9,"context_line":"      \"href\": \"http://example.org/errors#orchestration-7890-xkcd\""},{"line_number":10,"context_line":"    },"}],"source_content_type":"application/json","patch_set":4,"id":"9aa53dc9_a719777b","line":7,"in_reply_to":"9aa53dc9_57e17499","updated":"2015-04-08 21:25:18.000000000","message":"Yep. I\u0027ll fix that when I upload a new patch set.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"d3dcdb86853fdd9236e17b0ebde76198bd0c2ed7","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    },"},{"line_number":11,"context_line":"    {"},{"line_number":12,"context_line":"      \"id\": \"d413ea12-dfcd-4009-8fad-229b475709f2\","},{"line_number":13,"context_line":"      \"code\": \"compute-1234-abcd\","},{"line_number":14,"context_line":"      \"status\": \"418\","},{"line_number":15,"context_line":"      \"title\": \"No valid host found.\","},{"line_number":16,"context_line":"      \"description\": \"No valid host found for flavor m1.xlarge.\","}],"source_content_type":"application/json","patch_set":4,"id":"baa041b7_46b18de0","line":13,"updated":"2015-04-06 10:39:07.000000000","message":"if we are really going to have a uuid on errors, then I think code should be of the format:\n\nservice:some-reasonable-string\n\ni.e.\n\nnova:unsupported-action-on-server\n\nThe rationale here is that the generic names like \u0027compute\u0027 \u0027network\u0027 \u0027metrics\u0027 may very much end up overloaded in OpenStack ecosystem. However \u0027nova\u0027 is one thing. Everything behind the nova namespace clearly is allocated by the nova project. \n\nI also think there is no reason to have 2 opaque ids. Make the code somewhere decypherable without looking things up online.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"4d8d7b5a7c02305203ac1e18a5860df1a704c0ab","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    },"},{"line_number":11,"context_line":"    {"},{"line_number":12,"context_line":"      \"id\": \"d413ea12-dfcd-4009-8fad-229b475709f2\","},{"line_number":13,"context_line":"      \"code\": \"compute-1234-abcd\","},{"line_number":14,"context_line":"      \"status\": \"418\","},{"line_number":15,"context_line":"      \"title\": \"No valid host found.\","},{"line_number":16,"context_line":"      \"description\": \"No valid host found for flavor m1.xlarge.\","}],"source_content_type":"application/json","patch_set":4,"id":"dac4157f_6cc6bf9b","line":13,"in_reply_to":"7aaa499b_19791c94","updated":"2015-04-21 22:01:57.000000000","message":"Thanks! I think it\u0027s best to wait for Patch Set 6 before commenting on that review.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"41a4fb168f5ac10b5710ef2f999cb349db88ea5a","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    },"},{"line_number":11,"context_line":"    {"},{"line_number":12,"context_line":"      \"id\": \"d413ea12-dfcd-4009-8fad-229b475709f2\","},{"line_number":13,"context_line":"      \"code\": \"compute-1234-abcd\","},{"line_number":14,"context_line":"      \"status\": \"418\","},{"line_number":15,"context_line":"      \"title\": \"No valid host found.\","},{"line_number":16,"context_line":"      \"description\": \"No valid host found for flavor m1.xlarge.\","}],"source_content_type":"application/json","patch_set":4,"id":"9aa53dc9_325e31ea","line":13,"in_reply_to":"9aa53dc9_016881f4","updated":"2015-04-06 17:31:31.000000000","message":"There is already \"title\" and \"descriptions\" fields that provide readable information about the error. In my opinion the code should just that, a code. I think the H100 style from Heroku and the LNK1103 style from MSFT are equivalent as far as codes.\n\nI would not add other stuff in the code field, an error code is an error code, short and easy to type in a search box is best.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"90b101dde8e659df317ba3ea8ef167005186aa9e","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    },"},{"line_number":11,"context_line":"    {"},{"line_number":12,"context_line":"      \"id\": \"d413ea12-dfcd-4009-8fad-229b475709f2\","},{"line_number":13,"context_line":"      \"code\": \"compute-1234-abcd\","},{"line_number":14,"context_line":"      \"status\": \"418\","},{"line_number":15,"context_line":"      \"title\": \"No valid host found.\","},{"line_number":16,"context_line":"      \"description\": \"No valid host found for flavor m1.xlarge.\","}],"source_content_type":"application/json","patch_set":4,"id":"9aa53dc9_642fedf6","line":13,"in_reply_to":"9aa53dc9_325e31ea","updated":"2015-04-08 21:25:18.000000000","message":"Think of it this way. The code is the *class* of error and would be searchable on the internet for general information for the user on what went wrong. Whereas, the id is the *instance* of the error and would be searchable in the log for very specific information for the operator on what went wrong.\n\nImagine this involving an email or chat exchange between user and operator and the key pieces of information passed between them are the code and the id. The code giving them both the general context of the error and the id giving them a specific, actionable identifier the operator can search the logs for (and timestamps would not be appropriate as that identifier).\n\nThere is value in having both pieces of information available to both user and operator.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"e8a534185b1fa39bb2ee1131d148951e5c3e8aa8","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    },"},{"line_number":11,"context_line":"    {"},{"line_number":12,"context_line":"      \"id\": \"d413ea12-dfcd-4009-8fad-229b475709f2\","},{"line_number":13,"context_line":"      \"code\": \"compute-1234-abcd\","},{"line_number":14,"context_line":"      \"status\": \"418\","},{"line_number":15,"context_line":"      \"title\": \"No valid host found.\","},{"line_number":16,"context_line":"      \"description\": \"No valid host found for flavor m1.xlarge.\","}],"source_content_type":"application/json","patch_set":4,"id":"9aa53dc9_6b760c40","line":13,"in_reply_to":"9aa53dc9_59c8c374","updated":"2015-04-06 15:48:34.000000000","message":"Yes, I think the id is not necessary. As far as codes, they need to be short and searchable. I like codes that have a short prefix (1-3 letters) plus a number. For example, an error code for the compute service could be CM1039. Users can then google \"openstack CM1039\" and they\u0027ll be on their way.\n\nSome implementations of this style of errors:\n\n- Heroku: https://devcenter.heroku.com/articles/error-codes\n- Microsoft C++ compiler: https://msdn.microsoft.com/en-us/library/fzaatbst.aspx","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"ac32675cb09e992e44312c565d94351ffb82f041","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    },"},{"line_number":11,"context_line":"    {"},{"line_number":12,"context_line":"      \"id\": \"d413ea12-dfcd-4009-8fad-229b475709f2\","},{"line_number":13,"context_line":"      \"code\": \"compute-1234-abcd\","},{"line_number":14,"context_line":"      \"status\": \"418\","},{"line_number":15,"context_line":"      \"title\": \"No valid host found.\","},{"line_number":16,"context_line":"      \"description\": \"No valid host found for flavor m1.xlarge.\","}],"source_content_type":"application/json","patch_set":4,"id":"9aa53dc9_016881f4","line":13,"in_reply_to":"9aa53dc9_6b760c40","updated":"2015-04-06 16:57:10.000000000","message":"+1 for no duplicate opaque ids\n\n+1 for Heroku example, because a code \"R12 exit time out\" could help user or ops locate the problem fast and programing in codes, like:\n\n    try:\n        ....stuff....\n    except NovaXXXError as e:\n        if e.belongs(\u0027R\u0027):\n            ....ignore....\n        elif e.belongs(\u0027L\u0027):\n            ....crush....\n\n-1 for Microsoft C++ compiler, leaving short codes only wastes everyone\u0027s time. We could find answers in google, but ops/users often need understand the reasons at first glance. Below example can\u0027t help us:\n\n\n    {\n        errors:[\n            {\n                \"code\":\"L11\"\n                \"href\":\"xxxxxxxx\"\n            },\n            {\n                \"code\":\"S22\"\n                \"href\":\"xxxxxxxx\"\n            },\n        ]\n    }\n\nwhat about this:\n\n    {\n        errors:[\n            {\n                \"code\":\"Orchestration: L11-stack-create-failed\"\n                \"description\":\"Not all instance build successfully\"\n                \"href\":\"http://example.org/errors#L11\"\n            },\n            {\n                \"code\":\"Compute: E22-no-vaild-host\"\n                \"description\":\"No vaild host found for flave x1.xlarge\"\n                \"href\":\"http://example.org/errors#E22\"\n            },\n        ]\n    }\n\nremove the \u0027id\u0027, \u0027status\u0027 and \u0027title\u0027 sections first, \u0027code\u0027 is what we\u0027re designing for, \u0027description\u0027 is a short explanation, and the link in \u0027href\u0027 have more examples and workarounds (checking logs, advice to migrate your instances or submit bugs) for you.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"90b101dde8e659df317ba3ea8ef167005186aa9e","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    },"},{"line_number":11,"context_line":"    {"},{"line_number":12,"context_line":"      \"id\": \"d413ea12-dfcd-4009-8fad-229b475709f2\","},{"line_number":13,"context_line":"      \"code\": \"compute-1234-abcd\","},{"line_number":14,"context_line":"      \"status\": \"418\","},{"line_number":15,"context_line":"      \"title\": \"No valid host found.\","},{"line_number":16,"context_line":"      \"description\": \"No valid host found for flavor m1.xlarge.\","}],"source_content_type":"application/json","patch_set":4,"id":"9aa53dc9_8419d18a","line":13,"in_reply_to":"9aa53dc9_6b760c40","updated":"2015-04-08 21:25:18.000000000","message":"As for the format of the code field. First let me reiterate from errors.rst that \"The example below is completely contrived.\" \n\nBut yes, I completely understand that people tend to take such examples and create implementations from them so it should match something close to reality. However, I\u0027m not sure what that reality is and this format is *not* intended to define what the actual format of the code field.\n\nFrom errors-schema.json \"code...An application-specific error code, expressed as a string value. MAY match error codes as defined by the Log Guidelines\".\n\nI was hoping to see the format for the code field be defined by the Logging WG. I was basing that hope on this email http://lists.openstack.org/pipermail/openstack-dev/2015-January/055619.html\n\nI\u0027m not exactly sure where the Logging WG is at with this stuff or if any progress has been made. I\u0027m going to reach out to them and ping them again to review this. If it turns out not much is happening there, we may have to move forward anyway.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":8434,"name":"Rochelle Grober","email":"rochelle.grober@huawei.com","username":"rockyg"},"change_message_id":"566529d7d51134277788a2c786fae514d7f30e46","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    },"},{"line_number":11,"context_line":"    {"},{"line_number":12,"context_line":"      \"id\": \"d413ea12-dfcd-4009-8fad-229b475709f2\","},{"line_number":13,"context_line":"      \"code\": \"compute-1234-abcd\","},{"line_number":14,"context_line":"      \"status\": \"418\","},{"line_number":15,"context_line":"      \"title\": \"No valid host found.\","},{"line_number":16,"context_line":"      \"description\": \"No valid host found for flavor m1.xlarge.\","}],"source_content_type":"application/json","patch_set":4,"id":"7aaa499b_19791c94","line":13,"in_reply_to":"9aa53dc9_6b760c40","updated":"2015-04-11 00:30:59.000000000","message":"The Error Codes spec patch from the Log WG just got posted for review:\nhttps://review.openstack.org/#/c/172552/3/specs/log_message_error-codes.rst,cm\nAnd I think will work well with this spec when comments are the two are brought to agreement.\nOperators want something they can remember when doing a web search.  So, for error codes in logs, they want to be able to remember prefixes and have a number of 5 or fewer digits to recall when searching.  Some of these requirements can be relaxed in developer and/or machine to machine context as long as they map back to the human readable/short term rememberable format for logs.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a130a22c9ce941f385536bd091e463c3a5b33bcc","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    },"},{"line_number":11,"context_line":"    {"},{"line_number":12,"context_line":"      \"id\": \"d413ea12-dfcd-4009-8fad-229b475709f2\","},{"line_number":13,"context_line":"      \"code\": \"compute-1234-abcd\","},{"line_number":14,"context_line":"      \"status\": \"418\","},{"line_number":15,"context_line":"      \"title\": \"No valid host found.\","},{"line_number":16,"context_line":"      \"description\": \"No valid host found for flavor m1.xlarge.\","}],"source_content_type":"application/json","patch_set":4,"id":"9aa53dc9_59c8c374","line":13,"in_reply_to":"baa041b7_46b18de0","updated":"2015-04-06 14:46:38.000000000","message":"Agree and disagree :)\n\nAgree with:\n\n * No point in having both a UUID identifier for an error as well as a string code\n * Making the string code human readable and easily understandable\n\nDisagree with:\n\n * Making it \"nova\" instead of \"compute\".\n\nThe reason I disagree with this is because we want the public API to be as independent of implementation details as possible (including project names). That\u0027s why the service type in the Keystone catalog is \"volume\", not \"cinder\", and \"network\", not \"neutron\".","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"eeaa3ee50e9a163f5245ffe31117ac0f014f56cf","unresolved":false,"context_lines":[{"line_number":9,"context_line":"      \"links\": ["},{"line_number":10,"context_line":"        {"},{"line_number":11,"context_line":"          \"rel\": \"help\","},{"line_number":12,"context_line":"          \"href\": \"TODO(sdague): example href\""},{"line_number":13,"context_line":"        }"},{"line_number":14,"context_line":"      ]"},{"line_number":15,"context_line":"    },"}],"source_content_type":"application/json","patch_set":8,"id":"da85f559_64b39d0b","line":12,"updated":"2015-11-13 18:18:29.000000000","message":"Sean, let\u0027s talk more about what an example could be. The docs.openstack.org site has had a terrible time with a single href that\u0027s in the glance API for example, where people kept moving it and we have a bunch of redirects. Also the \"namespace\" reference for the Compute API version 1.1 never resolved, and caused confusion. So are you thinking about a link to something installed with every deployment, or something on a central site?","commit_id":"b0e3c5cec87318422d32daa3e6bd3880f48f252d"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"a5fc6ef7fe299ec6d49cd70c370ffee30897480e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"      \"links\": ["},{"line_number":10,"context_line":"        {"},{"line_number":11,"context_line":"          \"rel\": \"help\","},{"line_number":12,"context_line":"          \"href\": \"TODO(sdague): example href\""},{"line_number":13,"context_line":"        }"},{"line_number":14,"context_line":"      ]"},{"line_number":15,"context_line":"    },"}],"source_content_type":"application/json","patch_set":8,"id":"da85f559_0972e27c","line":12,"in_reply_to":"da85f559_64b39d0b","updated":"2015-11-13 21:44:51.000000000","message":"Best to have this discussion in the follow on patch set from Sean.\n\nOr in #openstack-api or #openstack-sdks if you prefer :) until then.","commit_id":"b0e3c5cec87318422d32daa3e6bd3880f48f252d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"13648e3322dad34ec1ef3eb09f7bd2631452a5de","unresolved":false,"context_lines":[{"line_number":24,"context_line":"          \"rel\": \"help\","},{"line_number":25,"context_line":"          \"href\": \"TODO(sdague): example href\""},{"line_number":26,"context_line":"        }"},{"line_number":27,"context_line":"      ]"},{"line_number":28,"context_line":"    }"},{"line_number":29,"context_line":"  ]"},{"line_number":30,"context_line":"}"}],"source_content_type":"application/json","patch_set":8,"id":"ba8a016a_da778e38","line":27,"updated":"2015-11-17 23:58:53.000000000","message":"I\u0027d be OK with the \"links\" element like this, but I would prefer to use JSON+HAL [1] notation and structure for the _links collection which would look like this:\n\n \"_links\": {\n    \"help\": { \"href\": \"http://errors.openstack.org/{?code}\", \"templated\": true }\n },\n\n\n\n[1] https://tools.ietf.org/html/draft-kelly-json-hal-07","commit_id":"b0e3c5cec87318422d32daa3e6bd3880f48f252d"}],"guidelines/errors-schema.json":[{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"0671e83f9a30622e610d35d2b05d8d136625836d","unresolved":false,"context_lines":[{"line_number":5,"context_line":"  \"properties\": {"},{"line_number":6,"context_line":"    \"errors\": {"},{"line_number":7,"context_line":"      \"type\": \"array\","},{"line_number":8,"context_line":"      \"description\": \"An ordered list of errors with the most recent error last.\","},{"line_number":9,"context_line":"      \"items\": {"},{"line_number":10,"context_line":"        \"type\": \"object\","},{"line_number":11,"context_line":"        \"description\": \"Additional information about problems encountered while performing an operation.\","}],"source_content_type":"application/json","patch_set":2,"id":"fa963961_9f7cec21","line":8,"updated":"2015-03-26 16:34:14.000000000","message":"Now I\u0027m thinking put the most recent first. That way users always know they can just easily grab the first element of the array and start working with that. Presumably it\u0027s the most relevant.","commit_id":"d1dfc4701680ad62a59ff7e01652fd6569d95a81"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"91178ef5143efdcf973e1161161bf23d14da631b","unresolved":false,"context_lines":[{"line_number":5,"context_line":"  \"properties\": {"},{"line_number":6,"context_line":"    \"errors\": {"},{"line_number":7,"context_line":"      \"type\": \"array\","},{"line_number":8,"context_line":"      \"description\": \"An ordered list of errors with the most recent error last.\","},{"line_number":9,"context_line":"      \"items\": {"},{"line_number":10,"context_line":"        \"type\": \"object\","},{"line_number":11,"context_line":"        \"description\": \"Additional information about problems encountered while performing an operation.\","}],"source_content_type":"application/json","patch_set":2,"id":"fa963961_fdad0e89","line":8,"in_reply_to":"fa963961_9f7cec21","updated":"2015-03-27 21:26:33.000000000","message":"The more I think about it. The more I like most recent errors first. Clients can always rely on the 0th element being there.","commit_id":"d1dfc4701680ad62a59ff7e01652fd6569d95a81"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"0671e83f9a30622e610d35d2b05d8d136625836d","unresolved":false,"context_lines":[{"line_number":30,"context_line":"            \"type\": \"string\","},{"line_number":31,"context_line":"            \"description\": \"A human-readable explanation specific to this occurrence of the problem.\""},{"line_number":32,"context_line":"          },"},{"line_number":33,"context_line":"          \"href\": {"},{"line_number":34,"context_line":"            \"type\": \"string\","},{"line_number":35,"context_line":"            \"format\": \"uri\","},{"line_number":36,"context_line":"            \"description\": \"A URI that MAY yield further details about this particular occurrence of the problem.\""}],"source_content_type":"application/json","patch_set":2,"id":"fa963961_9fe74c12","line":33,"updated":"2015-03-26 16:34:14.000000000","message":"This could also be a standard \"links\" array to allow for multiple links. Could be useful if you had one link for the specific error and one link where you get support for the API.","commit_id":"d1dfc4701680ad62a59ff7e01652fd6569d95a81"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"0671e83f9a30622e610d35d2b05d8d136625836d","unresolved":false,"context_lines":[{"line_number":41,"context_line":"          \"status\","},{"line_number":42,"context_line":"          \"title\","},{"line_number":43,"context_line":"          \"description\","},{"line_number":44,"context_line":"          \"href\""},{"line_number":45,"context_line":"        ]"},{"line_number":46,"context_line":"      },"},{"line_number":47,"context_line":"      \"required\": ["}],"source_content_type":"application/json","patch_set":2,"id":"fa963961_bf5c50ee","line":44,"updated":"2015-03-26 16:34:14.000000000","message":"Is too much being required? Is href/links really required?","commit_id":"d1dfc4701680ad62a59ff7e01652fd6569d95a81"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"b0d445fa2503e6e77275594e9dab1605e401e52f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"          \"status\","},{"line_number":42,"context_line":"          \"title\","},{"line_number":43,"context_line":"          \"description\","},{"line_number":44,"context_line":"          \"href\""},{"line_number":45,"context_line":"        ]"},{"line_number":46,"context_line":"      },"},{"line_number":47,"context_line":"      \"required\": ["}],"source_content_type":"application/json","patch_set":2,"id":"fa963961_ff8c1837","line":44,"updated":"2015-03-26 16:33:35.000000000","message":"While I like this format, I think it may be a burden for projects to have to generate this format for every error from scratch. We need a library that can do this for them easily.","commit_id":"d1dfc4701680ad62a59ff7e01652fd6569d95a81"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"91178ef5143efdcf973e1161161bf23d14da631b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"          \"status\","},{"line_number":42,"context_line":"          \"title\","},{"line_number":43,"context_line":"          \"description\","},{"line_number":44,"context_line":"          \"href\""},{"line_number":45,"context_line":"        ]"},{"line_number":46,"context_line":"      },"},{"line_number":47,"context_line":"      \"required\": ["}],"source_content_type":"application/json","patch_set":2,"id":"fa963961_7d357e44","line":44,"in_reply_to":"fa963961_bf5c50ee","updated":"2015-03-27 21:26:33.000000000","message":"I\u0027m going to remove href as a required field. Making it required would encourage OpenStack contributors to throw any URL in there, even if it\u0027s not that helpful.","commit_id":"d1dfc4701680ad62a59ff7e01652fd6569d95a81"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"70d3ac6a7d5516d51f3c03cc2c3ea86806c245f7","unresolved":false,"context_lines":[{"line_number":41,"context_line":"          \"status\","},{"line_number":42,"context_line":"          \"title\","},{"line_number":43,"context_line":"          \"description\","},{"line_number":44,"context_line":"          \"href\""},{"line_number":45,"context_line":"        ]"},{"line_number":46,"context_line":"      },"},{"line_number":47,"context_line":"      \"required\": ["}],"source_content_type":"application/json","patch_set":2,"id":"fa963961_dfe714ab","line":44,"in_reply_to":"fa963961_bf5c50ee","updated":"2015-03-26 16:39:42.000000000","message":"What about code? Shouldn\u0027t the codes be consistent across projects, at least for generic errors that all projects need to handle? That\u0027s why I thought a lib would help.","commit_id":"d1dfc4701680ad62a59ff7e01652fd6569d95a81"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"91178ef5143efdcf973e1161161bf23d14da631b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"          \"status\","},{"line_number":42,"context_line":"          \"title\","},{"line_number":43,"context_line":"          \"description\","},{"line_number":44,"context_line":"          \"href\""},{"line_number":45,"context_line":"        ]"},{"line_number":46,"context_line":"      },"},{"line_number":47,"context_line":"      \"required\": ["}],"source_content_type":"application/json","patch_set":2,"id":"fa963961_7d0c5e94","line":44,"in_reply_to":"fa963961_dfe714ab","updated":"2015-03-27 21:26:33.000000000","message":"Yep. We\u0027ll be engaging the Logging WG about the code once we feel the design of this format is good enough for a broader audience.","commit_id":"d1dfc4701680ad62a59ff7e01652fd6569d95a81"},{"author":{"_account_id":10670,"name":"Michael McCune","email":"elmiko@redhat.com","username":"mimccune"},"change_message_id":"b926ca940f99b15f4ce8742d684671d9a8834cbe","unresolved":false,"context_lines":[{"line_number":41,"context_line":"          \"status\","},{"line_number":42,"context_line":"          \"title\","},{"line_number":43,"context_line":"          \"description\","},{"line_number":44,"context_line":"          \"href\""},{"line_number":45,"context_line":"        ]"},{"line_number":46,"context_line":"      },"},{"line_number":47,"context_line":"      \"required\": ["}],"source_content_type":"application/json","patch_set":2,"id":"fa963961_afd87a1e","line":44,"in_reply_to":"fa963961_dfe714ab","updated":"2015-03-27 14:20:46.000000000","message":"i think the lib is a nice idea","commit_id":"d1dfc4701680ad62a59ff7e01652fd6569d95a81"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"91178ef5143efdcf973e1161161bf23d14da631b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"          \"status\","},{"line_number":42,"context_line":"          \"title\","},{"line_number":43,"context_line":"          \"description\","},{"line_number":44,"context_line":"          \"href\""},{"line_number":45,"context_line":"        ]"},{"line_number":46,"context_line":"      },"},{"line_number":47,"context_line":"      \"required\": ["}],"source_content_type":"application/json","patch_set":2,"id":"fa963961_7de7bee4","line":44,"in_reply_to":"fa963961_ff8c1837","updated":"2015-03-27 21:26:33.000000000","message":"Agreed but that\u0027s an implementation detail. If somebody wants to create a library for this, that\u0027s great but not something the API WG would necessarily concern itself with.","commit_id":"d1dfc4701680ad62a59ff7e01652fd6569d95a81"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a4ad09892c3cbf65fadd0cc977e881c418d7d686","unresolved":false,"context_lines":[{"line_number":45,"context_line":"      },"},{"line_number":46,"context_line":"      \"required\": ["},{"line_number":47,"context_line":"        \"error\""},{"line_number":48,"context_line":"      ]"},{"line_number":49,"context_line":"    }"},{"line_number":50,"context_line":"  },"},{"line_number":51,"context_line":"  \"required\": ["}],"source_content_type":"application/json","patch_set":3,"id":"da9b358b_2cdebf6d","line":48,"updated":"2015-03-30 12:43:35.000000000","message":"No such property \"error\" exists. I think you need to remove this block above, as I think the required \"errors\" property below is really what you meant?","commit_id":"8aa2d5135a01b0e52153b5ec8f5edf8693b5d0cf"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"20d1fdeaab95af51fa1ae8d74e2ba8b3b7a27120","unresolved":false,"context_lines":[{"line_number":45,"context_line":"      },"},{"line_number":46,"context_line":"      \"required\": ["},{"line_number":47,"context_line":"        \"error\""},{"line_number":48,"context_line":"      ]"},{"line_number":49,"context_line":"    }"},{"line_number":50,"context_line":"  },"},{"line_number":51,"context_line":"  \"required\": ["}],"source_content_type":"application/json","patch_set":3,"id":"da9b358b_171d030f","line":48,"in_reply_to":"da9b358b_2cdebf6d","updated":"2015-03-31 21:03:41.000000000","message":"Good catch. This JSON schema (and the example) actually validates against services like [1] and [2] but there is nothing with the id of \"error\" so it\u0027s confusing. \n\nMy intent was to require at least one error in the array. That\u0027s much better served by using\n\n    \"minItems\": 1\n\nI\u0027ve added that and removed the \"required\": [\"error\"]\n\n[1] http://jsonschemalint.com/draft4/\n[2] http://json-schema-validator.herokuapp.com/","commit_id":"8aa2d5135a01b0e52153b5ec8f5edf8693b5d0cf"},{"author":{"_account_id":8434,"name":"Rochelle Grober","email":"rochelle.grober@huawei.com","username":"rockyg"},"change_message_id":"566529d7d51134277788a2c786fae514d7f30e46","unresolved":false,"context_lines":[{"line_number":13,"context_line":"        \"properties\": {"},{"line_number":14,"context_line":"          \"id\": {"},{"line_number":15,"context_line":"            \"type\": \"string\","},{"line_number":16,"context_line":"            \"description\": \"A unique identifier for this particular occurrence of the problem. If this property is present, it MUST match a particular line(s) in a log file on the server side.\""},{"line_number":17,"context_line":"          },"},{"line_number":18,"context_line":"          \"code\": {"},{"line_number":19,"context_line":"            \"type\": \"string\","}],"source_content_type":"application/json","patch_set":4,"id":"7aaa499b_be48ce88","line":16,"updated":"2015-04-11 00:30:59.000000000","message":"I\u0027m a little unclear on the what this is requiring?  Is this the referrer/requestor ID?","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"4d8d7b5a7c02305203ac1e18a5860df1a704c0ab","unresolved":false,"context_lines":[{"line_number":13,"context_line":"        \"properties\": {"},{"line_number":14,"context_line":"          \"id\": {"},{"line_number":15,"context_line":"            \"type\": \"string\","},{"line_number":16,"context_line":"            \"description\": \"A unique identifier for this particular occurrence of the problem. If this property is present, it MUST match a particular line(s) in a log file on the server side.\""},{"line_number":17,"context_line":"          },"},{"line_number":18,"context_line":"          \"code\": {"},{"line_number":19,"context_line":"            \"type\": \"string\","}],"source_content_type":"application/json","patch_set":4,"id":"dac4157f_b1a0b444","line":16,"in_reply_to":"7aaa499b_be48ce88","updated":"2015-04-21 22:01:57.000000000","message":"This would be the value of the x-openstack-request-id header returned in the HTTP response.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"ff31130e66954d23352e57f314c3c1f1f6cbc4de","unresolved":false,"context_lines":[{"line_number":13,"context_line":"        \"properties\": {"},{"line_number":14,"context_line":"          \"id\": {"},{"line_number":15,"context_line":"            \"type\": \"string\","},{"line_number":16,"context_line":"            \"description\": \"A unique identifier for this particular occurrence of the problem. If this property is present, it MUST match a particular line(s) in a log file on the server side.\""},{"line_number":17,"context_line":"          },"},{"line_number":18,"context_line":"          \"code\": {"},{"line_number":19,"context_line":"            \"type\": \"string\","}],"source_content_type":"application/json","patch_set":4,"id":"da20952f_abf03892","line":16,"in_reply_to":"dac4157f_b1a0b444","updated":"2015-08-28 21:38:39.000000000","message":"Made the relation to X-Openstack-Request-Id explicit.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":9550,"name":"Eugeniya Kudryashova","email":"ekudryashova@mirantis.com","username":"ekudryashova"},"change_message_id":"62ec2126ccbb38d6a679c5fdc6f49dba16a54001","unresolved":false,"context_lines":[{"line_number":17,"context_line":"          },"},{"line_number":18,"context_line":"          \"code\": {"},{"line_number":19,"context_line":"            \"type\": \"string\","},{"line_number":20,"context_line":"            \"description\": \"An application-specific error code, expressed as a string value. MAY match error codes as defined by the Log Guidelines in http://specs.openstack.org/openstack/openstack-specs/specs/log-guidelines.html.\""},{"line_number":21,"context_line":"          },"},{"line_number":22,"context_line":"          \"status\": {"},{"line_number":23,"context_line":"            \"type\": \"string\","}],"source_content_type":"application/json","patch_set":4,"id":"baa041b7_46e586a6","line":20,"updated":"2015-04-01 14:42:22.000000000","message":"Could you please clarify if structure of error codes will be in Log Guidelines or it is already there? Haven\u0027t found anything about that by provided link","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"ff31130e66954d23352e57f314c3c1f1f6cbc4de","unresolved":false,"context_lines":[{"line_number":17,"context_line":"          },"},{"line_number":18,"context_line":"          \"code\": {"},{"line_number":19,"context_line":"            \"type\": \"string\","},{"line_number":20,"context_line":"            \"description\": \"An application-specific error code, expressed as a string value. MAY match error codes as defined by the Log Guidelines in http://specs.openstack.org/openstack/openstack-specs/specs/log-guidelines.html.\""},{"line_number":21,"context_line":"          },"},{"line_number":22,"context_line":"          \"status\": {"},{"line_number":23,"context_line":"            \"type\": \"string\","}],"source_content_type":"application/json","patch_set":4,"id":"da20952f_0b6da430","line":20,"in_reply_to":"7aaa499b_7effe634","updated":"2015-08-28 21:38:39.000000000","message":"I\u0027m taking this out as no updates have been made to that spec since Apr. 17. If that spec ever happens, we can always put this back in.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":8434,"name":"Rochelle Grober","email":"rochelle.grober@huawei.com","username":"rockyg"},"change_message_id":"566529d7d51134277788a2c786fae514d7f30e46","unresolved":false,"context_lines":[{"line_number":17,"context_line":"          },"},{"line_number":18,"context_line":"          \"code\": {"},{"line_number":19,"context_line":"            \"type\": \"string\","},{"line_number":20,"context_line":"            \"description\": \"An application-specific error code, expressed as a string value. MAY match error codes as defined by the Log Guidelines in http://specs.openstack.org/openstack/openstack-specs/specs/log-guidelines.html.\""},{"line_number":21,"context_line":"          },"},{"line_number":22,"context_line":"          \"status\": {"},{"line_number":23,"context_line":"            \"type\": \"string\","}],"source_content_type":"application/json","patch_set":4,"id":"7aaa499b_7effe634","line":20,"in_reply_to":"9aa53dc9_d14af9c4","updated":"2015-04-11 00:30:59.000000000","message":"The spec for error codes in Logs has just been submitted for review.  \nhttps://review.openstack.org/#/c/172552/\nI can see the number part of the Log error code matching the numbers as defined by the API error codes.  The second field in the log error code would be AI or RI or some such, as chosen by the API working group to represent API codes in each of the projects.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"90b101dde8e659df317ba3ea8ef167005186aa9e","unresolved":false,"context_lines":[{"line_number":17,"context_line":"          },"},{"line_number":18,"context_line":"          \"code\": {"},{"line_number":19,"context_line":"            \"type\": \"string\","},{"line_number":20,"context_line":"            \"description\": \"An application-specific error code, expressed as a string value. MAY match error codes as defined by the Log Guidelines in http://specs.openstack.org/openstack/openstack-specs/specs/log-guidelines.html.\""},{"line_number":21,"context_line":"          },"},{"line_number":22,"context_line":"          \"status\": {"},{"line_number":23,"context_line":"            \"type\": \"string\","}],"source_content_type":"application/json","patch_set":4,"id":"9aa53dc9_d14af9c4","line":20,"in_reply_to":"baa041b7_46e586a6","updated":"2015-04-08 21:25:18.000000000","message":"AFAICT they\u0027re still a work in progress. I was hoping there would be movement on it sooner than later but I may have been overly optimistic. I would still like to see this field take the same values as what appears in the logs whenever possible. I\u0027ll reach out to the Logging WG and see where they\u0027re at with it.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4edf31a97eb33bd0640b8d522420a76999587d52","unresolved":false,"context_lines":[{"line_number":21,"context_line":"          },"},{"line_number":22,"context_line":"          \"status\": {"},{"line_number":23,"context_line":"            \"type\": \"string\","},{"line_number":24,"context_line":"            \"description\": \"The HTTP status code applicable to this problem, expressed as a string value.\""},{"line_number":25,"context_line":"          },"},{"line_number":26,"context_line":"          \"title\": {"},{"line_number":27,"context_line":"            \"type\": \"string\","}],"source_content_type":"application/json","patch_set":4,"id":"9aa53dc9_77823896","line":24,"updated":"2015-04-07 17:47:10.000000000","message":"i\u0027m tempted to question this being included. i know a lot of services do this already, but it\u0027s redundant with the HTTP response itself","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"90b101dde8e659df317ba3ea8ef167005186aa9e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"          },"},{"line_number":22,"context_line":"          \"status\": {"},{"line_number":23,"context_line":"            \"type\": \"string\","},{"line_number":24,"context_line":"            \"description\": \"The HTTP status code applicable to this problem, expressed as a string value.\""},{"line_number":25,"context_line":"          },"},{"line_number":26,"context_line":"          \"title\": {"},{"line_number":27,"context_line":"            \"type\": \"string\","}],"source_content_type":"application/json","patch_set":4,"id":"9aa53dc9_0415c13e","line":24,"in_reply_to":"9aa53dc9_77823896","updated":"2015-04-08 21:25:18.000000000","message":"Because there can be multiple errors, potentially each with their own status code, it\u0027s necessary to have status be its own field.\n\nBut that brings up a good point. Because this is \"An ordered list of errors with the most recent error first.\" the status code of the response MUST match the first error. I\u0027ll have to make a note of that in errors.rst.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":8434,"name":"Rochelle Grober","email":"rochelle.grober@huawei.com","username":"rockyg"},"change_message_id":"566529d7d51134277788a2c786fae514d7f30e46","unresolved":false,"context_lines":[{"line_number":25,"context_line":"          },"},{"line_number":26,"context_line":"          \"title\": {"},{"line_number":27,"context_line":"            \"type\": \"string\","},{"line_number":28,"context_line":"            \"description\": \"A short, human-readable summary of the problem. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization.\""},{"line_number":29,"context_line":"          },"},{"line_number":30,"context_line":"          \"description\": {"},{"line_number":31,"context_line":"            \"type\": \"string\","}],"source_content_type":"application/json","patch_set":4,"id":"7aaa499b_3ea71e51","line":28,"updated":"2015-04-11 00:30:59.000000000","message":"I think this would correspond to the Log Error Codes summary that is a non instance specific description of the type of error.  This summary would be a field in the Error code database that ensures uniqueness of error code and tracks the summaries.  This also aids in localization/translation","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":8434,"name":"Rochelle Grober","email":"rochelle.grober@huawei.com","username":"rockyg"},"change_message_id":"566529d7d51134277788a2c786fae514d7f30e46","unresolved":false,"context_lines":[{"line_number":29,"context_line":"          },"},{"line_number":30,"context_line":"          \"description\": {"},{"line_number":31,"context_line":"            \"type\": \"string\","},{"line_number":32,"context_line":"            \"description\": \"A human-readable explanation specific to this occurrence of the problem.\""},{"line_number":33,"context_line":"          },"},{"line_number":34,"context_line":"          \"href\": {"},{"line_number":35,"context_line":"            \"type\": \"string\","}],"source_content_type":"application/json","patch_set":4,"id":"7aaa499b_be71eee2","line":32,"updated":"2015-04-11 00:30:59.000000000","message":"In the log message, this information would be part of the \"payload\" of the message.  A question here:  Would the referrer/requestor ID possibly be a requirement for this also?  Please see and comment on:\nhttps://review.openstack.org/#/c/156508/\nas to how these two specs may relate and comments on what is the most reasonable way to implement for APIs.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"4d8d7b5a7c02305203ac1e18a5860df1a704c0ab","unresolved":false,"context_lines":[{"line_number":29,"context_line":"          },"},{"line_number":30,"context_line":"          \"description\": {"},{"line_number":31,"context_line":"            \"type\": \"string\","},{"line_number":32,"context_line":"            \"description\": \"A human-readable explanation specific to this occurrence of the problem.\""},{"line_number":33,"context_line":"          },"},{"line_number":34,"context_line":"          \"href\": {"},{"line_number":35,"context_line":"            \"type\": \"string\","}],"source_content_type":"application/json","patch_set":4,"id":"dac4157f_8ca913e2","line":32,"in_reply_to":"7aaa499b_be71eee2","updated":"2015-04-21 22:01:57.000000000","message":"The referrer/requestor ID would not be a requirement for this field. That would be the id field.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"f6c21c2fcf3fcdcebc27c8756408b947aed74c32","unresolved":false,"context_lines":[{"line_number":11,"context_line":"        \"type\": \"object\","},{"line_number":12,"context_line":"        \"description\": \"Additional information about problems encountered while performing an operation.\","},{"line_number":13,"context_line":"        \"properties\": {"},{"line_number":14,"context_line":"          \"id\": {"},{"line_number":15,"context_line":"            \"type\": \"string\","},{"line_number":16,"context_line":"            \"description\": \"A unique identifier for this particular occurrence of the problem. If this property is present, it MUST match the X-Openstack-Request-Id header of the response in which it occurred.\""},{"line_number":17,"context_line":"          },"}],"source_content_type":"application/json","patch_set":7,"id":"fa80f949_888c5936","line":14,"updated":"2015-11-05 17:09:38.000000000","message":"this should probably be request-id instead of \u0027id\u0027. error.id makes it sound like it\u0027s the id of an error, but it\u0027s really not (as per the description). I think this will cause confusion just calling it id.","commit_id":"a9cee41809b133da658191611c677d62a85591e5"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"cd1184a4fd1ee39692a2f2250e2d147546235c82","unresolved":false,"context_lines":[{"line_number":11,"context_line":"        \"type\": \"object\","},{"line_number":12,"context_line":"        \"description\": \"Additional information about problems encountered while performing an operation.\","},{"line_number":13,"context_line":"        \"properties\": {"},{"line_number":14,"context_line":"          \"id\": {"},{"line_number":15,"context_line":"            \"type\": \"string\","},{"line_number":16,"context_line":"            \"description\": \"A unique identifier for this particular occurrence of the problem. If this property is present, it MUST match the X-Openstack-Request-Id header of the response in which it occurred.\""},{"line_number":17,"context_line":"          },"}],"source_content_type":"application/json","patch_set":7,"id":"fa80f949_c9d9f223","line":14,"in_reply_to":"fa80f949_888c5936","updated":"2015-11-06 05:13:01.000000000","message":"That\u0027s reasonable. Although I think we\u0027d want to call it request_id right?","commit_id":"a9cee41809b133da658191611c677d62a85591e5"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"f6c21c2fcf3fcdcebc27c8756408b947aed74c32","unresolved":false,"context_lines":[{"line_number":17,"context_line":"          },"},{"line_number":18,"context_line":"          \"code\": {"},{"line_number":19,"context_line":"            \"type\": \"string\","},{"line_number":20,"context_line":"            \"description\": \"An application-specific error code.\""},{"line_number":21,"context_line":"          },"},{"line_number":22,"context_line":"          \"status\": {"},{"line_number":23,"context_line":"            \"type\": \"integer\","}],"source_content_type":"application/json","patch_set":7,"id":"fa80f949_488751d7","line":20,"updated":"2015-11-05 17:09:38.000000000","message":"we should specify that code should be of the format:\n\n\"SERVICE.x.....\" \n\ni.e. \"compute.network-in-use\"\n\nservices should be able to free form the contents after their service id within some acceptable character set (including lowercase alpha, numbers, - and .)\n\nRecommendation for human meaningful names.","commit_id":"a9cee41809b133da658191611c677d62a85591e5"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"cd1184a4fd1ee39692a2f2250e2d147546235c82","unresolved":false,"context_lines":[{"line_number":17,"context_line":"          },"},{"line_number":18,"context_line":"          \"code\": {"},{"line_number":19,"context_line":"            \"type\": \"string\","},{"line_number":20,"context_line":"            \"description\": \"An application-specific error code.\""},{"line_number":21,"context_line":"          },"},{"line_number":22,"context_line":"          \"status\": {"},{"line_number":23,"context_line":"            \"type\": \"integer\","}],"source_content_type":"application/json","patch_set":7,"id":"fa80f949_ac891c77","line":20,"in_reply_to":"fa80f949_488751d7","updated":"2015-11-06 05:13:01.000000000","message":"Ah yes. We\u0027ve been down this path before with this field. The format of such a code seems to lend itself to bikeshedding. I thought we could avoid that and align with what the Logging WG was doing in this space but that spec never materialized.\n\nThe scope of this spec must stay within reason. I\u0027d be comfortable defining the initial portion of this code to be the service name as you suggested but nothing beyond that. Anything after the service name is up to the individual services or a future cross-project spec.","commit_id":"a9cee41809b133da658191611c677d62a85591e5"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"f6c21c2fcf3fcdcebc27c8756408b947aed74c32","unresolved":false,"context_lines":[{"line_number":38,"context_line":"          }"},{"line_number":39,"context_line":"        },"},{"line_number":40,"context_line":"        \"required\": ["},{"line_number":41,"context_line":"          \"status\","},{"line_number":42,"context_line":"          \"title\","},{"line_number":43,"context_line":"          \"detail\""},{"line_number":44,"context_line":"        ]"}],"source_content_type":"application/json","patch_set":7,"id":"fa80f949_a8fd9d3b","line":41,"updated":"2015-11-05 17:09:38.000000000","message":"I think code and href should be required. I would expect applications to be conditional based on \u0027code\u0027","commit_id":"a9cee41809b133da658191611c677d62a85591e5"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"cd1184a4fd1ee39692a2f2250e2d147546235c82","unresolved":false,"context_lines":[{"line_number":38,"context_line":"          }"},{"line_number":39,"context_line":"        },"},{"line_number":40,"context_line":"        \"required\": ["},{"line_number":41,"context_line":"          \"status\","},{"line_number":42,"context_line":"          \"title\","},{"line_number":43,"context_line":"          \"detail\""},{"line_number":44,"context_line":"        ]"}],"source_content_type":"application/json","patch_set":7,"id":"fa80f949_6c29f436","line":41,"in_reply_to":"fa80f949_a8fd9d3b","updated":"2015-11-06 05:13:01.000000000","message":"I\u0027d be willing to make code required.\n\nI don\u0027t think href should be required as I can easily envision an OpenStack contributor needing to propagate an error out through the API but not having a helpful href on hand to include. \n\nSo at best they put in an href to something totally generic like http://openstack.org (ultimately unhelpful/frustrating to the user) or at worst they put in an href to something misleading.\n\nBetter to leave this optional and only used when there is an href to a known place to solve a particular problem. The href used could be dependent on the deployment environment.","commit_id":"a9cee41809b133da658191611c677d62a85591e5"}],"guidelines/errors.rst":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"1fad785c6cfad6deb2c346368964649306cf9a2d","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"*Note*: The example below is completely contrived. This is not how"},{"line_number":29,"context_line":"Orchestration responds with errors. It merely illustrates how a service might"},{"line_number":30,"context_line":"chain together errors."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":".. literalinclude:: errors-example.json"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa1b9901_09b6e3f8","line":30,"updated":"2015-08-26 12:18:50.000000000","message":"nit: this paragraph is probably better placed after the example.","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"ff31130e66954d23352e57f314c3c1f1f6cbc4de","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"*Note*: The example below is completely contrived. This is not how"},{"line_number":29,"context_line":"Orchestration responds with errors. It merely illustrates how a service might"},{"line_number":30,"context_line":"chain together errors."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":".. literalinclude:: errors-example.json"}],"source_content_type":"text/x-rst","patch_set":4,"id":"da20952f_2b7ae877","line":30,"in_reply_to":"fa1b9901_09b6e3f8","updated":"2015-08-28 21:38:39.000000000","message":"Done","commit_id":"421c6d24d301613cc24965f7e6f705bb611a7cdb"},{"author":{"_account_id":15171,"name":"Eric Larson","email":"eric.larson@rackspace.com","username":"elarson"},"change_message_id":"e72ca12b807c9aaea8cadf14e3a2a103792d4a46","unresolved":false,"context_lines":[{"line_number":20,"context_line":".. literalinclude:: errors-schema.json"},{"line_number":21,"context_line":"   :language: json"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"The basis for the above format is `JSON API Errors`_."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Errors JSON Example"},{"line_number":26,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"da20952f_510abd7a","line":23,"updated":"2015-09-09 14:01:09.000000000","message":"It would be helpful to add any notes regarding difference or important features from the JSON API Errors document. For example, the JSON API Errors format states that the title should not change. This implies a client MAY use a title programmatically. This is important to note to contributors who may try to improve the text for readability. It would also be good to add any clarity on what makes a good title. I imagine an exception class name is a bad path because it exposes the underlying implementation. At the same time, the title should be reasonably unique and add specificity that a simple code can\u0027t convey.","commit_id":"15403eea2e84a729e461f6d90b5ec3eb2d0a693b"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"82877a28ba0f5c9d3b3d0fa7306d72cd8bc2a5c2","unresolved":false,"context_lines":[{"line_number":20,"context_line":".. literalinclude:: errors-schema.json"},{"line_number":21,"context_line":"   :language: json"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"The basis for the above format is `JSON API Errors`_."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Errors JSON Example"},{"line_number":26,"context_line":"-------------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"da20952f_d3cf43b1","line":23,"in_reply_to":"da20952f_510abd7a","updated":"2015-09-12 00:22:22.000000000","message":"I don\u0027t want to go into the specifics of the differences between the two because the JSON API spec could change and invalidate those specifics. Also, it would be a lot of explanation that would distract from the guideline itself. But it\u0027s a fair point so I changed \"basis\" to \"inspiration\" and made a blanket statement about changes.\n\nAs for the title, I prefer to keep it the way it is. Clients may use *anything* programmatically and wind up depending on something that may change. We don\u0027t want to have to add caveats to every field for this. However, this does highlight the need for something that users could potentially use programatically. Something like the code that was removed from the previous patch set. I\u0027ll address this in the review comments.","commit_id":"15403eea2e84a729e461f6d90b5ec3eb2d0a693b"}]}
