)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"dc89b42c82fb16fe0207a83591ec869b268c179d","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"This functionality is being provided to allow deployers to choose"},{"line_number":26,"context_line":"between establishing a new database now or requiring a migration"},{"line_number":27,"context_line":"later. The default is migration later. A reno note is added to"},{"line_number":28,"context_line":"explain the existence of the"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"This change returns the behavior removed in the revert in commit"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"3f4b6375_98b55af1","line":27,"range":{"start_line":27,"start_character":41,"end_line":27,"end_character":50},"updated":"2017-11-01 15:59:23.000000000","message":"\"release note note\" ?","commit_id":"80a24e4b05cf0fb06b986d3362ce37dd13a0a46a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ebc3a827699a5ce0853ac399f00bdec4fc831aeb","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"This functionality is being provided to allow deployers to choose"},{"line_number":26,"context_line":"between establishing a new database now or requiring a migration"},{"line_number":27,"context_line":"later. The default is migration later. A reno note is added to"},{"line_number":28,"context_line":"explain the existence of the"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"This change returns the behavior removed in the revert in commit"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"3f4b6375_a5120e57","line":27,"range":{"start_line":27,"start_character":41,"end_line":27,"end_character":50},"in_reply_to":"3f4b6375_98b55af1","updated":"2017-11-01 16:11:00.000000000","message":"from the department of redundancy department","commit_id":"80a24e4b05cf0fb06b986d3362ce37dd13a0a46a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"315d3d985031a6b2ec3c422cb259d5c19d583ef8","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"This functionality is being provided to allow deployers to choose"},{"line_number":27,"context_line":"between establishing a new database now or requiring a migration"},{"line_number":28,"context_line":"later. The default is migration later. A reno note is added to"},{"line_number":29,"context_line":"explain the existence of the configuration setting."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"This change returns the behavior removed by the revert in commit"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":88,"id":"9f6a8fd7_619eb355","line":28,"range":{"start_line":28,"start_character":41,"end_line":28,"end_character":50},"updated":"2018-04-27 13:37:34.000000000","message":"\"reno note\" \u003d\u003d \"release note note\"\n\n:)","commit_id":"5eb449bdac51ffa051be3fcad1b0a38f65ee48a3"}],"nova/cmd/manage.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"59fd2b5e9bb25e289c4e0e534539708ebca6affa","unresolved":false,"context_lines":[{"line_number":942,"context_line":"        database using the API database migrations."},{"line_number":943,"context_line":"        \"\"\""},{"line_number":944,"context_line":"        if CONF.placement_database.connection is not None:"},{"line_number":945,"context_line":"            migration.db_sync(version, database\u003d\u0027placement\u0027)"},{"line_number":946,"context_line":"        return migration.db_sync(version, database\u003d\u0027api\u0027)"},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"    def version(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_f305c113","line":945,"updated":"2016-08-30 13:59:52.000000000","message":"Do we want new placement db commands for this? Probably not, as we want to hide the complexity, I guess.","commit_id":"eed0e0ae11862f2a32e97e4888bda97554fe3003"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c8916a484b68407a8400f104803295f6bc0b8aa9","unresolved":false,"context_lines":[{"line_number":942,"context_line":"        database using the API database migrations."},{"line_number":943,"context_line":"        \"\"\""},{"line_number":944,"context_line":"        if CONF.placement_database.connection is not None:"},{"line_number":945,"context_line":"            migration.db_sync(version, database\u003d\u0027placement\u0027)"},{"line_number":946,"context_line":"        return migration.db_sync(version, database\u003d\u0027api\u0027)"},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"    def version(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_d68f96ca","line":945,"in_reply_to":"fa7ab95a_0f05910f","updated":"2016-08-31 08:38:04.000000000","message":"yeah, i think we are trying to hide thus complexity this cycle. wanted to make sure that was deliberate.","commit_id":"eed0e0ae11862f2a32e97e4888bda97554fe3003"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"6f15e424cc79410881feb3a7e49b880fb5f15991","unresolved":false,"context_lines":[{"line_number":942,"context_line":"        database using the API database migrations."},{"line_number":943,"context_line":"        \"\"\""},{"line_number":944,"context_line":"        if CONF.placement_database.connection is not None:"},{"line_number":945,"context_line":"            migration.db_sync(version, database\u003d\u0027placement\u0027)"},{"line_number":946,"context_line":"        return migration.db_sync(version, database\u003d\u0027api\u0027)"},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"    def version(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_0f05910f","line":945,"in_reply_to":"fa7ab95a_f305c113","updated":"2016-08-30 15:01:20.000000000","message":"I understood Dan as _not_ wanting an extra command.","commit_id":"eed0e0ae11862f2a32e97e4888bda97554fe3003"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"59fd2b5e9bb25e289c4e0e534539708ebca6affa","unresolved":false,"context_lines":[{"line_number":949,"context_line":"        \"\"\"Print the current database version.\"\"\""},{"line_number":950,"context_line":"        print(migration.db_version(database\u003d\u0027api\u0027))"},{"line_number":951,"context_line":"        if CONF.placement_database.connection is not None:"},{"line_number":952,"context_line":"            print(migration.db_version(database\u003d\u0027placement\u0027))"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"class AgentBuildCommands(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_0e8bda68","line":952,"updated":"2016-08-30 13:59:52.000000000","message":"Hmm, do we need to print extra info here, so this is not confusing?","commit_id":"eed0e0ae11862f2a32e97e4888bda97554fe3003"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"6f15e424cc79410881feb3a7e49b880fb5f15991","unresolved":false,"context_lines":[{"line_number":949,"context_line":"        \"\"\"Print the current database version.\"\"\""},{"line_number":950,"context_line":"        print(migration.db_version(database\u003d\u0027api\u0027))"},{"line_number":951,"context_line":"        if CONF.placement_database.connection is not None:"},{"line_number":952,"context_line":"            print(migration.db_version(database\u003d\u0027placement\u0027))"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"class AgentBuildCommands(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_2f56d505","line":952,"in_reply_to":"fa7ab95a_0e8bda68","updated":"2016-08-30 15:01:20.000000000","message":"I wondered about that but wasn\u0027t clear what it should be so was hoping someone would suggest something.","commit_id":"eed0e0ae11862f2a32e97e4888bda97554fe3003"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"9a449480efd151ebf4a216f3dda2c2b27dea47c0","unresolved":false,"context_lines":[{"line_number":949,"context_line":"        \"\"\"Print the current database version.\"\"\""},{"line_number":950,"context_line":"        print(migration.db_version(database\u003d\u0027api\u0027))"},{"line_number":951,"context_line":"        if CONF.placement_database.connection is not None:"},{"line_number":952,"context_line":"            print(migration.db_version(database\u003d\u0027placement\u0027))"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"class AgentBuildCommands(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_ba9225f4","line":952,"in_reply_to":"fa7ab95a_2f56d505","updated":"2016-08-30 15:20:27.000000000","message":"Also, I\u0027m not clear on how this information is used. If it is processed by other tools in a pipeline, adding anything is going to be weird. I think I\u0027ll just remove it.","commit_id":"eed0e0ae11862f2a32e97e4888bda97554fe3003"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c8916a484b68407a8400f104803295f6bc0b8aa9","unresolved":false,"context_lines":[{"line_number":949,"context_line":"        \"\"\"Print the current database version.\"\"\""},{"line_number":950,"context_line":"        print(migration.db_version(database\u003d\u0027api\u0027))"},{"line_number":951,"context_line":"        if CONF.placement_database.connection is not None:"},{"line_number":952,"context_line":"            print(migration.db_version(database\u003d\u0027placement\u0027))"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"class AgentBuildCommands(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_d67dd6b2","line":952,"in_reply_to":"fa7ab95a_ba9225f4","updated":"2016-08-31 08:38:04.000000000","message":"yeah, hadn\u0027t thought about that option, thats a good idea.","commit_id":"eed0e0ae11862f2a32e97e4888bda97554fe3003"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"700438ad2e1bc3f5ccb7b3d89151447c01c8d71a","unresolved":false,"context_lines":[{"line_number":942,"context_line":"        database using the API database migrations."},{"line_number":943,"context_line":"        \"\"\""},{"line_number":944,"context_line":"        if CONF.placement_database.connection is not None:"},{"line_number":945,"context_line":"            migration.db_sync(version, database\u003d\u0027placement\u0027)"},{"line_number":946,"context_line":"        return migration.db_sync(version, database\u003d\u0027api\u0027)"},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"    def version(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_ef571f00","line":945,"updated":"2016-09-06 08:21:42.000000000","message":"I think you are using placement things everywhere, i.e.\ndb_api.placement_context_manager.writer\nbecause you know it will be separate app or service.\nMaybe, we should have PlacementDbCommands.sync \nwhich can be called from ApiDbCommands.sync to use the same pattern?","commit_id":"7b538f4d618955c30c20aeab72674f7a5293705a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f9006c193336965dad59677de07e0573fce45007","unresolved":false,"context_lines":[{"line_number":942,"context_line":"        database using the API database migrations."},{"line_number":943,"context_line":"        \"\"\""},{"line_number":944,"context_line":"        if CONF.placement_database.connection is not None:"},{"line_number":945,"context_line":"            migration.db_sync(version, database\u003d\u0027placement\u0027)"},{"line_number":946,"context_line":"        return migration.db_sync(version, database\u003d\u0027api\u0027)"},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"    def version(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_f22e1ff9","line":945,"in_reply_to":"9a89bdaa_ef571f00","updated":"2016-09-06 09:55:29.000000000","message":"An earlier version of this change had that but was not what dansmith and other cores wanted. They wanted to be sure that there were no new commands and no new migrations.\n\nThere was a fair bit of discussion the correct way to satisfy the sometimes conflicting requirements and this was the way that made the most people happy.","commit_id":"7b538f4d618955c30c20aeab72674f7a5293705a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c99b31033d413d84a504a27ddee6ab7d274f169c","unresolved":false,"context_lines":[{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"        if CONF.placement_database.connection is not None:"},{"line_number":1025,"context_line":"            migration.db_sync(version, database\u003d\u0027placement\u0027)"},{"line_number":1026,"context_line":"        return migration.db_sync(version2, database\u003d\u0027api\u0027)"},{"line_number":1027,"context_line":""},{"line_number":1028,"context_line":"    def version(self):"},{"line_number":1029,"context_line":"        \"\"\"Print the current database version.\"\"\""}],"source_content_type":"text/x-python","patch_set":49,"id":"ff82abbf_7aba0fc1","line":1026,"updated":"2017-11-29 20:44:59.000000000","message":"If this is returning the result of the db_sync, should you \u0027and\u0027 in the result of the placement db_sync on L1025?","commit_id":"e906f156bf9fa0de74dcb001ffd161fa92c2c4fd"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5cbd198e15ace7488c77146064c392d61e718899","unresolved":false,"context_lines":[{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"        if CONF.placement_database.connection is not None:"},{"line_number":1025,"context_line":"            migration.db_sync(version, database\u003d\u0027placement\u0027)"},{"line_number":1026,"context_line":"        return migration.db_sync(version2, database\u003d\u0027api\u0027)"},{"line_number":1027,"context_line":""},{"line_number":1028,"context_line":"    def version(self):"},{"line_number":1029,"context_line":"        \"\"\"Print the current database version.\"\"\""}],"source_content_type":"text/x-python","patch_set":49,"id":"ff82abbf_7d65291d","line":1026,"in_reply_to":"ff82abbf_7aba0fc1","updated":"2017-11-29 21:35:11.000000000","message":"Well, you\u0027d think so, but if you chase those guys all the way down to their internals migrate.versioning.api:_migrate has no return clause.\n\nI suppose for sake of tidiness it would be the right thing to do but it would be lies, so I dunno.\n\nYour thoughts?","commit_id":"e906f156bf9fa0de74dcb001ffd161fa92c2c4fd"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"880e48233a4548a13966db479650c2f289b937c0","unresolved":false,"context_lines":[{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"        if CONF.placement_database.connection is not None:"},{"line_number":1025,"context_line":"            migration.db_sync(version, database\u003d\u0027placement\u0027)"},{"line_number":1026,"context_line":"        return migration.db_sync(version2, database\u003d\u0027api\u0027)"},{"line_number":1027,"context_line":""},{"line_number":1028,"context_line":"    def version(self):"},{"line_number":1029,"context_line":"        \"\"\"Print the current database version.\"\"\""}],"source_content_type":"text/x-python","patch_set":49,"id":"ff82abbf_c366d2bb","line":1026,"in_reply_to":"ff82abbf_7d65291d","updated":"2017-11-29 22:23:39.000000000","message":"Not so much tidiness, but preserving existing behavior in the change. I\u0027ve had patches bounced for lesser crimes.","commit_id":"e906f156bf9fa0de74dcb001ffd161fa92c2c4fd"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"8921c8f5a97c2c4500ba3eb53a04447c1fd32002","unresolved":false,"context_lines":[{"line_number":839,"context_line":"        # the placement sync to and with the api sync."},{"line_number":840,"context_line":"        result \u003d True"},{"line_number":841,"context_line":"        if CONF.placement_database.connection is not None:"},{"line_number":842,"context_line":"            result \u003d migration.db_sync(version, database\u003d\u0027placement\u0027)"},{"line_number":843,"context_line":"        return migration.db_sync(version2, database\u003d\u0027api\u0027) and result"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"    def version(self):"}],"source_content_type":"text/x-python","patch_set":75,"id":"df7087c5_26a10d95","line":842,"updated":"2018-03-14 19:26:18.000000000","message":"Probably better if this moves to its own command?","commit_id":"07ba50c028387d9fefa5a5b62e13f33058d16abf"}],"nova/conf/database.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"315d3d985031a6b2ec3c422cb259d5c19d583ef8","unresolved":false,"context_lines":[{"line_number":116,"context_line":"# also apply here"},{"line_number":117,"context_line":"placement_db_opts \u003d ["},{"line_number":118,"context_line":"    cfg.StrOpt(\u0027connection\u0027,"},{"line_number":119,"context_line":"               help\u003d\u0027\u0027,"},{"line_number":120,"context_line":"               secret\u003dTrue),"},{"line_number":121,"context_line":"    cfg.BoolOpt(\u0027sqlite_synchronous\u0027,"},{"line_number":122,"context_line":"                default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":88,"id":"9f6a8fd7_c1c53f0c","line":119,"range":{"start_line":119,"start_character":0,"end_line":119,"end_character":15},"updated":"2018-04-27 13:37:34.000000000","message":"I only note this because I worked on standardizing the structure of config files, and this is a non-standard form of indentation. If you look at the options above this section, as well as the other config files in nova/conf, you\u0027ll see that nearly all have been formatted so that the indentation of the additional params is one level (4 spaces). In fact, looking at the early patches, the indentation style *used to* match the options above, but somewhere around ps#73 they were changed to match the standard.\n\nDon\u0027t respin just for this, but if you do, please correct this.","commit_id":"5eb449bdac51ffa051be3fcad1b0a38f65ee48a3"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"9b4d9463711e023e02cd5169ce3a12634e52098f","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                                  help\u003d\"\"\""},{"line_number":110,"context_line":"The *Placement API Database* is a separate database which can be used with the"},{"line_number":111,"context_line":"new placement-api service. This database is optional: if connection option is"},{"line_number":112,"context_line":"not set, the api database will be used instead."},{"line_number":113,"context_line":"\"\"\")"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"# TODO(rpodolyaka): see the notes on help messages on api_db_opts above, those"}],"source_content_type":"text/x-python","patch_set":94,"id":"5f7c97a3_9eb43837","line":112,"range":{"start_line":112,"start_character":13,"end_line":112,"end_character":16},"updated":"2018-05-09 12:36:27.000000000","message":"the api means nova api, right?\n\nMaybe we could change to \"nova api\" to avoid confusing.","commit_id":"d402f2c8ce3c7e115b46f24a9859a38aaa41b21a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7b48fef5116c6d768435cfa777fd2a1bad707d50","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                                  help\u003d\"\"\""},{"line_number":110,"context_line":"The *Placement API Database* is a separate database which can be used with the"},{"line_number":111,"context_line":"new placement-api service. This database is optional: if connection option is"},{"line_number":112,"context_line":"not set, the api database will be used instead."},{"line_number":113,"context_line":"\"\"\")"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"# TODO(rpodolyaka): see the notes on help messages on api_db_opts above, those"}],"source_content_type":"text/x-python","patch_set":94,"id":"5f7c97a3_5ed78024","line":112,"range":{"start_line":112,"start_character":13,"end_line":112,"end_character":16},"in_reply_to":"5f7c97a3_9eb43837","updated":"2018-05-09 12:44:23.000000000","message":"That\u0027s a good idea. In fact, that suggests a few other changes here. I think it would be better to talk about the placement datatabase, not \"placement api database\". And then refer to the nova api database with its full name.\n\nThanks.","commit_id":"d402f2c8ce3c7e115b46f24a9859a38aaa41b21a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"3378398c7212a4ac904ce0798526b2b7bfad7d42","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                  help\u003d\"\"\""},{"line_number":113,"context_line":"The *Placement API Database* is a separate database which can be used with the"},{"line_number":114,"context_line":"new placement-api service. This database is optional: if connection option is"},{"line_number":115,"context_line":"not set, the api database will be used instead."},{"line_number":116,"context_line":"\"\"\")"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"# TODO(rpodolyaka): see the notes on help messages on api_db_opts above, those"}],"source_content_type":"text/x-python","patch_set":96,"id":"5f7c97a3_f2a61854","line":115,"range":{"start_line":115,"start_character":9,"end_line":115,"end_character":25},"updated":"2018-05-17 15:17:33.000000000","message":"I thought you were going to clarify the wording here, as per Kero\u0027s comment in PS94.","commit_id":"fc0104d11d1c49fc019199d275109f359945aef4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"88be7ab4b08333667bbcff95af61e2cb862302a3","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                  help\u003d\"\"\""},{"line_number":113,"context_line":"The *Placement API Database* is a separate database which can be used with the"},{"line_number":114,"context_line":"new placement-api service. This database is optional: if connection option is"},{"line_number":115,"context_line":"not set, the api database will be used instead."},{"line_number":116,"context_line":"\"\"\")"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"# TODO(rpodolyaka): see the notes on help messages on api_db_opts above, those"}],"source_content_type":"text/x-python","patch_set":96,"id":"5f7c97a3_1de5e50a","line":115,"range":{"start_line":115,"start_character":9,"end_line":115,"end_character":25},"in_reply_to":"5f7c97a3_f2a61854","updated":"2018-05-17 15:40:55.000000000","message":"I forgot, because yet another merge conflict came along and I raced through it without remembering. Thanks for the reminder, will do so now.","commit_id":"fc0104d11d1c49fc019199d275109f359945aef4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"33f9cfd99dec5937f98def91a4d12721876bd0f5","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                                  title\u003d\u0027Placement API database options\u0027,"},{"line_number":112,"context_line":"                                  help\u003d\"\"\""},{"line_number":113,"context_line":"The *Placement API Database* is a separate database which can be used with the"},{"line_number":114,"context_line":"new placement-api service. This database is optional: if the connection option"},{"line_number":115,"context_line":"is not set, the nova api database will be used instead."},{"line_number":116,"context_line":"\"\"\")"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_b0de0ad8","line":114,"range":{"start_line":114,"start_character":0,"end_line":114,"end_character":3},"updated":"2018-06-07 14:30:49.000000000","message":"not sure we need to call it \u0027new\u0027 anymore :)","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"61e155ad576e096f2883a145a71c20a529fdeeaf","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                                  title\u003d\u0027Placement API database options\u0027,"},{"line_number":112,"context_line":"                                  help\u003d\"\"\""},{"line_number":113,"context_line":"The *Placement API Database* is a separate database which can be used with the"},{"line_number":114,"context_line":"new placement-api service. This database is optional: if the connection option"},{"line_number":115,"context_line":"is not set, the nova api database will be used instead."},{"line_number":116,"context_line":"\"\"\")"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_d184c70d","line":114,"range":{"start_line":114,"start_character":0,"end_line":114,"end_character":3},"in_reply_to":"5f7c97a3_b0de0ad8","updated":"2018-06-11 13:53:53.000000000","message":"Done","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"33f9cfd99dec5937f98def91a4d12721876bd0f5","unresolved":false,"context_lines":[{"line_number":115,"context_line":"is not set, the nova api database will be used instead."},{"line_number":116,"context_line":"\"\"\")"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"# TODO(rpodolyaka): see the notes on help messages on api_db_opts above, those"},{"line_number":119,"context_line":"# also apply here"},{"line_number":120,"context_line":"placement_db_opts \u003d ["},{"line_number":121,"context_line":"    cfg.StrOpt(\u0027connection\u0027,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_30167a57","line":118,"range":{"start_line":118,"start_character":34,"end_line":118,"end_character":51},"updated":"2018-06-07 14:30:49.000000000","message":"strike?\n\nThe notes aren\u0027t on the help messages; they\u0027re on the opts themselves (and they smell like they ought to apply here).","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"61e155ad576e096f2883a145a71c20a529fdeeaf","unresolved":false,"context_lines":[{"line_number":115,"context_line":"is not set, the nova api database will be used instead."},{"line_number":116,"context_line":"\"\"\")"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"# TODO(rpodolyaka): see the notes on help messages on api_db_opts above, those"},{"line_number":119,"context_line":"# also apply here"},{"line_number":120,"context_line":"placement_db_opts \u003d ["},{"line_number":121,"context_line":"    cfg.StrOpt(\u0027connection\u0027,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_919f2f4f","line":118,"range":{"start_line":118,"start_character":34,"end_line":118,"end_character":51},"in_reply_to":"5f7c97a3_30167a57","updated":"2018-06-11 13:53:53.000000000","message":"I\u0027ve made some adjustments so some of the notes and todos make a bit more sense.","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"33f9cfd99dec5937f98def91a4d12721876bd0f5","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"# TODO(rpodolyaka): see the notes on help messages on api_db_opts above, those"},{"line_number":119,"context_line":"# also apply here"},{"line_number":120,"context_line":"placement_db_opts \u003d ["},{"line_number":121,"context_line":"    cfg.StrOpt(\u0027connection\u0027,"},{"line_number":122,"context_line":"        help\u003d\u0027\u0027,"},{"line_number":123,"context_line":"        secret\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_109ede06","line":120,"updated":"2018-06-07 14:30:49.000000000","message":"Noticed this doesn\u0027t have `connection_parameters`.  Not needed?","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"61e155ad576e096f2883a145a71c20a529fdeeaf","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"# TODO(rpodolyaka): see the notes on help messages on api_db_opts above, those"},{"line_number":119,"context_line":"# also apply here"},{"line_number":120,"context_line":"placement_db_opts \u003d ["},{"line_number":121,"context_line":"    cfg.StrOpt(\u0027connection\u0027,"},{"line_number":122,"context_line":"        help\u003d\u0027\u0027,"},{"line_number":123,"context_line":"        secret\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_11cc7f33","line":120,"in_reply_to":"5f7c97a3_109ede06","updated":"2018-06-11 13:53:53.000000000","message":"Looks like that was added within the last month, above. So yeah, will add it here, for completeness.\n\nIn the future we won\u0027t have to worry about this mess as we can use oslo_db\u0027s config more directly.\n\nGood eye","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"33f9cfd99dec5937f98def91a4d12721876bd0f5","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        help\u003d\u0027\u0027),"},{"line_number":133,"context_line":"    cfg.IntOpt(\u0027connection_recycle_time\u0027,"},{"line_number":134,"context_line":"        default\u003d3600,"},{"line_number":135,"context_line":"        deprecated_name\u003d\u0027idle_timeout\u0027,"},{"line_number":136,"context_line":"        help\u003d\u0027\u0027),"},{"line_number":137,"context_line":"    cfg.IntOpt(\u0027max_pool_size\u0027,"},{"line_number":138,"context_line":"        help\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_f07002dd","line":135,"range":{"start_line":135,"start_character":8,"end_line":135,"end_character":39},"updated":"2018-06-07 14:30:49.000000000","message":"Bad paste?","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cf9dc0d9e1a58965ae20febf9e64d0982478ba8e","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        help\u003d\u0027\u0027),"},{"line_number":133,"context_line":"    cfg.IntOpt(\u0027connection_recycle_time\u0027,"},{"line_number":134,"context_line":"        default\u003d3600,"},{"line_number":135,"context_line":"        deprecated_name\u003d\u0027idle_timeout\u0027,"},{"line_number":136,"context_line":"        help\u003d\u0027\u0027),"},{"line_number":137,"context_line":"    cfg.IntOpt(\u0027max_pool_size\u0027,"},{"line_number":138,"context_line":"        help\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_03973692","line":135,"range":{"start_line":135,"start_character":8,"end_line":135,"end_character":39},"in_reply_to":"5f7c97a3_3172db13","updated":"2018-06-11 13:57:51.000000000","message":"See note on PS103","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"61e155ad576e096f2883a145a71c20a529fdeeaf","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        help\u003d\u0027\u0027),"},{"line_number":133,"context_line":"    cfg.IntOpt(\u0027connection_recycle_time\u0027,"},{"line_number":134,"context_line":"        default\u003d3600,"},{"line_number":135,"context_line":"        deprecated_name\u003d\u0027idle_timeout\u0027,"},{"line_number":136,"context_line":"        help\u003d\u0027\u0027),"},{"line_number":137,"context_line":"    cfg.IntOpt(\u0027max_pool_size\u0027,"},{"line_number":138,"context_line":"        help\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_3172db13","line":135,"range":{"start_line":135,"start_character":8,"end_line":135,"end_character":39},"in_reply_to":"5f7c97a3_f07002dd","updated":"2018-06-11 13:53:53.000000000","message":"why do you say that, it\u0027s the same as above, no?","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"28cd08dafa831ff1a2b2ade27746b16116be5963","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        help\u003d\u0027\u0027),"},{"line_number":134,"context_line":"    cfg.IntOpt(\u0027connection_recycle_time\u0027,"},{"line_number":135,"context_line":"        default\u003d3600,"},{"line_number":136,"context_line":"        deprecated_name\u003d\u0027idle_timeout\u0027,"},{"line_number":137,"context_line":"        help\u003d\u0027\u0027),"},{"line_number":138,"context_line":"    cfg.IntOpt(\u0027max_pool_size\u0027,"},{"line_number":139,"context_line":"        help\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":103,"id":"5f7c97a3_380f013a","line":136,"range":{"start_line":136,"start_character":8,"end_line":136,"end_character":39},"updated":"2018-06-11 13:53:49.000000000","message":"I think this still needs to go.  IIUC, this says that there previously existed a [placement_database]idle_timeout opt, which is being deprecated and replaced with [placement_database]connection_recycle_time.  The former has never existed (because this whole group is new) so the deprecation is not appropriate.\n\n(Functionally, you would actually be allowing the user to specify [placement_database]idle_timeout in their config and have it show up as [placement_database]connection_recycle_time with a deprecation warning.)","commit_id":"889fcec84763c2f660ce2e449afbfa6d0ed188e0"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"59fd2b5e9bb25e289c4e0e534539708ebca6affa","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    main_context_manager.configure(**_get_db_conf(conf.database))"},{"line_number":111,"context_line":"    api_context_manager.configure(**_get_db_conf(conf.api_database))"},{"line_number":112,"context_line":"    if conf.placement_database.connection is None:"},{"line_number":113,"context_line":"        conf.placement_database \u003d conf.api_database"},{"line_number":114,"context_line":"    placement_context_manager.configure("},{"line_number":115,"context_line":"        **_get_db_conf(conf.placement_database))"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_ee6b1683","line":113,"updated":"2016-08-30 13:59:52.000000000","message":"hmm, I would rather we had a separate placement_conf variable that holds either of these two CONF values.\n\nthat way other things can also check for CONF.placement_database \u003d\u003d None\n\nThe -1 is for this bit (and the failing tests, I guess)","commit_id":"eed0e0ae11862f2a32e97e4888bda97554fe3003"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"6f15e424cc79410881feb3a7e49b880fb5f15991","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    main_context_manager.configure(**_get_db_conf(conf.database))"},{"line_number":111,"context_line":"    api_context_manager.configure(**_get_db_conf(conf.api_database))"},{"line_number":112,"context_line":"    if conf.placement_database.connection is None:"},{"line_number":113,"context_line":"        conf.placement_database \u003d conf.api_database"},{"line_number":114,"context_line":"    placement_context_manager.configure("},{"line_number":115,"context_line":"        **_get_db_conf(conf.placement_database))"},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_8c87efb3","line":113,"in_reply_to":"fa7ab95a_ee6b1683","updated":"2016-08-30 15:01:20.000000000","message":"ah yeah, that\u0027s an excellent point","commit_id":"eed0e0ae11862f2a32e97e4888bda97554fe3003"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d06975429f42f3e72411d6772645e343abb30376","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    main_context_manager.configure(**_get_db_conf(conf.database))"},{"line_number":111,"context_line":"    api_context_manager.configure(**_get_db_conf(conf.api_database))"},{"line_number":112,"context_line":"    if conf.placement_database.connection is None:"},{"line_number":113,"context_line":"        placement_database_conf \u003d copy.copy(conf.api_database)"},{"line_number":114,"context_line":"    else:"},{"line_number":115,"context_line":"        placement_database_conf \u003d conf.placement_database"},{"line_number":116,"context_line":"    placement_context_manager.configure("}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_d7bdcd03","line":113,"range":{"start_line":113,"start_character":34,"end_line":113,"end_character":44},"updated":"2016-08-31 09:56:34.000000000","message":"Nit: do we need to do that?","commit_id":"4164bfcf9e512b9d1492627de51fd864111d0009"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6b277085bc98a8dba399222173851fab11b0321c","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    main_context_manager.configure(**_get_db_conf(conf.database))"},{"line_number":111,"context_line":"    api_context_manager.configure(**_get_db_conf(conf.api_database))"},{"line_number":112,"context_line":"    if conf.placement_database.connection is None:"},{"line_number":113,"context_line":"        placement_context_manager.configure("},{"line_number":114,"context_line":"            **_get_db_conf(conf.api_database))"},{"line_number":115,"context_line":"    else:"},{"line_number":116,"context_line":"        placement_context_manager.configure("}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_570b7d7d","line":113,"updated":"2016-08-31 09:58:13.000000000","message":"thats simpler, cool.","commit_id":"44edd8db02790ef03fc96b590e6a85132be3de9f"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"700438ad2e1bc3f5ccb7b3d89151447c01c8d71a","unresolved":false,"context_lines":[{"line_number":109,"context_line":"def configure(conf):"},{"line_number":110,"context_line":"    main_context_manager.configure(**_get_db_conf(conf.database))"},{"line_number":111,"context_line":"    api_context_manager.configure(**_get_db_conf(conf.api_database))"},{"line_number":112,"context_line":"    if conf.placement_database.connection is None:"},{"line_number":113,"context_line":"        placement_context_manager.configure("},{"line_number":114,"context_line":"            **_get_db_conf(conf.api_database))"},{"line_number":115,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_efa55f04","line":112,"updated":"2016-09-06 08:21:42.000000000","message":"Isn\u0027t \"is not None\" too strict for config option?\nShould we check empty strings also?","commit_id":"7b538f4d618955c30c20aeab72674f7a5293705a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f9006c193336965dad59677de07e0573fce45007","unresolved":false,"context_lines":[{"line_number":109,"context_line":"def configure(conf):"},{"line_number":110,"context_line":"    main_context_manager.configure(**_get_db_conf(conf.database))"},{"line_number":111,"context_line":"    api_context_manager.configure(**_get_db_conf(conf.api_database))"},{"line_number":112,"context_line":"    if conf.placement_database.connection is None:"},{"line_number":113,"context_line":"        placement_context_manager.configure("},{"line_number":114,"context_line":"            **_get_db_conf(conf.api_database))"},{"line_number":115,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_126e2301","line":112,"in_reply_to":"9a89bdaa_efa55f04","updated":"2016-09-06 09:55:29.000000000","message":"That strictness is intentional. The idea is that only someone in the know will be setting placement_database.connection and if they do, we should attend to it. The default is None so the check here is \"is there no configuration for this setting, use the api database for the placement context manager\".","commit_id":"7b538f4d618955c30c20aeab72674f7a5293705a"}],"nova/db/sqlalchemy/migration.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"59fd2b5e9bb25e289c4e0e534539708ebca6affa","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    \"\"\"Get the path for the migrate repository.\"\"\""},{"line_number":173,"context_line":"    global _REPOSITORY"},{"line_number":174,"context_line":"    rel_path \u003d \u0027migrate_repo\u0027"},{"line_number":175,"context_line":"    if database \u003d\u003d \u0027api\u0027:"},{"line_number":176,"context_line":"        rel_path \u003d os.path.join(\u0027api_migrations\u0027, \u0027migrate_repo\u0027)"},{"line_number":177,"context_line":"    if database \u003d\u003d \u0027placement\u0027:"},{"line_number":178,"context_line":"        # NOTE(cdent): For the time being the placement database (if"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_eeacf68d","line":175,"updated":"2016-08-30 13:59:52.000000000","message":"micro nit: if database \u003d\u003d \u0027api\u0027 or database \u003d\u003d \u0027placement\u0027?","commit_id":"eed0e0ae11862f2a32e97e4888bda97554fe3003"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"6f15e424cc79410881feb3a7e49b880fb5f15991","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    \"\"\"Get the path for the migrate repository.\"\"\""},{"line_number":173,"context_line":"    global _REPOSITORY"},{"line_number":174,"context_line":"    rel_path \u003d \u0027migrate_repo\u0027"},{"line_number":175,"context_line":"    if database \u003d\u003d \u0027api\u0027:"},{"line_number":176,"context_line":"        rel_path \u003d os.path.join(\u0027api_migrations\u0027, \u0027migrate_repo\u0027)"},{"line_number":177,"context_line":"    if database \u003d\u003d \u0027placement\u0027:"},{"line_number":178,"context_line":"        # NOTE(cdent): For the time being the placement database (if"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_8c752fcc","line":175,"in_reply_to":"fa7ab95a_eeacf68d","updated":"2016-08-30 15:01:20.000000000","message":"I left it separate for the sake of the comment/future change, but yeah, your way probably better.","commit_id":"eed0e0ae11862f2a32e97e4888bda97554fe3003"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"dc89b42c82fb16fe0207a83591ec869b268c179d","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    if database \u003d\u003d \u0027api\u0027 or database \u003d\u003d \u0027placement\u0027:"},{"line_number":176,"context_line":"        # NOTE(cdent): For the time being the placement database (if"},{"line_number":177,"context_line":"        # it is being used) is a replica (in structure) of the api"},{"line_number":178,"context_line":"        # database."},{"line_number":179,"context_line":"        rel_path \u003d os.path.join(\u0027api_migrations\u0027, \u0027migrate_repo\u0027)"},{"line_number":180,"context_line":"    path \u003d os.path.join(os.path.abspath(os.path.dirname(__file__)),"},{"line_number":181,"context_line":"                        rel_path)"}],"source_content_type":"text/x-python","patch_set":46,"id":"3f4b6375_c28500d1","line":178,"updated":"2017-11-01 15:59:23.000000000","message":"Is the understanding that when placement is separated, this will no longer be the case?","commit_id":"80a24e4b05cf0fb06b986d3362ce37dd13a0a46a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ebc3a827699a5ce0853ac399f00bdec4fc831aeb","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    if database \u003d\u003d \u0027api\u0027 or database \u003d\u003d \u0027placement\u0027:"},{"line_number":176,"context_line":"        # NOTE(cdent): For the time being the placement database (if"},{"line_number":177,"context_line":"        # it is being used) is a replica (in structure) of the api"},{"line_number":178,"context_line":"        # database."},{"line_number":179,"context_line":"        rel_path \u003d os.path.join(\u0027api_migrations\u0027, \u0027migrate_repo\u0027)"},{"line_number":180,"context_line":"    path \u003d os.path.join(os.path.abspath(os.path.dirname(__file__)),"},{"line_number":181,"context_line":"                        rel_path)"}],"source_content_type":"text/x-python","patch_set":46,"id":"3f4b6375_c5598a35","line":178,"in_reply_to":"3f4b6375_c28500d1","updated":"2017-11-01 16:11:00.000000000","message":"I\u0027m not sure there is any understanding anymore. I\u0027m just keeping this branch alive so that if/when anything ever happens with either extraction of placement or that once upon a time idea of having a separate database, we\u0027re already cognizant of some issues.\n\nIt\u0027s been so long now, though, that I\u0027m not quite sure what\u0027s up.","commit_id":"80a24e4b05cf0fb06b986d3362ce37dd13a0a46a"}],"nova/objects/resource_provider.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2ed2bc9ed3ef5f35894a4e1fd8fdaa6f25679ad4","unresolved":false,"context_lines":[{"line_number":675,"context_line":"    }"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"    @staticmethod"},{"line_number":678,"context_line":"    @db_api.placement_context_manager.reader"},{"line_number":679,"context_line":"    def _get_all_by_resource_provider_uuid(context, rp_uuid):"},{"line_number":680,"context_line":"        query \u003d (context.session.query(models.Inventory.resource_class_id,"},{"line_number":681,"context_line":"                 func.coalesce(func.sum(models.Allocation.used), 0))"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_f67c4c22","line":678,"updated":"2016-09-01 09:01:36.000000000","message":"I don\u0027t feel 100% sure if we are missing one of these. A note for the follow up reviewer to double check that.\n\nWe probably want a hack like we do for nova-compute note being able to access the database:\nhttps://github.com/openstack/nova/blob/master/nova/cmd/compute.py#L50\nWe could do that in the placement API wsgi loader to ensure it can only access either the API or placement DB, depending on the configuration.\n\nIt feels like that should be a follow up test, but in theory that would allow us to test that we haven\u0027t got one of these decorators incorrect.","commit_id":"f1c8554656844960578e1d8098ecae4525c9abf8"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6c0a5956ad06edd6b68d09d2998b73571e384e06","unresolved":false,"context_lines":[{"line_number":675,"context_line":"    }"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"    @staticmethod"},{"line_number":678,"context_line":"    @db_api.placement_context_manager.reader"},{"line_number":679,"context_line":"    def _get_all_by_resource_provider_uuid(context, rp_uuid):"},{"line_number":680,"context_line":"        query \u003d (context.session.query(models.Inventory.resource_class_id,"},{"line_number":681,"context_line":"                 func.coalesce(func.sum(models.Allocation.used), 0))"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_27303101","line":678,"in_reply_to":"fa7ab95a_dd13e05a","updated":"2016-09-01 12:34:32.000000000","message":"So by reviewing this file (which is the only using a straight DB API for resource providers), I haven\u0027t found any DB call missing for the placement DB engine.\n\nAll the calls against those objects are made by the REST API, that\u0027s exactly why we merged the REST API for Newton because we didn\u0027t wanted to have the compute nodes calling northbound the API DB (or the placement DB) if they are in a cell v2. Sure, we can tho make a conservative test for making sure we\u0027d block, but it can be done longer term (and anyway, cells v2 will make sure it\u0027s litterally impossible because the placement DB will be close to the API DB)","commit_id":"f1c8554656844960578e1d8098ecae4525c9abf8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ae39c499f3fa52bf6251541e2e94eb407db15b28","unresolved":false,"context_lines":[{"line_number":675,"context_line":"    }"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"    @staticmethod"},{"line_number":678,"context_line":"    @db_api.placement_context_manager.reader"},{"line_number":679,"context_line":"    def _get_all_by_resource_provider_uuid(context, rp_uuid):"},{"line_number":680,"context_line":"        query \u003d (context.session.query(models.Inventory.resource_class_id,"},{"line_number":681,"context_line":"                 func.coalesce(func.sum(models.Allocation.used), 0))"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_dd13e05a","line":678,"in_reply_to":"fa7ab95a_f67c4c22","updated":"2016-09-01 10:54:06.000000000","message":"The resource_provider unittest can ensure it works with placement db, that can ensure we didn\u0027t miss any decorator. But yes, there isn\u0027t unittest or function test ensure to access either the API or placement DB, depending on the configuration.","commit_id":"f1c8554656844960578e1d8098ecae4525c9abf8"}],"nova/tests/functional/api/openstack/placement/fixtures.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d06975429f42f3e72411d6772645e343abb30376","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.conf.set_override(\u0027connection\u0027, \"sqlite://\","},{"line_number":46,"context_line":"                               group\u003d\u0027api_database\u0027)"},{"line_number":47,"context_line":"        self.conf.set_override(\u0027connection\u0027, \"sqlite://\","},{"line_number":48,"context_line":"                               group\u003d\u0027placement_database\u0027)"},{"line_number":49,"context_line":"        config.parse_args([], default_config_files\u003dNone, configure_db\u003dFalse,"},{"line_number":50,"context_line":"                          init_rpc\u003dFalse)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_37bef9d4","side":"PARENT","line":48,"updated":"2016-08-31 09:56:34.000000000","message":"So we default to testing where we share the DB with the API database, that feels like the correct thing to do.","commit_id":"bebc86bf5598571a28dd47f17a05dd616fe0f550"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d06975429f42f3e72411d6772645e343abb30376","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        config.parse_args([], default_config_files\u003dNone, configure_db\u003dFalse,"},{"line_number":48,"context_line":"                          init_rpc\u003dFalse)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # NOTE(cdent): api and main database are not used but we still need"},{"line_number":51,"context_line":"        # to manage them to make the fixtures work correctly and not cause"},{"line_number":52,"context_line":"        # conflicts with other tests in the same process."},{"line_number":53,"context_line":"        self.placement_db_fixture \u003d fixtures.Database(\u0027placement\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_f79bb170","line":50,"range":{"start_line":50,"start_character":23,"end_line":50,"end_character":35},"updated":"2016-08-31 09:56:34.000000000","message":"Nit: do we need to update that.","commit_id":"4164bfcf9e512b9d1492627de51fd864111d0009"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"6b277085bc98a8dba399222173851fab11b0321c","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        config.parse_args([], default_config_files\u003dNone, configure_db\u003dFalse,"},{"line_number":48,"context_line":"                          init_rpc\u003dFalse)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # NOTE(cdent): api and main database are not used but we still need"},{"line_number":51,"context_line":"        # to manage them to make the fixtures work correctly and not cause"},{"line_number":52,"context_line":"        # conflicts with other tests in the same process."},{"line_number":53,"context_line":"        self.placement_db_fixture \u003d fixtures.Database(\u0027placement\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_d776ad05","line":50,"range":{"start_line":50,"start_character":23,"end_line":50,"end_character":35},"updated":"2016-08-31 09:58:13.000000000","message":"Micro nit: this comment is out of date I think.","commit_id":"44edd8db02790ef03fc96b590e6a85132be3de9f"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0757bcb31f8145b667b28133b5a4293c8f347de7","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        config.parse_args([], default_config_files\u003dNone, configure_db\u003dFalse,"},{"line_number":48,"context_line":"                          init_rpc\u003dFalse)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # NOTE(cdent): api and main database are not used but we still need"},{"line_number":51,"context_line":"        # to manage them to make the fixtures work correctly and not cause"},{"line_number":52,"context_line":"        # conflicts with other tests in the same process."},{"line_number":53,"context_line":"        self.placement_db_fixture \u003d fixtures.Database(\u0027placement\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_da6174d5","line":50,"range":{"start_line":50,"start_character":23,"end_line":50,"end_character":35},"in_reply_to":"fa7ab95a_d776ad05","updated":"2016-08-31 10:02:50.000000000","message":"When I switch back to this stack from the allocations create_all stuff I\u0027ll fix this if it hasn\u0027t already made progress. I\u0027d just do it here, but I have a couple other things in the patches above and may as well get it in one. That\u0027ll be relatively soon.","commit_id":"44edd8db02790ef03fc96b590e6a85132be3de9f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fca1f289ce93af5a05cd57d0a657c76110fc0fa2","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        config.parse_args([], default_config_files\u003dNone, configure_db\u003dFalse,"},{"line_number":48,"context_line":"                          init_rpc\u003dFalse)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        # NOTE(cdent): api and main database are not used but we still need"},{"line_number":51,"context_line":"        # to manage them to make the fixtures work correctly and not cause"},{"line_number":52,"context_line":"        # conflicts with other tests in the same process."},{"line_number":53,"context_line":"        self.placement_db_fixture \u003d fixtures.Database(\u0027placement\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_1a2afce7","line":50,"range":{"start_line":50,"start_character":23,"end_line":50,"end_character":35},"in_reply_to":"fa7ab95a_da6174d5","updated":"2016-08-31 10:07:08.000000000","message":"Thats cool.","commit_id":"44edd8db02790ef03fc96b590e6a85132be3de9f"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"700438ad2e1bc3f5ccb7b3d89151447c01c8d71a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.placement_db_fixture \u003d fixtures.Database(\u0027placement\u0027)"},{"line_number":54,"context_line":"        self.api_db_fixture \u003d fixtures.Database(\u0027api\u0027)"},{"line_number":55,"context_line":"        self.main_db_fixture \u003d fixtures.Database(\u0027main\u0027)"},{"line_number":56,"context_line":"        self.placement_db_fixture.reset()"},{"line_number":57,"context_line":"        self.api_db_fixture.reset()"},{"line_number":58,"context_line":"        self.main_db_fixture.reset()"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_ef7c7f74","line":56,"updated":"2016-09-06 08:21:42.000000000","message":"Is it possible to use setUp() to don\u0027t miss something?","commit_id":"7b538f4d618955c30c20aeab72674f7a5293705a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"4b8ea0bf8dcfabaa1f48fa3ededfdb532cdb9b3f","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.placement_db_fixture \u003d fixtures.Database(\u0027placement\u0027)"},{"line_number":54,"context_line":"        self.api_db_fixture \u003d fixtures.Database(\u0027api\u0027)"},{"line_number":55,"context_line":"        self.main_db_fixture \u003d fixtures.Database(\u0027main\u0027)"},{"line_number":56,"context_line":"        self.placement_db_fixture.reset()"},{"line_number":57,"context_line":"        self.api_db_fixture.reset()"},{"line_number":58,"context_line":"        self.main_db_fixture.reset()"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_734e8c70","line":56,"in_reply_to":"9a89bdaa_1787edd7","updated":"2016-09-06 11:41:18.000000000","message":"the setUp currently does an addCleanup() which we do not want because the gabbi fixtures are not of class Fixture","commit_id":"7b538f4d618955c30c20aeab72674f7a5293705a"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"6baddf8e0727690ba77940e08cc80eba552a3d14","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.placement_db_fixture \u003d fixtures.Database(\u0027placement\u0027)"},{"line_number":54,"context_line":"        self.api_db_fixture \u003d fixtures.Database(\u0027api\u0027)"},{"line_number":55,"context_line":"        self.main_db_fixture \u003d fixtures.Database(\u0027main\u0027)"},{"line_number":56,"context_line":"        self.placement_db_fixture.reset()"},{"line_number":57,"context_line":"        self.api_db_fixture.reset()"},{"line_number":58,"context_line":"        self.main_db_fixture.reset()"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_1787edd7","line":56,"in_reply_to":"9a89bdaa_9207931b","updated":"2016-09-06 11:36:47.000000000","message":"I mean self.placement_db_fixture is fixtures.Fixture which has setUp and theoretically it can do more than only reset.","commit_id":"7b538f4d618955c30c20aeab72674f7a5293705a"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f9006c193336965dad59677de07e0573fce45007","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.placement_db_fixture \u003d fixtures.Database(\u0027placement\u0027)"},{"line_number":54,"context_line":"        self.api_db_fixture \u003d fixtures.Database(\u0027api\u0027)"},{"line_number":55,"context_line":"        self.main_db_fixture \u003d fixtures.Database(\u0027main\u0027)"},{"line_number":56,"context_line":"        self.placement_db_fixture.reset()"},{"line_number":57,"context_line":"        self.api_db_fixture.reset()"},{"line_number":58,"context_line":"        self.main_db_fixture.reset()"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_9207931b","line":56,"in_reply_to":"9a89bdaa_ef7c7f74","updated":"2016-09-06 09:55:29.000000000","message":"gabbi fixtures are not the same as setUp style fixtures so don\u0027t have their own \"setUp\" method.\n\nAlso, they are by design and convention, explicit in what they do. So it is intentional that in this case instance we enumerate exactly what is happening in the start_fixture and exactly what is happening in the stop_fixture.","commit_id":"7b538f4d618955c30c20aeab72674f7a5293705a"}],"nova/tests/functional/db/test_resource_provider.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"700438ad2e1bc3f5ccb7b3d89151447c01c8d71a","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def setUp(self):"},{"line_number":49,"context_line":"        super(ResourceProviderBaseCase, self).setUp()"},{"line_number":50,"context_line":"        self.useFixture(fixtures.Database(database\u003d\u0027placement\u0027))"},{"line_number":51,"context_line":"        self.context \u003d context.RequestContext(\u0027fake-user\u0027, \u0027fake-project\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def _make_allocation(self, rp_uuid\u003dNone):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_6f04efbf","line":50,"updated":"2016-09-06 08:21:42.000000000","message":"Good change, without main database will be quicker.","commit_id":"7b538f4d618955c30c20aeab72674f7a5293705a"}],"nova/tests/unit/cmd/test_status.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"33f9cfd99dec5937f98def91a4d12721876bd0f5","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        super(TestUpgradeCheckCellsV2, self).setUp()"},{"line_number":364,"context_line":"        self.output \u003d StringIO()"},{"line_number":365,"context_line":"        self.useFixture(fixtures.MonkeyPatch(\u0027sys.stdout\u0027, self.output))"},{"line_number":366,"context_line":"        self.useFixture(nova_fixtures.Database(database\u003d\u0027api\u0027))"},{"line_number":367,"context_line":"        self.cmd \u003d status.UpgradeCommands()"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    def test_check_no_cell_mappings(self):"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_1bffdf67","line":366,"updated":"2018-06-07 14:30:49.000000000","message":"not here?","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"33f9cfd99dec5937f98def91a4d12721876bd0f5","unresolved":false,"context_lines":[{"line_number":673,"context_line":"        self.output \u003d StringIO()"},{"line_number":674,"context_line":"        self.useFixture(fixtures.MonkeyPatch(\u0027sys.stdout\u0027, self.output))"},{"line_number":675,"context_line":"        # We always need the API DB to be setup."},{"line_number":676,"context_line":"        self.useFixture(nova_fixtures.Database(database\u003d\u0027api\u0027))"},{"line_number":677,"context_line":"        self.cmd \u003d status.UpgradeCommands()"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_3be97bb6","line":676,"updated":"2018-06-07 14:30:49.000000000","message":"or here?","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"33f9cfd99dec5937f98def91a4d12721876bd0f5","unresolved":false,"context_lines":[{"line_number":828,"context_line":"        super(TestUpgradeCheckAPIServiceVersion, self).setUp()"},{"line_number":829,"context_line":"        self.output \u003d StringIO()"},{"line_number":830,"context_line":"        self.useFixture(fixtures.MonkeyPatch(\u0027sys.stdout\u0027, self.output))"},{"line_number":831,"context_line":"        self.useFixture(nova_fixtures.Database(database\u003d\u0027api\u0027))"},{"line_number":832,"context_line":"        self.cmd \u003d status.UpgradeCommands()"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"    def test_check_cells_v1_enabled(self):"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_dbcf2755","line":831,"updated":"2018-06-07 14:30:49.000000000","message":"or here?\n\nGuessing it\u0027s because these test cases don\u0027t hit placement?\n\nWould future-proofing be a good idea?","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"61e155ad576e096f2883a145a71c20a529fdeeaf","unresolved":false,"context_lines":[{"line_number":828,"context_line":"        super(TestUpgradeCheckAPIServiceVersion, self).setUp()"},{"line_number":829,"context_line":"        self.output \u003d StringIO()"},{"line_number":830,"context_line":"        self.useFixture(fixtures.MonkeyPatch(\u0027sys.stdout\u0027, self.output))"},{"line_number":831,"context_line":"        self.useFixture(nova_fixtures.Database(database\u003d\u0027api\u0027))"},{"line_number":832,"context_line":"        self.cmd \u003d status.UpgradeCommands()"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"    def test_check_cells_v1_enabled(self):"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_f1ef8384","line":831,"in_reply_to":"5f7c97a3_dbcf2755","updated":"2018-06-11 13:53:53.000000000","message":"I\u0027m not sure what you mean by future proofing?\n\nPresumably, we only want the test to use what it actually uses and when it needs something else, it should break. And only then should we fix it.\n\nWhen placement is extracted we will not want to spin up a placement database, so doing so now, just in case, adds more stuff to be removed later.","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"cf9dc0d9e1a58965ae20febf9e64d0982478ba8e","unresolved":false,"context_lines":[{"line_number":828,"context_line":"        super(TestUpgradeCheckAPIServiceVersion, self).setUp()"},{"line_number":829,"context_line":"        self.output \u003d StringIO()"},{"line_number":830,"context_line":"        self.useFixture(fixtures.MonkeyPatch(\u0027sys.stdout\u0027, self.output))"},{"line_number":831,"context_line":"        self.useFixture(nova_fixtures.Database(database\u003d\u0027api\u0027))"},{"line_number":832,"context_line":"        self.cmd \u003d status.UpgradeCommands()"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"    def test_check_cells_v1_enabled(self):"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_83e82616","line":831,"in_reply_to":"5f7c97a3_f1ef8384","updated":"2018-06-11 13:57:51.000000000","message":"Yup, I buy that.  Thanks.","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"}],"releasenotes/notes/placement-database-2e087f379273535d.yaml":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"315d3d985031a6b2ec3c422cb259d5c19d583ef8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    An optional configuration group placement_database can be used in"},{"line_number":5,"context_line":"    nova.conf to configure a separate database for use with the placement"},{"line_number":6,"context_line":"    API."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":88,"id":"9f6a8fd7_c12f7fa5","line":4,"range":{"start_line":4,"start_character":36,"end_line":4,"end_character":54},"updated":"2018-04-27 13:37:34.000000000","message":"nit: should be quoted.","commit_id":"5eb449bdac51ffa051be3fcad1b0a38f65ee48a3"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"33f9cfd99dec5937f98def91a4d12721876bd0f5","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    nova.conf to configure a separate database for use with the placement"},{"line_number":6,"context_line":"    API."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    If ``placement_database.connection`` has a value this will be used as the"},{"line_number":9,"context_line":"    connection URL for the placement database. That database will be"},{"line_number":10,"context_line":"    a replica of the tables used in the API datbase. It will be created and"},{"line_number":11,"context_line":"    synchronized when the ``nova-manage api_db sync`` command is run."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":101,"id":"5f7c97a3_5b1317b9","line":9,"range":{"start_line":8,"start_character":53,"end_line":9,"end_character":23},"updated":"2018-06-07 14:30:49.000000000","message":"\"this section will be used to configure\" would be clearer","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"61e155ad576e096f2883a145a71c20a529fdeeaf","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    nova.conf to configure a separate database for use with the placement"},{"line_number":6,"context_line":"    API."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    If ``placement_database.connection`` has a value this will be used as the"},{"line_number":9,"context_line":"    connection URL for the placement database. That database will be"},{"line_number":10,"context_line":"    a replica of the tables used in the API datbase. It will be created and"},{"line_number":11,"context_line":"    synchronized when the ``nova-manage api_db sync`` command is run."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":101,"id":"5f7c97a3_f19463ea","line":9,"range":{"start_line":8,"start_character":53,"end_line":9,"end_character":23},"in_reply_to":"5f7c97a3_5b1317b9","updated":"2018-06-11 13:53:53.000000000","message":"Done","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"33f9cfd99dec5937f98def91a4d12721876bd0f5","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    If ``placement_database.connection`` has a value this will be used as the"},{"line_number":9,"context_line":"    connection URL for the placement database. That database will be"},{"line_number":10,"context_line":"    a replica of the tables used in the API datbase. It will be created and"},{"line_number":11,"context_line":"    synchronized when the ``nova-manage api_db sync`` command is run."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    When the setting is ``None`` the existing settings for the ``api_database``"}],"source_content_type":"text/x-yaml","patch_set":101,"id":"5f7c97a3_1b34bf49","line":10,"range":{"start_line":10,"start_character":44,"end_line":10,"end_character":51},"updated":"2018-06-07 14:30:49.000000000","message":"database","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"61e155ad576e096f2883a145a71c20a529fdeeaf","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    If ``placement_database.connection`` has a value this will be used as the"},{"line_number":9,"context_line":"    connection URL for the placement database. That database will be"},{"line_number":10,"context_line":"    a replica of the tables used in the API datbase. It will be created and"},{"line_number":11,"context_line":"    synchronized when the ``nova-manage api_db sync`` command is run."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    When the setting is ``None`` the existing settings for the ``api_database``"}],"source_content_type":"text/x-yaml","patch_set":101,"id":"5f7c97a3_b19a6b10","line":10,"range":{"start_line":10,"start_character":44,"end_line":10,"end_character":51},"in_reply_to":"5f7c97a3_1b34bf49","updated":"2018-06-11 13:53:53.000000000","message":"Done","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"33f9cfd99dec5937f98def91a4d12721876bd0f5","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    a replica of the tables used in the API datbase. It will be created and"},{"line_number":11,"context_line":"    synchronized when the ``nova-manage api_db sync`` command is run."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    When the setting is ``None`` the existing settings for the ``api_database``"},{"line_number":14,"context_line":"    will be used for hosting placement API data."}],"source_content_type":"text/x-yaml","patch_set":101,"id":"5f7c97a3_fb21c3fd","line":13,"range":{"start_line":13,"start_character":24,"end_line":13,"end_character":32},"updated":"2018-06-07 14:30:49.000000000","message":"omitted?  unset?","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"61e155ad576e096f2883a145a71c20a529fdeeaf","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    a replica of the tables used in the API datbase. It will be created and"},{"line_number":11,"context_line":"    synchronized when the ``nova-manage api_db sync`` command is run."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    When the setting is ``None`` the existing settings for the ``api_database``"},{"line_number":14,"context_line":"    will be used for hosting placement API data."}],"source_content_type":"text/x-yaml","patch_set":101,"id":"5f7c97a3_d19fe7ff","line":13,"range":{"start_line":13,"start_character":24,"end_line":13,"end_character":32},"in_reply_to":"5f7c97a3_fb21c3fd","updated":"2018-06-11 13:53:53.000000000","message":"Done","commit_id":"ace292e447f33f82db7c6f664f006ffdd5f044d9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0c077cdac5e447765a193bf7a13bdbef23bf4403","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    If ``placement_database.connection`` has a value then the"},{"line_number":9,"context_line":"    ``placement_database`` configuration group will be used to configure the"},{"line_number":10,"context_line":"    placement database, including using ``connection`` to identify the target"},{"line_number":11,"context_line":"    database. That database will be a replica of the tables used in the API"},{"line_number":12,"context_line":"    database. It will be created and synchronized when the ``nova-manage api_db"},{"line_number":13,"context_line":"    sync`` command is run."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    When the setting is omitted the existing settings for the ``api_database``"},{"line_number":16,"context_line":"    will be used for hosting placement API data."}],"source_content_type":"text/x-yaml","patch_set":107,"id":"5f7c97a3_8109ab95","line":13,"range":{"start_line":11,"start_character":14,"end_line":13,"end_character":26},"updated":"2018-06-14 13:00:20.000000000","message":"I think this can be misunderstood in a way that the deployer might think that nova-manage db sync will do a real replication of _data_ from the API database to the new placement database. I think we should state that separate placement db can be used in a new deployment out of the box, but existing deployments converting to a separate placement db config needs to do _manual data replication_.","commit_id":"5f430d8eae6fa4f825c518cd33b51d382695e68f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0e34d46526349dcd7206d723dd0af576041a057e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    ``placement_database`` configuration group will be used to configure a"},{"line_number":10,"context_line":"    separate placement database, including using ``connection`` to identify the"},{"line_number":11,"context_line":"    target database. That database will have a schema that is a replica of all"},{"line_number":12,"context_line":"    the tables used in the API database. The new database will be created and"},{"line_number":13,"context_line":"    synchronized when the ``nova-manage api_db sync`` command is run."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    When the ``placement_database.connection`` setting is omitted the existing"}],"source_content_type":"text/x-yaml","patch_set":109,"id":"5f7c97a3_4c0b7f21","line":12,"range":{"start_line":12,"start_character":45,"end_line":12,"end_character":73},"updated":"2018-06-18 20:54:09.000000000","message":"This isn\u0027t true, nova never creates a database, it just creates the schema.","commit_id":"0044beb3588b81515544c68f332086061ee3f386"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1bc8366776bbb93e44ff95284814e47ed178a9ae","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    ``placement_database`` configuration group will be used to configure a"},{"line_number":10,"context_line":"    separate placement database, including using ``connection`` to identify the"},{"line_number":11,"context_line":"    target database. That database will have a schema that is a replica of all"},{"line_number":12,"context_line":"    the tables used in the API database. The new database will be created and"},{"line_number":13,"context_line":"    synchronized when the ``nova-manage api_db sync`` command is run."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    When the ``placement_database.connection`` setting is omitted the existing"}],"source_content_type":"text/x-yaml","patch_set":109,"id":"5f7c97a3_6c6d1bcb","line":12,"range":{"start_line":12,"start_character":45,"end_line":12,"end_character":73},"in_reply_to":"5f7c97a3_4c0b7f21","updated":"2018-06-18 20:58:16.000000000","message":"https://review.openstack.org/#/c/576265/","commit_id":"0044beb3588b81515544c68f332086061ee3f386"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"cae6d822048795c9af5d56f027fbf052b4037c50","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    ``placement_database`` configuration group will be used to configure a"},{"line_number":10,"context_line":"    separate placement database, including using ``connection`` to identify the"},{"line_number":11,"context_line":"    target database. That database will have a schema that is a replica of all"},{"line_number":12,"context_line":"    the tables used in the API database. The new database will be created and"},{"line_number":13,"context_line":"    synchronized when the ``nova-manage api_db sync`` command is run."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    When the ``placement_database.connection`` setting is omitted the existing"}],"source_content_type":"text/x-yaml","patch_set":109,"id":"5f7c97a3_cca1cfaa","line":12,"range":{"start_line":12,"start_character":45,"end_line":12,"end_character":73},"in_reply_to":"5f7c97a3_6c6d1bcb","updated":"2018-06-18 21:11:45.000000000","message":"thanks","commit_id":"0044beb3588b81515544c68f332086061ee3f386"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0e34d46526349dcd7206d723dd0af576041a057e","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    separate placement database, including using ``connection`` to identify the"},{"line_number":11,"context_line":"    target database. That database will have a schema that is a replica of all"},{"line_number":12,"context_line":"    the tables used in the API database. The new database will be created and"},{"line_number":13,"context_line":"    synchronized when the ``nova-manage api_db sync`` command is run."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    When the ``placement_database.connection`` setting is omitted the existing"},{"line_number":16,"context_line":"    settings for the ``api_database`` will be used for hosting placement data."}],"source_content_type":"text/x-yaml","patch_set":109,"id":"5f7c97a3_6c1f5b5b","line":13,"range":{"start_line":13,"start_character":40,"end_line":13,"end_character":46},"updated":"2018-06-18 20:54:09.000000000","message":"Should we add a \"nova-manage placement db_sync\" command?","commit_id":"0044beb3588b81515544c68f332086061ee3f386"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"cae6d822048795c9af5d56f027fbf052b4037c50","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    separate placement database, including using ``connection`` to identify the"},{"line_number":11,"context_line":"    target database. That database will have a schema that is a replica of all"},{"line_number":12,"context_line":"    the tables used in the API database. The new database will be created and"},{"line_number":13,"context_line":"    synchronized when the ``nova-manage api_db sync`` command is run."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    When the ``placement_database.connection`` setting is omitted the existing"},{"line_number":16,"context_line":"    settings for the ``api_database`` will be used for hosting placement data."}],"source_content_type":"text/x-yaml","patch_set":109,"id":"5f7c97a3_6c819bfb","line":13,"range":{"start_line":13,"start_character":40,"end_line":13,"end_character":46},"in_reply_to":"5f7c97a3_6c1f5b5b","updated":"2018-06-18 21:11:45.000000000","message":"Over the couple of years that this has been in flight I\u0027ve gone back and forth on that. By the time we rolled around to now I figured it would be churn: if do actually extract placement at the start of Stein, now we\u0027re gonna have \u0027placement-manage\u0027 or something like, and that\u0027s three different commands for a similar thing, so I figured, meh.","commit_id":"0044beb3588b81515544c68f332086061ee3f386"}]}
