)]}'
{"cinder/objects/base.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"ef135b9b6f075296779c5607cdee85c4b0b61de5","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    #"},{"line_number":41,"context_line":"    # If an object doesn\u0027t exist in Liberty, RPC API compatibility layer"},{"line_number":42,"context_line":"    # shouldn\u0027t send it or convert it to a dictionary."},{"line_number":43,"context_line":"    \u0027liberty\u0027: {"},{"line_number":44,"context_line":"        \u0027Backup\u0027: \u00271.1\u0027,"},{"line_number":45,"context_line":"        \u0027BackupImport\u0027: \u00271.1\u0027,"},{"line_number":46,"context_line":"        \u0027BackupList\u0027: \u00271.0\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_b7268fcc","line":43,"updated":"2016-01-19 18:32:31.000000000","message":"liberty is just the code name for the next release, but usually, it goes by a number.  Maybe you should use a version number instead that is tied to version.version_string().","commit_id":"77fa680998cab7c51faff7293d5b3a211a3780b7"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"1c1903aba94e8314b5b1fb67cee75422b5076381","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    #"},{"line_number":41,"context_line":"    # If an object doesn\u0027t exist in Liberty, RPC API compatibility layer"},{"line_number":42,"context_line":"    # shouldn\u0027t send it or convert it to a dictionary."},{"line_number":43,"context_line":"    \u0027liberty\u0027: {"},{"line_number":44,"context_line":"        \u0027Backup\u0027: \u00271.1\u0027,"},{"line_number":45,"context_line":"        \u0027BackupImport\u0027: \u00271.1\u0027,"},{"line_number":46,"context_line":"        \u0027BackupList\u0027: \u00271.0\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_4ac49391","line":43,"in_reply_to":"ba63e191_b7268fcc","updated":"2016-01-20 12:21:06.000000000","message":"Fair point, but that way we would block doing rolling upgrades through master repository version.","commit_id":"77fa680998cab7c51faff7293d5b3a211a3780b7"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"ef135b9b6f075296779c5607cdee85c4b0b61de5","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \u0027VolumeAttachmentList\u0027: \u00271.0\u0027,"},{"line_number":56,"context_line":"        \u0027VolumeList\u0027: \u00271.1\u0027,"},{"line_number":57,"context_line":"        \u0027VolumeType\u0027: \u00271.0\u0027,"},{"line_number":58,"context_line":"        \u0027VolumeTypeList\u0027: \u00271.0\u0027,"},{"line_number":59,"context_line":"    },"},{"line_number":60,"context_line":"    \u00271.0\u0027: {"},{"line_number":61,"context_line":"        \u0027Backup\u0027: \u00271.3\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_9a8cd280","line":58,"updated":"2016-01-19 18:32:31.000000000","message":"I wonder if there is a dynamic way to generate this per release.","commit_id":"77fa680998cab7c51faff7293d5b3a211a3780b7"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"1c1903aba94e8314b5b1fb67cee75422b5076381","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \u0027VolumeAttachmentList\u0027: \u00271.0\u0027,"},{"line_number":56,"context_line":"        \u0027VolumeList\u0027: \u00271.1\u0027,"},{"line_number":57,"context_line":"        \u0027VolumeType\u0027: \u00271.0\u0027,"},{"line_number":58,"context_line":"        \u0027VolumeTypeList\u0027: \u00271.0\u0027,"},{"line_number":59,"context_line":"    },"},{"line_number":60,"context_line":"    \u00271.0\u0027: {"},{"line_number":61,"context_line":"        \u0027Backup\u0027: \u00271.3\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_e4d74ceb","line":58,"in_reply_to":"ba63e191_9a8cd280","updated":"2016-01-20 12:21:06.000000000","message":"I was thinking of making it possible to do rolling upgrades also inter-release. In the next patchset I\u0027ve added a test enforcing adding a new history version per object version change.","commit_id":"77fa680998cab7c51faff7293d5b3a211a3780b7"}],"cinder/objects/service.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"ef135b9b6f075296779c5607cdee85c4b0b61de5","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        \u0027modified_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027rpc_current_version\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027object_current_version\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"    }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def obj_make_compatible(self, primitive, target_version):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_5a865a66","line":51,"range":{"start_line":51,"start_character":32,"end_line":51,"end_character":33},"updated":"2016-01-19 18:32:31.000000000","message":"Why not report both the current and max versions?  It would be good to identify what you can upgrade to and for debug purposes.  The columns are there anyways.","commit_id":"77fa680998cab7c51faff7293d5b3a211a3780b7"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"e3427cb9c3c0118a68221fd445985c9c125a5e5b","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        \u0027modified_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027rpc_current_version\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027object_current_version\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"    }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def obj_make_compatible(self, primitive, target_version):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_bb023f6e","line":51,"range":{"start_line":51,"start_character":32,"end_line":51,"end_character":33},"in_reply_to":"9a68dd71_8ae7ebab","updated":"2016-01-20 13:12:54.000000000","message":"You are reporting the manager\u0027s version, not the client used.  Why would there be a conflict about which version to report?  The use case is to determine which manager can be updated or needs to be pinned.","commit_id":"77fa680998cab7c51faff7293d5b3a211a3780b7"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"fbcafe3c5f01d4d52a367febc3a6fd12a9e7ee50","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        \u0027modified_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027rpc_current_version\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027object_current_version\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"    }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def obj_make_compatible(self, primitive, target_version):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_903cf530","line":51,"range":{"start_line":51,"start_character":32,"end_line":51,"end_character":33},"in_reply_to":"9a68dd71_bb023f6e","updated":"2016-01-20 14:23:16.000000000","message":"Ah, okay, probably I\u0027ve misunderstood you.\n\nAnyway what these patches propose is the model almost exactly the same as in current Nova. It\u0027s different than in your spec, and I believe a little simpler.\n\nEach manager is reporting its own version. That would mean that both current and max is the same for a row in services table.\n\nThen it\u0027s the decision of the clients to pin to a correct version. The decision is based on the minimum value of rpc_current_version among all the services of requested type. That way we\u0027re always pinning to the oldest version in the deployment.","commit_id":"77fa680998cab7c51faff7293d5b3a211a3780b7"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"1c1903aba94e8314b5b1fb67cee75422b5076381","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        \u0027modified_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027rpc_current_version\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027object_current_version\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":52,"context_line":"    }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def obj_make_compatible(self, primitive, target_version):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_8ae7ebab","line":51,"range":{"start_line":51,"start_character":32,"end_line":51,"end_character":33},"in_reply_to":"ba63e191_5a865a66","updated":"2016-01-20 12:21:06.000000000","message":"I thought what to do with these columns. Reporting version of each rpcapi would introduce some complexity into service.py module, but of course that\u0027s manageable.\n\nI wonder what\u0027s the example use case of reporting it. In the model presented in this patch each of the services report it\u0027s version of RPC server, so it\u0027s very easy to see what\u0027s the latest one running in the deployment. Moreover services use multiple rpcapi clients. For example c-vol may call other c-vols as well as c-sch. Which version should we report then?","commit_id":"77fa680998cab7c51faff7293d5b3a211a3780b7"}],"cinder/service.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"ef135b9b6f075296779c5607cdee85c4b0b61de5","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                ctxt, self.host, self.binary)"},{"line_number":153,"context_line":"            service_ref.rpc_current_version \u003d self.manager.RPC_API_VERSION"},{"line_number":154,"context_line":"            obj_version \u003d objects_base.CURRENT_OBJ_VERSION"},{"line_number":155,"context_line":"            service_ref.object_current_version \u003d obj_version"},{"line_number":156,"context_line":"            service_ref.save()"},{"line_number":157,"context_line":"            self.service_id \u003d service_ref.id"},{"line_number":158,"context_line":"        except exception.NotFound:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_7a4c7e70","line":155,"updated":"2016-01-19 18:32:31.000000000","message":"obj_version is not used anywhere else, so it may be better to directly assign it here.\n\nservice_ref.object_current_version \u003d objects_base.CURRENT_OBJ_VERSION","commit_id":"77fa680998cab7c51faff7293d5b3a211a3780b7"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"1c1903aba94e8314b5b1fb67cee75422b5076381","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                ctxt, self.host, self.binary)"},{"line_number":153,"context_line":"            service_ref.rpc_current_version \u003d self.manager.RPC_API_VERSION"},{"line_number":154,"context_line":"            obj_version \u003d objects_base.CURRENT_OBJ_VERSION"},{"line_number":155,"context_line":"            service_ref.object_current_version \u003d obj_version"},{"line_number":156,"context_line":"            service_ref.save()"},{"line_number":157,"context_line":"            self.service_id \u003d service_ref.id"},{"line_number":158,"context_line":"        except exception.NotFound:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_8a9e0b06","line":155,"in_reply_to":"ba63e191_7a4c7e70","updated":"2016-01-20 12:21:06.000000000","message":"Such line is too long, so instead of using parentheses to wrap lines I\u0027ve decided to use dummy variable.","commit_id":"77fa680998cab7c51faff7293d5b3a211a3780b7"}],"cinder/tests/unit/objects/test_objects.py":[{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"f74e1f8de6cbb5b3867245d8ae8297a4486f5485","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"            if cls[0].VERSION !\u003d versions[name]:"},{"line_number":66,"context_line":"                expected[name] \u003d cls[0].VERSION"},{"line_number":67,"context_line":"                actual[name] \u003d versions[name]"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        self.assertEqual(expected, actual,"},{"line_number":70,"context_line":"                         \u0027Some objects versions have changed; please make \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_3c939b51","line":67,"updated":"2016-01-26 12:46:59.000000000","message":"The codes seems strange here, I think it should:\n\nif name not in versions:\n\n...\n\nelse:\n\n   expected[name] \u003d cls[0].VERSION\n\n   actual[name] \u003d versions[name]","commit_id":"c210e4145b213a660e9ed949f80b487b6c136e74"}]}
