)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69b76585c61b79097ad06e4c64ffddecaf8816d7","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"A critical first step to make that work is removing the default"},{"line_number":16,"context_line":"connection string and requiring an explicit"},{"line_number":17,"context_line":"[placement_database]/connection value. To whit, this patch:"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* removes api_data configuration settings"},{"line_number":20,"context_line":"* removes the default connection value"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_f6e1f89c","line":17,"range":{"start_line":17,"start_character":42,"end_line":17,"end_character":46},"updated":"2018-09-12 22:57:42.000000000","message":"wit\n\n(unless you were being deliberately whitty)","commit_id":"3ea38aafa3b61cd5c41d31c5c72cb21bca4ac075"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69b76585c61b79097ad06e4c64ffddecaf8816d7","unresolved":false,"context_lines":[{"line_number":28,"context_line":"want:"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"* If there is no configuration file at all (either in the default"},{"line_number":31,"context_line":"  /etc/placement/placement.conf location or the same file set by"},{"line_number":32,"context_line":"  OS_PLACEMENT_CONFIG_DIR), fail"},{"line_number":33,"context_line":"* If this a config file and it has no [placement_database]/connection,"},{"line_number":34,"context_line":"  fail."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_b692a0fb","line":31,"range":{"start_line":31,"start_character":48,"end_line":31,"end_character":61},"updated":"2018-09-12 22:57:42.000000000","message":"file named by ?","commit_id":"3ea38aafa3b61cd5c41d31c5c72cb21bca4ac075"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69b76585c61b79097ad06e4c64ffddecaf8816d7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"* If there is no configuration file at all (either in the default"},{"line_number":31,"context_line":"  /etc/placement/placement.conf location or the same file set by"},{"line_number":32,"context_line":"  OS_PLACEMENT_CONFIG_DIR), fail"},{"line_number":33,"context_line":"* If this a config file and it has no [placement_database]/connection,"},{"line_number":34,"context_line":"  fail."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Note that all these changes are not fully meaningful until the next"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3f79a3b5_368690bc","line":33,"range":{"start_line":33,"start_character":5,"end_line":33,"end_character":23},"updated":"2018-09-12 22:57:42.000000000","message":"a config file exists ?","commit_id":"3ea38aafa3b61cd5c41d31c5c72cb21bca4ac075"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec308bb00625203178803254a8eab6f712b165b8","unresolved":false,"context_lines":[{"line_number":30,"context_line":"* If there is no configuration file at all (either in the default"},{"line_number":31,"context_line":"  /etc/placement/placement.conf location or the same file set by"},{"line_number":32,"context_line":"  OS_PLACEMENT_CONFIG_DIR), fail"},{"line_number":33,"context_line":"* If this a config file and it has no [placement_database]/connection,"},{"line_number":34,"context_line":"  fail."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Note that all these changes are not fully meaningful until the next"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3f79a3b5_db8160a2","line":33,"range":{"start_line":33,"start_character":5,"end_line":33,"end_character":9},"updated":"2018-09-14 16:54:08.000000000","message":"there is","commit_id":"b5dbf1af00553a6b61dbca2526b9785ecf6928d4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec308bb00625203178803254a8eab6f712b165b8","unresolved":false,"context_lines":[{"line_number":33,"context_line":"* If this a config file and it has no [placement_database]/connection,"},{"line_number":34,"context_line":"  fail."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Note that all these changes are not fully meaningful until the next"},{"line_number":37,"context_line":"patch, which changes the placement/wsgi.py app. That\u0027s currently the"},{"line_number":38,"context_line":"only external entry point to using placement, and will not work until"},{"line_number":39,"context_line":"those changes are in place."},{"line_number":40,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3f79a3b5_1bb91878","line":37,"range":{"start_line":36,"start_character":63,"end_line":37,"end_character":5},"updated":"2018-09-14 16:54:08.000000000","message":"nit: use the change id of the other change, because this will not make sense in git history.","commit_id":"b5dbf1af00553a6b61dbca2526b9785ecf6928d4"}],"placement/conf/database.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69b76585c61b79097ad06e4c64ffddecaf8816d7","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                                  title\u003d\u0027Placement API database options\u0027,"},{"line_number":52,"context_line":"                                  help\u003d\"\"\""},{"line_number":53,"context_line":"The *Placement API Database* is a the database used with the placement"},{"line_number":54,"context_line":"service. If the connection option is not set, the placement service will"},{"line_number":55,"context_line":"not start."},{"line_number":56,"context_line":"\"\"\")"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_5139d6cc","line":54,"range":{"start_line":54,"start_character":50,"end_line":54,"end_character":59},"updated":"2018-09-12 22:57:42.000000000","message":"Consistency of capitalization","commit_id":"3ea38aafa3b61cd5c41d31c5c72cb21bca4ac075"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"517868fa851892dedf616393b66d0d8b9be847e9","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                                  title\u003d\u0027Placement API database options\u0027,"},{"line_number":52,"context_line":"                                  help\u003d\"\"\""},{"line_number":53,"context_line":"The *Placement API Database* is a the database used with the placement"},{"line_number":54,"context_line":"service. If the connection option is not set, the placement service will"},{"line_number":55,"context_line":"not start."},{"line_number":56,"context_line":"\"\"\")"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_710bb27c","line":54,"range":{"start_line":54,"start_character":50,"end_line":54,"end_character":59},"in_reply_to":"3f79a3b5_5139d6cc","updated":"2018-09-12 23:05:23.000000000","message":"I name the service based on what the docs team said some years ago: it is lowercase. But I didn\u0027t want to change what was already written because apparently someone cared.","commit_id":"3ea38aafa3b61cd5c41d31c5c72cb21bca4ac075"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69b76585c61b79097ad06e4c64ffddecaf8816d7","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def list_opts():"},{"line_number":103,"context_line":"    # NOTE(markus_z): 2016-04-04: If we list the oslo_db_options here, they"},{"line_number":104,"context_line":"    # get emitted twice(!) in the \"sample.conf\" file. First under the"},{"line_number":105,"context_line":"    # namespace \"nova.conf\" and second under the namespace \"oslo.db\". This"},{"line_number":106,"context_line":"    # is due to the setting in file \"etc/nova/nova-config-generator.conf\"."},{"line_number":107,"context_line":"    # As I think it is useful to have the \"oslo.db\" namespace information"},{"line_number":108,"context_line":"    # in the \"sample.conf\" file, I omit the listing of the \"oslo_db_options\""},{"line_number":109,"context_line":"    # here."},{"line_number":110,"context_line":"    global _ENRICHED"},{"line_number":111,"context_line":"    if not _ENRICHED:"},{"line_number":112,"context_line":"        enrich_help_text(placement_db_opts)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_d1ff26fe","line":109,"range":{"start_line":103,"start_character":0,"end_line":109,"end_character":11},"updated":"2018-09-12 22:57:42.000000000","message":"This needs to be placement-ified (assuming we still need this at all - which I guess we probably do, but perhaps only in its pre-[1] form?)\n\n[1] https://review.openstack.org/#/c/577023/","commit_id":"3ea38aafa3b61cd5c41d31c5c72cb21bca4ac075"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"517868fa851892dedf616393b66d0d8b9be847e9","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def list_opts():"},{"line_number":103,"context_line":"    # NOTE(markus_z): 2016-04-04: If we list the oslo_db_options here, they"},{"line_number":104,"context_line":"    # get emitted twice(!) in the \"sample.conf\" file. First under the"},{"line_number":105,"context_line":"    # namespace \"nova.conf\" and second under the namespace \"oslo.db\". This"},{"line_number":106,"context_line":"    # is due to the setting in file \"etc/nova/nova-config-generator.conf\"."},{"line_number":107,"context_line":"    # As I think it is useful to have the \"oslo.db\" namespace information"},{"line_number":108,"context_line":"    # in the \"sample.conf\" file, I omit the listing of the \"oslo_db_options\""},{"line_number":109,"context_line":"    # here."},{"line_number":110,"context_line":"    global _ENRICHED"},{"line_number":111,"context_line":"    if not _ENRICHED:"},{"line_number":112,"context_line":"        enrich_help_text(placement_db_opts)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_9183eecb","line":109,"range":{"start_line":103,"start_character":0,"end_line":109,"end_character":11},"in_reply_to":"3f79a3b5_d1ff26fe","updated":"2018-09-12 23:05:23.000000000","message":"I was confused about which to do. Since there was a big fat date on the Note I thought it ought to refer to the state of the universe at that time.","commit_id":"3ea38aafa3b61cd5c41d31c5c72cb21bca4ac075"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"e0128d28db7e168e454ecdc95bc98fcf9436746c","unresolved":false,"context_lines":[{"line_number":50,"context_line":"placement_db_group \u003d cfg.OptGroup(\u0027placement_database\u0027,"},{"line_number":51,"context_line":"                                  title\u003d\u0027Placement API database options\u0027,"},{"line_number":52,"context_line":"                                  help\u003d\"\"\""},{"line_number":53,"context_line":"The *Placement API Database* is a the database used with the placement"},{"line_number":54,"context_line":"service. If the connection option is not set, the placement service will"},{"line_number":55,"context_line":"not start."},{"line_number":56,"context_line":"\"\"\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_116fde28","line":53,"range":{"start_line":53,"start_character":15,"end_line":53,"end_character":18},"updated":"2018-09-12 23:05:43.000000000","message":"Nit: it seems odd to call it the \"API Database\", as if there were another Placement datatbase somewhere.","commit_id":"4cac4fb7ddec8333bfa150098254da517535ac89"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec308bb00625203178803254a8eab6f712b165b8","unresolved":false,"context_lines":[{"line_number":43,"context_line":"# That\u0027s why we copied \u0026 pasted these config options for the"},{"line_number":44,"context_line":"# \"placement_database\" group here. See nova commit ba407e3 (\"Add support"},{"line_number":45,"context_line":"# for multiple database engines\") for more details."},{"line_number":46,"context_line":"# TODO(cdent): Consider our future options of using \u0027database\u0027 instead of"},{"line_number":47,"context_line":"# \u0027placement_database\u0027 for the group. This is already loose in the wild,"},{"line_number":48,"context_line":"# explicit, and safe if there will ever be more than one database, so may"},{"line_number":49,"context_line":"# be good to leave it."},{"line_number":50,"context_line":"placement_db_group \u003d cfg.OptGroup(\u0027placement_database\u0027,"},{"line_number":51,"context_line":"                                  title\u003d\u0027Placement API database options\u0027,"},{"line_number":52,"context_line":"                                  help\u003d\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_bb5d8449","line":49,"range":{"start_line":46,"start_character":0,"end_line":49,"end_character":22},"updated":"2018-09-14 16:54:08.000000000","message":"blarg, yeah i was going to say, let\u0027s just use [database]/connection from oslo db opts but I guess we can\u0027t for the migration from [placement_database] in nova.conf in rocky.","commit_id":"b5dbf1af00553a6b61dbca2526b9785ecf6928d4"}],"placement/db_api.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"69b76585c61b79097ad06e4c64ffddecaf8816d7","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def configure(conf):"},{"line_number":31,"context_line":"    if not conf.placement_database.connection:"},{"line_number":32,"context_line":"        LOG.error(\u0027[placement_database]/connection must be configured.\u0027)"},{"line_number":33,"context_line":"        raise exception.DBNotConfigured()"},{"line_number":34,"context_line":"    placement_context_manager.configure("}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_51d55646","line":31,"range":{"start_line":31,"start_character":7,"end_line":31,"end_character":46},"updated":"2018-09-12 22:57:42.000000000","message":"Thinking out loud, do we maybe make this `is None` instead, so if you explicitly want the default, you can say \u0027\u0027 ?\n\n(That probably wouldn\u0027t work, feel free to ignore.)","commit_id":"3ea38aafa3b61cd5c41d31c5c72cb21bca4ac075"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"517868fa851892dedf616393b66d0d8b9be847e9","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def configure(conf):"},{"line_number":31,"context_line":"    if not conf.placement_database.connection:"},{"line_number":32,"context_line":"        LOG.error(\u0027[placement_database]/connection must be configured.\u0027)"},{"line_number":33,"context_line":"        raise exception.DBNotConfigured()"},{"line_number":34,"context_line":"    placement_context_manager.configure("}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_b15f0a74","line":31,"range":{"start_line":31,"start_character":7,"end_line":31,"end_character":46},"in_reply_to":"3f79a3b5_51d55646","updated":"2018-09-12 23:05:23.000000000","message":"There is no default and we don\u0027t want people to use it. If it is either None or \u0027\u0027 we want it to fail.","commit_id":"3ea38aafa3b61cd5c41d31c5c72cb21bca4ac075"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec308bb00625203178803254a8eab6f712b165b8","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def configure(conf):"},{"line_number":31,"context_line":"    if not conf.placement_database.connection:"},{"line_number":32,"context_line":"        LOG.error(\u0027[placement_database]/connection must be configured.\u0027)"},{"line_number":33,"context_line":"        raise exception.DBNotConfigured()"},{"line_number":34,"context_line":"    placement_context_manager.configure("},{"line_number":35,"context_line":"        **_get_db_conf(conf.placement_database))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_7b2cccab","line":32,"updated":"2018-09-14 16:54:08.000000000","message":"We can make the option required via oslo.config:\n\nhttps://github.com/openstack/oslo.config/blob/master/oslo_config/cfg.py#L317","commit_id":"b5dbf1af00553a6b61dbca2526b9785ecf6928d4"}],"placement/exception.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec308bb00625203178803254a8eab6f712b165b8","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    msg_fmt \u003d _(\"Resource could not be found.\")"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class DBNotConfigured(_BaseException):"},{"line_number":70,"context_line":"    msg_fmt \u003d _(\"[placement_database]/connection must be configured.\")"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_5b1b107f","line":69,"updated":"2018-09-14 16:54:08.000000000","message":"we don\u0027t need this","commit_id":"b5dbf1af00553a6b61dbca2526b9785ecf6928d4"}],"placement/tests/unit/test_db_conf.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"13a23b9bf464fe6044db2deae61b92abb1929b60","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.conf_fixture \u003d self.useFixture(config_fixture.Config(CONF))"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def test_missing_config_raises(self):"},{"line_number":30,"context_line":"        self.assertRaises("},{"line_number":31,"context_line":"            cfg.RequiredOptError, self.conf_fixture.conf,"},{"line_number":32,"context_line":"            [], default_config_files\u003d[])"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_58330ff7","line":32,"range":{"start_line":30,"start_character":8,"end_line":32,"end_character":40},"updated":"2018-09-14 20:51:21.000000000","message":"nit: I\u0027d like to trap the error and assert it\u0027s failing because of the option we expect it to fail on, but could be a....wait for it...follow up.","commit_id":"cf586f599e7a5f5fe32f04d642e13a1509dc970e"}]}
