)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"19cf7825b7dfd4b72c69681c3f077e34f05456ef","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Daniel Salinas \u003cimsplitbit@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-04-22 08:55:31 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement topology api"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Implements: blueprint replication-v1"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"baada198_79a9ea8d","line":7,"updated":"2014-08-05 06:58:22.000000000","message":"Can you please specify what \u0027topology API\u0027 means? I can find no mention to it in the wiki page https://wiki.openstack.org/wiki/Trove/Blueprints/Trove-v1-MySQL-Replication nor in the blueprint replication-v1","commit_id":"78e86425d00db95fd02155ee85386435c68e7524"}],"trove/db/sqlalchemy/migrate_repo/versions/027_add_instance_topology.py":[{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"b79c6e4596e0c9348796a087c539f637b0f7c2cc","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # Primary key is datastore/instance id"},{"line_number":43,"context_line":"    PrimaryKeyConstraint(\u0027instance_id\u0027, \u0027datastore\u0027),"},{"line_number":44,"context_line":"    # Add an index for optimizing find_all\u0027s on instance_id"},{"line_number":45,"context_line":"    UniqueConstraint(\u0027instance_id\u0027),"},{"line_number":46,"context_line":")"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F344%3D","line":45,"updated":"2014-04-17 19:30:44.000000000","message":"Can there be a unique constraint on instance_id?  Aren\u0027t there multiples in the table, distinguished by datastore?","commit_id":"dc5a479e13986909736dab20f56859e028bd4a06"}],"trove/tests/unittests/topology/test_topology_service.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"unresolved":false,"context_lines":[{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":6,"context_line":"#    a copy of the License at"},{"line_number":7,"context_line":"#"},{"line_number":8,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":9,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FUEs%3D","line":6,"updated":"2014-04-22 15:13:05.000000000","message":"file should be empty","commit_id":"78e86425d00db95fd02155ee85386435c68e7524"}],"trove/topology/models.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"51e3ca3eb15e2409d9de312f7cbb752f6e2739db","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            self.save()"},{"line_number":65,"context_line":"        else:"},{"line_number":66,"context_line":"            # Nowhere else to go, gotta raise"},{"line_number":67,"context_line":"            raise exception.TopologyModelError(model_name\u003d\"Topology\")"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @property"},{"line_number":70,"context_line":"    def datastore(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F62E%3D","line":67,"updated":"2014-04-16 14:10:39.000000000","message":"model_name\u003dTopology.__name__","commit_id":"dc5a479e13986909736dab20f56859e028bd4a06"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"51e3ca3eb15e2409d9de312f7cbb752f6e2739db","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # topologies for a given datastore and this is done with a key based"},{"line_number":119,"context_line":"        # SELECT so it should be an extremely fast operation."},{"line_number":120,"context_line":"        if self.context:"},{"line_number":121,"context_line":"            self.topologies \u003d DBTopologies.find_all("},{"line_number":122,"context_line":"                instance_id\u003dself.instance_id, deleted\u003dFalse).all()"},{"line_number":123,"context_line":"            self.topologies \u003d [Topology(self.context, t)"},{"line_number":124,"context_line":"                               for t in self.topologies]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2F61g%3D","line":121,"updated":"2014-04-16 14:10:39.000000000","message":"would it be better to use try:except block to avoid exception when no models were found","commit_id":"dc5a479e13986909736dab20f56859e028bd4a06"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"b79c6e4596e0c9348796a087c539f637b0f7c2cc","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # topologies for a given datastore and this is done with a key based"},{"line_number":119,"context_line":"        # SELECT so it should be an extremely fast operation."},{"line_number":120,"context_line":"        if self.context:"},{"line_number":121,"context_line":"            self.topologies \u003d DBTopologies.find_all("},{"line_number":122,"context_line":"                instance_id\u003dself.instance_id, deleted\u003dFalse).all()"},{"line_number":123,"context_line":"            self.topologies \u003d [Topology(self.context, t)"},{"line_number":124,"context_line":"                               for t in self.topologies]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FvaI%3D","line":121,"in_reply_to":"AAAAXH%2F%2F61g%3D","updated":"2014-04-17 19:30:44.000000000","message":"Are you suggesting that find_all() would throw an exception in the event that there are no topologies to be found?  Or are you suggesting that this method should add context to the exception from find_all() then rethrow it?","commit_id":"dc5a479e13986909736dab20f56859e028bd4a06"},{"author":{"_account_id":971,"name":"Daniel Salinas","email":"imsplitbit@gmail.com","username":"imsplitbit"},"change_message_id":"ba464bc2c4c19534af6897c0a754f925fcdb1af1","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # topologies for a given datastore and this is done with a key based"},{"line_number":119,"context_line":"        # SELECT so it should be an extremely fast operation."},{"line_number":120,"context_line":"        if self.context:"},{"line_number":121,"context_line":"            self.topologies \u003d DBTopologies.find_all("},{"line_number":122,"context_line":"                instance_id\u003dself.instance_id, deleted\u003dFalse).all()"},{"line_number":123,"context_line":"            self.topologies \u003d [Topology(self.context, t)"},{"line_number":124,"context_line":"                               for t in self.topologies]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FqQw%3D","line":121,"in_reply_to":"AAAAXH%2F%2Fu%2B0%3D","updated":"2014-04-18 13:14:47.000000000","message":"Morgan is correct, it will return an empty list *unless* the underlying table isn\u0027t found or properly mapped.  But I would never want to mask that kind of error.","commit_id":"dc5a479e13986909736dab20f56859e028bd4a06"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"b79c6e4596e0c9348796a087c539f637b0f7c2cc","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # topologies for a given datastore and this is done with a key based"},{"line_number":119,"context_line":"        # SELECT so it should be an extremely fast operation."},{"line_number":120,"context_line":"        if self.context:"},{"line_number":121,"context_line":"            self.topologies \u003d DBTopologies.find_all("},{"line_number":122,"context_line":"                instance_id\u003dself.instance_id, deleted\u003dFalse).all()"},{"line_number":123,"context_line":"            self.topologies \u003d [Topology(self.context, t)"},{"line_number":124,"context_line":"                               for t in self.topologies]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2Fu%2B0%3D","line":121,"in_reply_to":"AAAAXH%2F%2FvYY%3D","updated":"2014-04-17 20:26:05.000000000","message":"Everything I can find suggests that query.all() returns an empty list if there are no results.  Are we using some sort of special option to force it to throw an exception?","commit_id":"dc5a479e13986909736dab20f56859e028bd4a06"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # topologies for a given datastore and this is done with a key based"},{"line_number":119,"context_line":"        # SELECT so it should be an extremely fast operation."},{"line_number":120,"context_line":"        if self.context:"},{"line_number":121,"context_line":"            self.topologies \u003d DBTopologies.find_all("},{"line_number":122,"context_line":"                instance_id\u003dself.instance_id, deleted\u003dFalse).all()"},{"line_number":123,"context_line":"            self.topologies \u003d [Topology(self.context, t)"},{"line_number":124,"context_line":"                               for t in self.topologies]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FvYY%3D","line":121,"in_reply_to":"AAAAXH%2F%2FvaI%3D","updated":"2014-04-17 19:33:06.000000000","message":"First case","commit_id":"dc5a479e13986909736dab20f56859e028bd4a06"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class DBTopologies(models.DatabaseModelBase):"},{"line_number":34,"context_line":"    _data_fields \u003d [\u0027id\u0027, \u0027instance_id\u0027, \u0027datastore\u0027, \u0027topology\u0027, \u0027created\u0027,"},{"line_number":35,"context_line":"                    \u0027updated\u0027, \u0027deleted\u0027, \u0027deleted_at\u0027]"},{"line_number":36,"context_line":"    preserve_on_delete \u003d False"},{"line_number":37,"context_line":"    _table_name \u003d \u0027instance_topologies\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FUEc%3D","line":34,"updated":"2014-04-22 15:13:05.000000000","message":"id attr could not be mentioned explicitly - becase its autogenerated.","commit_id":"78e86425d00db95fd02155ee85386435c68e7524"}]}
