)]}'
{"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d7d6bd3861d51aac236d9b7bdc375d8c195d12f4","unresolved":false,"context_lines":[{"line_number":6311,"context_line":"            return result_delete.rowcount"},{"line_number":6312,"context_line":"    except db_exc.DBReferenceError as ex:"},{"line_number":6313,"context_line":"        LOG.warning(_LW(\u0027Failed to archive %(table)s: %(error)s\u0027),"},{"line_number":6314,"context_line":"                    {\u0027table\u0027: table.__tablename__,"},{"line_number":6315,"context_line":"                     \u0027error\u0027: six.text_type(ex)})"},{"line_number":6316,"context_line":""},{"line_number":6317,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a8bc5a2_83e32233","line":6314,"range":{"start_line":6314,"start_character":36,"end_line":6314,"end_character":49},"updated":"2016-09-27 18:27:21.000000000","message":"oooo I hope this doesn\u0027t change at some point...I think there is a table.name attribute you can use though:\n\nhttp://docs.sqlalchemy.org/en/latest/core/metadata.html?highlight\u003d.name#sqlalchemy.schema.Table.params.name","commit_id":"6c8f551c6b64f65d3ab701c68a7f006a11ea8361"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d8492169a375e8d981285c03c3b2017825c80352","unresolved":false,"context_lines":[{"line_number":6311,"context_line":"            return result_delete.rowcount"},{"line_number":6312,"context_line":"    except db_exc.DBReferenceError as ex:"},{"line_number":6313,"context_line":"        LOG.warning(_LW(\u0027Failed to archive %(table)s: %(error)s\u0027),"},{"line_number":6314,"context_line":"                    {\u0027table\u0027: table.__tablename__,"},{"line_number":6315,"context_line":"                     \u0027error\u0027: six.text_type(ex)})"},{"line_number":6316,"context_line":""},{"line_number":6317,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a8bc5a2_e36b06f0","line":6314,"range":{"start_line":6314,"start_character":36,"end_line":6314,"end_character":49},"in_reply_to":"5a8bc5a2_83e1629d","updated":"2016-09-27 18:30:49.000000000","message":"Oh right.","commit_id":"6c8f551c6b64f65d3ab701c68a7f006a11ea8361"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c97cefe6aceb3b8f4d5f3ef7a7d6acddb783b912","unresolved":false,"context_lines":[{"line_number":6311,"context_line":"            return result_delete.rowcount"},{"line_number":6312,"context_line":"    except db_exc.DBReferenceError as ex:"},{"line_number":6313,"context_line":"        LOG.warning(_LW(\u0027Failed to archive %(table)s: %(error)s\u0027),"},{"line_number":6314,"context_line":"                    {\u0027table\u0027: table.__tablename__,"},{"line_number":6315,"context_line":"                     \u0027error\u0027: six.text_type(ex)})"},{"line_number":6316,"context_line":""},{"line_number":6317,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a8bc5a2_83e1629d","line":6314,"range":{"start_line":6314,"start_character":36,"end_line":6314,"end_character":49},"in_reply_to":"5a8bc5a2_83e32233","updated":"2016-09-27 18:29:22.000000000","message":"It\u0027s in all our class definitions, so I think it\u0027s okay.","commit_id":"6c8f551c6b64f65d3ab701c68a7f006a11ea8361"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d7d6bd3861d51aac236d9b7bdc375d8c195d12f4","unresolved":false,"context_lines":[{"line_number":6357,"context_line":"    # NOTE(clecomte): Tables instance_actions and instances_actions_events"},{"line_number":6358,"context_line":"    # have to be manage differently so we soft-delete them here to let"},{"line_number":6359,"context_line":"    # the archive work the same for all tables"},{"line_number":6360,"context_line":"    # NOTE(takashin): The record in table migrations should be"},{"line_number":6361,"context_line":"    # soft deleted when the instance is deleted."},{"line_number":6362,"context_line":"    # This is just for upgrading."},{"line_number":6363,"context_line":"    if tablename in (\"instance_actions\", \"migrations\"):"},{"line_number":6364,"context_line":"        instances \u003d models.BASE.metadata.tables[\"instances\"]"},{"line_number":6365,"context_line":"        deleted_instances \u003d sql.select([instances.c.uuid]).\\"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a8bc5a2_208884c6","line":6362,"range":{"start_line":6360,"start_character":4,"end_line":6362,"end_character":33},"updated":"2016-09-27 18:27:21.000000000","message":"Couldn\u0027t we remove this workaround now?","commit_id":"6c8f551c6b64f65d3ab701c68a7f006a11ea8361"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d7d6bd3861d51aac236d9b7bdc375d8c195d12f4","unresolved":false,"context_lines":[{"line_number":6360,"context_line":"    # NOTE(takashin): The record in table migrations should be"},{"line_number":6361,"context_line":"    # soft deleted when the instance is deleted."},{"line_number":6362,"context_line":"    # This is just for upgrading."},{"line_number":6363,"context_line":"    if tablename in (\"instance_actions\", \"migrations\"):"},{"line_number":6364,"context_line":"        instances \u003d models.BASE.metadata.tables[\"instances\"]"},{"line_number":6365,"context_line":"        deleted_instances \u003d sql.select([instances.c.uuid]).\\"},{"line_number":6366,"context_line":"            where(instances.c.deleted !\u003d instances.c.deleted.default.arg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a8bc5a2_60928cf8","line":6363,"range":{"start_line":6363,"start_character":42,"end_line":6363,"end_character":52},"updated":"2016-09-27 18:27:21.000000000","message":"This I mean.","commit_id":"6c8f551c6b64f65d3ab701c68a7f006a11ea8361"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c97cefe6aceb3b8f4d5f3ef7a7d6acddb783b912","unresolved":false,"context_lines":[{"line_number":6360,"context_line":"    # NOTE(takashin): The record in table migrations should be"},{"line_number":6361,"context_line":"    # soft deleted when the instance is deleted."},{"line_number":6362,"context_line":"    # This is just for upgrading."},{"line_number":6363,"context_line":"    if tablename in (\"instance_actions\", \"migrations\"):"},{"line_number":6364,"context_line":"        instances \u003d models.BASE.metadata.tables[\"instances\"]"},{"line_number":6365,"context_line":"        deleted_instances \u003d sql.select([instances.c.uuid]).\\"},{"line_number":6366,"context_line":"            where(instances.c.deleted !\u003d instances.c.deleted.default.arg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a8bc5a2_e3e6a6af","line":6363,"range":{"start_line":6363,"start_character":42,"end_line":6363,"end_character":52},"in_reply_to":"5a8bc5a2_60928cf8","updated":"2016-09-27 18:29:22.000000000","message":"Yeah, let me remove that and try the reduction on the sample database again to make sure we\u0027re still good.","commit_id":"6c8f551c6b64f65d3ab701c68a7f006a11ea8361"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"36b29a13be01ac0cfbdcecdb72767e5cb804b705","unresolved":false,"context_lines":[{"line_number":6278,"context_line":"                                 max_rows):"},{"line_number":6279,"context_line":"    \"\"\"Look for records that pertain to deleted instances, but may not be"},{"line_number":6280,"context_line":"    deleted themselves. This catches cases where we delete an instance,"},{"line_number":6281,"context_line":"    but leave some residue because of a double failure."},{"line_number":6282,"context_line":""},{"line_number":6283,"context_line":"    Logic is: if I have a column called instance_uuid, and that instance"},{"line_number":6284,"context_line":"    is deleted, then I can be deleted."}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_6080cc8c","line":6281,"range":{"start_line":6281,"start_character":40,"end_line":6281,"end_character":54},"updated":"2016-09-27 18:30:47.000000000","message":"What do you mean by \"double failure,\" a failure that occurs while deleting an instance? It would help people like me to use a few more words here.","commit_id":"93fe3f45228ab107383322d6682ad7201a535c1b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"754a75aebe8e97aedeb6a4523c1764eb7c2d99a4","unresolved":false,"context_lines":[{"line_number":6278,"context_line":"                                 max_rows):"},{"line_number":6279,"context_line":"    \"\"\"Look for records that pertain to deleted instances, but may not be"},{"line_number":6280,"context_line":"    deleted themselves. This catches cases where we delete an instance,"},{"line_number":6281,"context_line":"    but leave some residue because of a double failure."},{"line_number":6282,"context_line":""},{"line_number":6283,"context_line":"    Logic is: if I have a column called instance_uuid, and that instance"},{"line_number":6284,"context_line":"    is deleted, then I can be deleted."}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_43211ab4","line":6281,"range":{"start_line":6281,"start_character":40,"end_line":6281,"end_character":54},"in_reply_to":"5a8bc5a2_6080cc8c","updated":"2016-09-27 18:32:59.000000000","message":"Meaning a failure in an error handling routine. Like, first failure, we go to clean up our mess, but whilst doing that, we fail again and leave residue.","commit_id":"93fe3f45228ab107383322d6682ad7201a535c1b"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"36b29a13be01ac0cfbdcecdb72767e5cb804b705","unresolved":false,"context_lines":[{"line_number":6409,"context_line":"                        \"%(tablename)s: %(error)s\"),"},{"line_number":6410,"context_line":"                    {\u0027tablename\u0027: tablename, \u0027error\u0027: six.text_type(ex)})"},{"line_number":6411,"context_line":""},{"line_number":6412,"context_line":"    if (rows_archived \u003c max_rows and \u0027instance_uuid\u0027 in columns):"},{"line_number":6413,"context_line":"        instances \u003d models.BASE.metadata.tables[\u0027instances\u0027]"},{"line_number":6414,"context_line":"        extra \u003d _archive_if_instance_deleted(table, shadow_table, instances,"},{"line_number":6415,"context_line":"                                             conn, max_rows - rows_archived)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_43abdad6","line":6412,"range":{"start_line":6412,"start_character":8,"end_line":6412,"end_character":21},"updated":"2016-09-27 18:30:47.000000000","message":"It looks like rows_archived will be undefined if a DBReferenceError is raised.","commit_id":"93fe3f45228ab107383322d6682ad7201a535c1b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"754a75aebe8e97aedeb6a4523c1764eb7c2d99a4","unresolved":false,"context_lines":[{"line_number":6409,"context_line":"                        \"%(tablename)s: %(error)s\"),"},{"line_number":6410,"context_line":"                    {\u0027tablename\u0027: tablename, \u0027error\u0027: six.text_type(ex)})"},{"line_number":6411,"context_line":""},{"line_number":6412,"context_line":"    if (rows_archived \u003c max_rows and \u0027instance_uuid\u0027 in columns):"},{"line_number":6413,"context_line":"        instances \u003d models.BASE.metadata.tables[\u0027instances\u0027]"},{"line_number":6414,"context_line":"        extra \u003d _archive_if_instance_deleted(table, shadow_table, instances,"},{"line_number":6415,"context_line":"                                             conn, max_rows - rows_archived)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_e310665c","line":6412,"range":{"start_line":6412,"start_character":8,"end_line":6412,"end_character":21},"in_reply_to":"5a8bc5a2_43abdad6","updated":"2016-09-27 18:32:59.000000000","message":"Nope, it\u0027s defined on L6339.","commit_id":"93fe3f45228ab107383322d6682ad7201a535c1b"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6769aaf0d61d40a45aa7e6df6dfe71e28f0543ba","unresolved":false,"context_lines":[{"line_number":6409,"context_line":"                        \"%(tablename)s: %(error)s\"),"},{"line_number":6410,"context_line":"                    {\u0027tablename\u0027: tablename, \u0027error\u0027: six.text_type(ex)})"},{"line_number":6411,"context_line":""},{"line_number":6412,"context_line":"    if (rows_archived \u003c max_rows and \u0027instance_uuid\u0027 in columns):"},{"line_number":6413,"context_line":"        instances \u003d models.BASE.metadata.tables[\u0027instances\u0027]"},{"line_number":6414,"context_line":"        extra \u003d _archive_if_instance_deleted(table, shadow_table, instances,"},{"line_number":6415,"context_line":"                                             conn, max_rows - rows_archived)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a8bc5a2_26397cd9","line":6412,"range":{"start_line":6412,"start_character":8,"end_line":6412,"end_character":21},"in_reply_to":"5a8bc5a2_e310665c","updated":"2016-09-27 18:35:14.000000000","message":"Ah, my bad.","commit_id":"93fe3f45228ab107383322d6682ad7201a535c1b"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6ee8decad399e8a70edcf6e65717eecc5c9b6185","unresolved":false,"context_lines":[{"line_number":6411,"context_line":"                        \"%(tablename)s: %(error)s\"),"},{"line_number":6412,"context_line":"                    {\u0027tablename\u0027: tablename, \u0027error\u0027: six.text_type(ex)})"},{"line_number":6413,"context_line":""},{"line_number":6414,"context_line":"    if (rows_archived \u003c max_rows and \u0027instance_uuid\u0027 in columns):"},{"line_number":6415,"context_line":"        instances \u003d models.BASE.metadata.tables[\u0027instances\u0027]"},{"line_number":6416,"context_line":"        extra \u003d _archive_if_instance_deleted(table, shadow_table, instances,"},{"line_number":6417,"context_line":"                                             conn, max_rows - rows_archived)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a8bc5a2_2caf9b2c","line":6414,"range":{"start_line":6414,"start_character":8,"end_line":6414,"end_character":32},"updated":"2016-09-27 19:35:41.000000000","message":"FYI, the python 3 jobs were failing on this earlier PS because python 3 doesn\u0027t allow \u0027int \u003c None\u0027 comparison and python 2 does. In python 2, it evaluates to False. In python 3, it\u0027s a TypeError. The max_rows defaults to None where None means no maximum, archive everything and the failing tests were using max_rows\u003dNone.","commit_id":"72a1e0573ab94bfd9cdda4cd783a6e1e7a590b63"}]}
