)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"686470318e703ec2da57c94221065eba0ed86b71","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"placement_dev.rst provides a nova-developer oriented perspective on"},{"line_number":10,"context_line":"the placement API including some explanation of its structure, some"},{"line_number":11,"context_line":"gotchyas to be aware of, and some instruction on how to add to it."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Subsequent patches will fill in the missing sections."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba5201f7_326d1a99","line":11,"updated":"2017-01-02 18:14:45.000000000","message":"gotchas.","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"dd0b90395cb1a4430e6cd046609d32a57a194baf","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"placement_dev.rst provides a nova-developer oriented perspective on"},{"line_number":10,"context_line":"the placement API including some explanation of its structure, some"},{"line_number":11,"context_line":"gotchyas to be aware of, and some instruction on how to add to it."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Subsequent patches will fill in the missing sections."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba5201f7_fcf1996b","line":11,"in_reply_to":"ba5201f7_326d1a99","updated":"2017-01-03 13:01:34.000000000","message":"Done","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"}],"doc/source/placement_dev.rst":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"686470318e703ec2da57c94221065eba0ed86b71","unresolved":false,"context_lines":[{"line_number":22,"context_line":"the Newton release. The service provides an HTTP API to manage inventories of"},{"line_number":23,"context_line":"different classes of resources, such as disk or virtual cpus, made available by"},{"line_number":24,"context_line":"entities called resource providers. Use of the information can enable effective"},{"line_number":25,"context_line":"placement of virtual machines and other consumers of the managed resources."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"The document serves to explain the architecture of the system and to provide"},{"line_number":28,"context_line":"some guidance on how to maintain and extend the code. For more detail on why"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5201f7_f2f9d2c9","line":25,"updated":"2017-01-02 18:14:45.000000000","message":"Suggest rewording the last sentence to:\n\n Information provided through the placement API is intended to\n enable more effective accounting of resources in an OpenStack\n deployment and better scheduling of various entities in the cloud.","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"dd0b90395cb1a4430e6cd046609d32a57a194baf","unresolved":false,"context_lines":[{"line_number":22,"context_line":"the Newton release. The service provides an HTTP API to manage inventories of"},{"line_number":23,"context_line":"different classes of resources, such as disk or virtual cpus, made available by"},{"line_number":24,"context_line":"entities called resource providers. Use of the information can enable effective"},{"line_number":25,"context_line":"placement of virtual machines and other consumers of the managed resources."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"The document serves to explain the architecture of the system and to provide"},{"line_number":28,"context_line":"some guidance on how to maintain and extend the code. For more detail on why"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5201f7_1c0d7d90","line":25,"in_reply_to":"ba5201f7_f2f9d2c9","updated":"2017-01-03 13:01:34.000000000","message":"Done","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"686470318e703ec2da57c94221065eba0ed86b71","unresolved":false,"context_lines":[{"line_number":31,"context_line":"Big Picture"},{"line_number":32,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"The placement service is fundamentally pretty straightforward: It is a `WSGI`_"},{"line_number":35,"context_line":"application that sends and receives JSON, using an RDBMS (usually MySQL) for"},{"line_number":36,"context_line":"persistence. Because state is managed solely in the DB and no RPC calls are"},{"line_number":37,"context_line":"required, the service is easy to scale horizontally by running more"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5201f7_12f736d4","line":34,"updated":"2017-01-02 18:14:45.000000000","message":"s/fundamentally pretty//","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"dd0b90395cb1a4430e6cd046609d32a57a194baf","unresolved":false,"context_lines":[{"line_number":31,"context_line":"Big Picture"},{"line_number":32,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"The placement service is fundamentally pretty straightforward: It is a `WSGI`_"},{"line_number":35,"context_line":"application that sends and receives JSON, using an RDBMS (usually MySQL) for"},{"line_number":36,"context_line":"persistence. Because state is managed solely in the DB and no RPC calls are"},{"line_number":37,"context_line":"required, the service is easy to scale horizontally by running more"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5201f7_3c1081a8","line":34,"in_reply_to":"ba5201f7_12f736d4","updated":"2017-01-03 13:01:34.000000000","message":"Done","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"686470318e703ec2da57c94221065eba0ed86b71","unresolved":false,"context_lines":[{"line_number":34,"context_line":"The placement service is fundamentally pretty straightforward: It is a `WSGI`_"},{"line_number":35,"context_line":"application that sends and receives JSON, using an RDBMS (usually MySQL) for"},{"line_number":36,"context_line":"persistence. Because state is managed solely in the DB and no RPC calls are"},{"line_number":37,"context_line":"required, the service is easy to scale horizontally by running more"},{"line_number":38,"context_line":"instances of the WSGI application."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"For sake of consistency and because there was initially intent to make the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5201f7_722c024b","line":37,"range":{"start_line":37,"start_character":24,"end_line":37,"end_character":30},"updated":"2017-01-02 18:14:45.000000000","message":"Recommend removing the opinion about easy here and just make this last sentence imperative:\n\n As state is managed solely in the DB, scaling the placement service\n is done by increasing the number of WSGI application instances\n and scaling the RDBMS using traditional database scaling techniques.","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"dd0b90395cb1a4430e6cd046609d32a57a194baf","unresolved":false,"context_lines":[{"line_number":34,"context_line":"The placement service is fundamentally pretty straightforward: It is a `WSGI`_"},{"line_number":35,"context_line":"application that sends and receives JSON, using an RDBMS (usually MySQL) for"},{"line_number":36,"context_line":"persistence. Because state is managed solely in the DB and no RPC calls are"},{"line_number":37,"context_line":"required, the service is easy to scale horizontally by running more"},{"line_number":38,"context_line":"instances of the WSGI application."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"For sake of consistency and because there was initially intent to make the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5201f7_5c270512","line":37,"in_reply_to":"ba5201f7_722c024b","updated":"2017-01-03 13:01:34.000000000","message":"Done","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"686470318e703ec2da57c94221065eba0ed86b71","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"For sake of consistency and because there was initially intent to make the"},{"line_number":41,"context_line":"entities in the placement service available over RPC, `versioned objects`_ are"},{"line_number":42,"context_line":"used to provide the interface between the HTTP application later and the"},{"line_number":43,"context_line":"SQLAlchemy-driven persistence layer. Even without RPC, these objects provide"},{"line_number":44,"context_line":"useful structuring and separation of the code."},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5201f7_923166a5","line":42,"updated":"2017-01-02 18:14:45.000000000","message":"s/later/layer/","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"dd0b90395cb1a4430e6cd046609d32a57a194baf","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"For sake of consistency and because there was initially intent to make the"},{"line_number":41,"context_line":"entities in the placement service available over RPC, `versioned objects`_ are"},{"line_number":42,"context_line":"used to provide the interface between the HTTP application later and the"},{"line_number":43,"context_line":"SQLAlchemy-driven persistence layer. Even without RPC, these objects provide"},{"line_number":44,"context_line":"useful structuring and separation of the code."},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5201f7_7c220903","line":42,"in_reply_to":"ba5201f7_923166a5","updated":"2017-01-03 13:01:34.000000000","message":"Done","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"686470318e703ec2da57c94221065eba0ed86b71","unresolved":false,"context_lines":[{"line_number":51,"context_line":"additional resources should be considered a significant change requiring robust"},{"line_number":52,"context_line":"review from many stakeholders."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The set of resources represents a concise and constrained grammar for"},{"line_number":55,"context_line":"expressing the management of resource providers, inventories, resource classes"},{"line_number":56,"context_line":"and allocations. If a solution is initially designed to need more resources or"},{"line_number":57,"context_line":"a more complex grammar that may be a sign that we need to give our goals"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5201f7_d22bee2e","line":54,"updated":"2017-01-02 18:14:45.000000000","message":"s/set of resources/set of REST resources/\n\n(just so we\u0027re explicit about what resources we are referring to, considering the same sentence contains \"resource providers\" and \"resource classes\" :)","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"dd0b90395cb1a4430e6cd046609d32a57a194baf","unresolved":false,"context_lines":[{"line_number":51,"context_line":"additional resources should be considered a significant change requiring robust"},{"line_number":52,"context_line":"review from many stakeholders."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The set of resources represents a concise and constrained grammar for"},{"line_number":55,"context_line":"expressing the management of resource providers, inventories, resource classes"},{"line_number":56,"context_line":"and allocations. If a solution is initially designed to need more resources or"},{"line_number":57,"context_line":"a more complex grammar that may be a sign that we need to give our goals"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5201f7_dc7935fe","line":54,"in_reply_to":"ba5201f7_d22bee2e","updated":"2017-01-03 13:01:34.000000000","message":"I\u0027ll use HTTP, not REST. We don\u0027t do REST :P.","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"686470318e703ec2da57c94221065eba0ed86b71","unresolved":false,"context_lines":[{"line_number":79,"context_line":"placement API these mini-applications are called `handlers`."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"This division between middleware, dispatch and handlers is supposed to"},{"line_number":82,"context_line":"provides clues on where a particular behavior or functionality should be"},{"line_number":83,"context_line":"implemented. Like most such systems, this doesn\u0027t always work but is a useful"},{"line_number":84,"context_line":"tool."},{"line_number":85,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5201f7_f220f24b","line":82,"updated":"2017-01-02 18:14:45.000000000","message":"s/provides/provide/","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"dd0b90395cb1a4430e6cd046609d32a57a194baf","unresolved":false,"context_lines":[{"line_number":79,"context_line":"placement API these mini-applications are called `handlers`."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"This division between middleware, dispatch and handlers is supposed to"},{"line_number":82,"context_line":"provides clues on where a particular behavior or functionality should be"},{"line_number":83,"context_line":"implemented. Like most such systems, this doesn\u0027t always work but is a useful"},{"line_number":84,"context_line":"tool."},{"line_number":85,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5201f7_3c87a1d8","line":82,"in_reply_to":"ba5201f7_f220f24b","updated":"2017-01-03 13:01:34.000000000","message":"Done","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":14511,"name":"Maciej Szankin","email":"maciej+review@szankin.pl","username":"mszankin"},"change_message_id":"5d6e42ecfd691f0e9b9b9145da34fb675044bb64","unresolved":false,"context_lines":[{"line_number":83,"context_line":"implemented. Like most such systems, this doesn\u0027t always work but is a useful"},{"line_number":84,"context_line":"tool."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"Gotchyas"},{"line_number":87,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"This section tries to shed some light on some of the differences between the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a6eadb0_61529c68","line":86,"range":{"start_line":86,"start_character":0,"end_line":86,"end_character":8},"updated":"2016-12-16 20:24:34.000000000","message":"This is not very formal :)","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"d9370c64ddc8d22cb1f66e7161db1495aebf2a96","unresolved":false,"context_lines":[{"line_number":83,"context_line":"implemented. Like most such systems, this doesn\u0027t always work but is a useful"},{"line_number":84,"context_line":"tool."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"Gotchyas"},{"line_number":87,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"This section tries to shed some light on some of the differences between the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5201f7_d23a0e36","line":86,"in_reply_to":"1a6eadb0_61529c68","updated":"2017-01-02 18:43:15.000000000","message":"I took a fairly informal tone throughout this as the target audience is other nova developers, not the public at large. Happy to change this though if it seems better otherwise.","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":14511,"name":"Maciej Szankin","email":"maciej+review@szankin.pl","username":"mszankin"},"change_message_id":"5d6e42ecfd691f0e9b9b9145da34fb675044bb64","unresolved":false,"context_lines":[{"line_number":103,"context_line":"  `application/json` then there will be an error and the error will attempt to"},{"line_number":104,"context_line":"  be in the requested format (for example, `text/plain`)."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"* If a URL exists, but a request is made using a method that that URL does not"},{"line_number":107,"context_line":"  support, the API will respond with a `405` error. Sometimes in the nova APIs"},{"line_number":108,"context_line":"  this can be a `404` (which is wrong, but understandable given the constraints"},{"line_number":109,"context_line":"  of the code)."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a6eadb0_4170400b","line":106,"range":{"start_line":106,"start_character":5,"end_line":106,"end_character":6},"updated":"2016-12-16 20:24:34.000000000","message":"Nit: an","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"686470318e703ec2da57c94221065eba0ed86b71","unresolved":false,"context_lines":[{"line_number":103,"context_line":"  `application/json` then there will be an error and the error will attempt to"},{"line_number":104,"context_line":"  be in the requested format (for example, `text/plain`)."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"* If a URL exists, but a request is made using a method that that URL does not"},{"line_number":107,"context_line":"  support, the API will respond with a `405` error. Sometimes in the nova APIs"},{"line_number":108,"context_line":"  this can be a `404` (which is wrong, but understandable given the constraints"},{"line_number":109,"context_line":"  of the code)."}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5201f7_92d88655","line":106,"range":{"start_line":106,"start_character":5,"end_line":106,"end_character":6},"in_reply_to":"1a6eadb0_4170400b","updated":"2017-01-02 18:14:45.000000000","message":"Actually \"a\" is appropriate here. Weird English grammar, I know, but because URL is pronounced \"You Are Ell\", and the \"You\" sound should be preceded by \"a\" not \"an\".\n\nIt\u0027s the same reason one would say \"a U.S. passport\" not \"an U.S. passport\".\n\nYup, English craziness.","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"},{"author":{"_account_id":14511,"name":"Maciej Szankin","email":"maciej+review@szankin.pl","username":"mszankin"},"change_message_id":"0d1a7eff3cfd9fe4f6c8a197fbbf6c1811fe40db","unresolved":false,"context_lines":[{"line_number":103,"context_line":"  `application/json` then there will be an error and the error will attempt to"},{"line_number":104,"context_line":"  be in the requested format (for example, `text/plain`)."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"* If a URL exists, but a request is made using a method that that URL does not"},{"line_number":107,"context_line":"  support, the API will respond with a `405` error. Sometimes in the nova APIs"},{"line_number":108,"context_line":"  this can be a `404` (which is wrong, but understandable given the constraints"},{"line_number":109,"context_line":"  of the code)."}],"source_content_type":"text/x-rst","patch_set":2,"id":"ba5201f7_72608236","line":106,"range":{"start_line":106,"start_character":5,"end_line":106,"end_character":6},"in_reply_to":"ba5201f7_92d88655","updated":"2017-01-02 18:57:14.000000000","message":"Some English 101 over here!\nGood to know :)","commit_id":"d7178036505f8d1a0813bf7f861e51e2654c93c2"}]}
