)]}'
{"nova/db/sqlalchemy/models.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ccb3e88948ba3a901c97e4188a5514c719092750","unresolved":false,"context_lines":[{"line_number":42,"context_line":"class NovaBase(models.SoftDeleteMixin,"},{"line_number":43,"context_line":"               models.TimestampMixin,"},{"line_number":44,"context_line":"               models.ModelBase):"},{"line_number":45,"context_line":"    metadata \u003d None"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def __copy__(self):"},{"line_number":48,"context_line":"        \"\"\"Implement a safe copy.copy()."}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_7c6310dd","line":45,"updated":"2015-08-04 15:32:42.000000000","message":"Would it not be better to try and have the version umber here then it will be generic and used by all importing NovaBase.\nThen tomorrow when you want to use table foo you already have this support","commit_id":"439a6578e836e3b489e6aadd64dc09b540fc567f"}],"nova/objects/service.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f9747a05266356409322b1158a2ff79350f666a3","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                                              reason\u003d\u0027already created\u0027)"},{"line_number":210,"context_line":"        updates \u003d self.obj_get_changes()"},{"line_number":211,"context_line":"        if \u0027version\u0027 not in updates:"},{"line_number":212,"context_line":"            updates[\u0027version\u0027] \u003d SERVICE_VERSION"},{"line_number":213,"context_line":"        db_service \u003d db.service_create(self._context, updates)"},{"line_number":214,"context_line":"        self._from_db_object(self._context, self, db_service)"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_5464b220","line":212,"updated":"2015-08-11 14:26:51.000000000","message":"I wonder if we want to let people pass this in, maybe just always over-ride it.\n\nAlthough thats a bit messy I guess :(","commit_id":"e31a6d3d77aafb468cec75ba92469796c4e58c78"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f9747a05266356409322b1158a2ff79350f666a3","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    def save(self):"},{"line_number":218,"context_line":"        updates \u003d self.obj_get_changes()"},{"line_number":219,"context_line":"        updates.pop(\u0027id\u0027, None)"},{"line_number":220,"context_line":"        if \u0027version\u0027 not in updates:"},{"line_number":221,"context_line":"            updates[\u0027version\u0027] \u003d SERVICE_VERSION"},{"line_number":222,"context_line":"        db_service \u003d db.service_update(self._context, self.id, updates)"},{"line_number":223,"context_line":"        self._from_db_object(self._context, self, db_service)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_34a1e646","line":220,"updated":"2015-08-11 14:26:51.000000000","message":"should that be:\n\nif self.version !\u003d SERVICE_VERSION and \u0027version\u0027 not in updates: \npass\n\nI would if we should ever allow someone to pass in the version? maybe it should be:\nif self.version !\u003d SERVICE_VERSION","commit_id":"e31a6d3d77aafb468cec75ba92469796c4e58c78"}],"nova/tests/unit/compute/test_resource_tracker.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f9747a05266356409322b1158a2ff79350f666a3","unresolved":false,"context_lines":[{"line_number":294,"context_line":"            \u0027deleted\u0027: False,"},{"line_number":295,"context_line":"            \u0027last_seen_up\u0027: None,"},{"line_number":296,"context_line":"            \u0027forced_down\u0027: False,"},{"line_number":297,"context_line":"            \u0027version\u0027: 0,"},{"line_number":298,"context_line":"    }"},{"line_number":299,"context_line":"        return service"},{"line_number":300,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_df3bfbcf","line":297,"updated":"2015-08-11 14:26:51.000000000","message":"maybe we should just convert this to creating an object?\nalthough I guess sometimes its still a dict in the code?","commit_id":"e31a6d3d77aafb468cec75ba92469796c4e58c78"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f9747a05266356409322b1158a2ff79350f666a3","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            \u0027last_seen_up\u0027: None,"},{"line_number":296,"context_line":"            \u0027forced_down\u0027: False,"},{"line_number":297,"context_line":"            \u0027version\u0027: 0,"},{"line_number":298,"context_line":"    }"},{"line_number":299,"context_line":"        return service"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def _fake_instance_obj(self, stash\u003dTrue, flavor\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_9f1a536e","line":298,"updated":"2015-08-11 14:26:51.000000000","message":"my browser shoes this as bad indentation, might not be true.","commit_id":"e31a6d3d77aafb468cec75ba92469796c4e58c78"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c8b317fe09178bde73634fcec5cc76e02620234d","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            \u0027last_seen_up\u0027: None,"},{"line_number":296,"context_line":"            \u0027forced_down\u0027: False,"},{"line_number":297,"context_line":"            \u0027version\u0027: 0,"},{"line_number":298,"context_line":"    }"},{"line_number":299,"context_line":"        return service"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def _fake_instance_obj(self, stash\u003dTrue, flavor\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_4aa7260b","line":298,"updated":"2015-08-11 15:47:04.000000000","message":"Nit: this indent is a bit off, and I wonder if this should move to using the object instead of fixing the dict, although I suspect that might hide other issues.","commit_id":"0dfa4f25e1473531cc203db933c58e7c7e5ef9db"}],"nova/tests/unit/objects/test_service.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"e9173fb2d62a1f1de12f76bd2e14b9a3bd6c9f9c","unresolved":false,"context_lines":[{"line_number":302,"context_line":"# will not be caught by the test below. An example of this would be triggering"},{"line_number":303,"context_line":"# (or disabling) an online data migration once all services in the cluster"},{"line_number":304,"context_line":"# are at the same level."},{"line_number":305,"context_line":"SERVICE_VERSION_HISTORY \u003d ["},{"line_number":306,"context_line":"    # Version 0: Pre-history"},{"line_number":307,"context_line":"    None,"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    # Version 1: Introduction of SERVICE_VERSION"},{"line_number":310,"context_line":"    {\u0027compute_rpc\u0027: \u00274.2\u0027},"},{"line_number":311,"context_line":"]"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"class TestServiceVersion(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_d725f008","line":311,"range":{"start_line":305,"start_character":0,"end_line":311,"end_character":1},"updated":"2015-07-22 18:25:47.000000000","message":"it seems like this canonical list and history should be in the object module, and not in the test. Also, bonus points for making it immutable.","commit_id":"5c24d0b6f8010503f13695952673b51f1949636f"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"98db201fc34e0c094ccf2b0debc6af64c668d1a2","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        self.assertEqual("},{"line_number":304,"context_line":"            current, calculated,"},{"line_number":305,"context_line":"            \u0027Changes detected that require a SERVICE_VERSION change. Please \u0027"},{"line_number":306,"context_line":"            \u0027increment nova.objects.service.SERVICE_VERSION\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_15af717e","line":306,"updated":"2015-07-24 08:41:22.000000000","message":"Sounds a good approach. I was originally thinking to pin the specific Service version with the RPC version (in a dict or a tuple of tuples) and not use a monotonic tuple (and checking the lenght of that tuple), but that approach is quite straight to me.","commit_id":"5717015fe7347beffed4644c960b392c5742ab8c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"16ca704d6e960739add13deba40e88da760ce6c8","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        self.mox.ReplayAll()"},{"line_number":176,"context_line":"        services \u003d service.ServiceList.get_by_topic(self.context, \u0027fake-topic\u0027)"},{"line_number":177,"context_line":"        self.assertEqual(1, len(services))"},{"line_number":178,"context_line":"        self.compare_obj(services[0], fake_service, allow_missing\u003dOPTIONAL)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    @mock.patch(\u0027nova.db.service_get_all_by_binary\u0027)"},{"line_number":181,"context_line":"    def test_get_by_binary(self, mock_get):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a4dcd0f_a573824d","line":178,"updated":"2015-08-11 14:53:06.000000000","message":"I think we need to check we can get the old version here, and not the one in the __init__?","commit_id":"72d84c3353b3a7cf8a851bd799d3ab266ddf962c"}]}
