)]}'
{"cinder/objects/base.py":[{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"cf6178d38f50ff2b1e869b55edbb707f68a5a097","unresolved":false,"context_lines":[{"line_number":383,"context_line":""},{"line_number":384,"context_line":"class CinderObjectSerializer(base.VersionedObjectSerializer):"},{"line_number":385,"context_line":"    OBJ_BASE_CLASS \u003d CinderObject"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def __init__(self, version_cap\u003dNone):"},{"line_number":388,"context_line":"        super(CinderObjectSerializer, self).__init__()"},{"line_number":389,"context_line":"        self.version_cap \u003d version_cap"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_aa93abf9","line":386,"updated":"2016-01-27 19:11:33.000000000","message":"I\u0027m not a fan of this upgrade happening in the object layer - I\u0027d far rather the manager had explicit paths to handle the older versions explicitly - it is far easier to see by inspection that the corner cases are handled that way.","commit_id":"281ae118ab7190f60c294dde1333cf3c7a30fd7d"}],"cinder/rpc.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"087785d0afc632a416ad72ee70d1fdf4ed182fad","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        version_cap \u003d objects.Service.get_minimum_rpc_version("},{"line_number":197,"context_line":"            cinder.context.get_admin_context(), self.BINARY)"},{"line_number":198,"context_line":"        if version_cap \u003d\u003d \u0027liberty\u0027:"},{"line_number":199,"context_line":"            # NOTE(dulek): This means that one of the services is Liberty,"},{"line_number":200,"context_line":"            # we should cap to it\u0027s RPC version."},{"line_number":201,"context_line":"            version_cap \u003d LIBERTY_RPC_VERSIONS[self.BINARY]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_e076cda2","line":198,"updated":"2016-01-26 03:50:00.000000000","message":"Based on this patch, it looks like every time the service is started, it is pinned to the last known RPC and object version.  There should only be one restart needed for the service when you upgrade it, correct?","commit_id":"281ae118ab7190f60c294dde1333cf3c7a30fd7d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"25184861b26e62a41b133db92398ee7481002e02","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        version_cap \u003d objects.Service.get_minimum_rpc_version("},{"line_number":197,"context_line":"            cinder.context.get_admin_context(), self.BINARY)"},{"line_number":198,"context_line":"        if version_cap \u003d\u003d \u0027liberty\u0027:"},{"line_number":199,"context_line":"            # NOTE(dulek): This means that one of the services is Liberty,"},{"line_number":200,"context_line":"            # we should cap to it\u0027s RPC version."},{"line_number":201,"context_line":"            version_cap \u003d LIBERTY_RPC_VERSIONS[self.BINARY]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_1b481487","line":198,"in_reply_to":"9a68dd71_82ed82f1","updated":"2016-01-26 15:21:50.000000000","message":"I\u0027ve explained the idea to avoid the restart in comment above.\n\nBasically the main constraints are:\n\n* X managers are able to serve X-1 requests (they need to, not all managers are upgraded at once and it\u0027s RabbitMQ who decides where a message will go).\n* X clients are able to send X-1 requests.\n\nEvery service reports the version it is in and not the version it is pinned to. That way after every service of given type Mitaka we can safely restart/signal a service and it will come up as fully operational Mitaka. Note that RPC version pinning affects only sending the requests. Service is still able to serve both new and old services.\n\nI don\u0027t see a problem with this logic. You need to upgrade all of the services of a given type and then you may signal all of the ones calling them to reload pinned version. That would mean:\n\n* Completed c-api upgrade -\u003e do nothing.\n* Completed c-sch upgrade -\u003e signal c-apis (c-sch is called by c-vol when rescheduling occurs; this isn\u0027t a problem, c-sch will safely accept requests from older c-vols).\n* Completed c-vol upgrade -\u003e signal c-apis and c-schs.\n* Completed c-bak upgrade -\u003e signal c-apis.\n\nIt\u0027s also completely safe to send signals to all the services after whole upgrade is completed if you find it more convenient (it probably is more convenient).","commit_id":"281ae118ab7190f60c294dde1333cf3c7a30fd7d"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"fa81c16786479f8ca0adb6024afb2964706b5fb9","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        version_cap \u003d objects.Service.get_minimum_rpc_version("},{"line_number":197,"context_line":"            cinder.context.get_admin_context(), self.BINARY)"},{"line_number":198,"context_line":"        if version_cap \u003d\u003d \u0027liberty\u0027:"},{"line_number":199,"context_line":"            # NOTE(dulek): This means that one of the services is Liberty,"},{"line_number":200,"context_line":"            # we should cap to it\u0027s RPC version."},{"line_number":201,"context_line":"            version_cap \u003d LIBERTY_RPC_VERSIONS[self.BINARY]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_82ed82f1","line":198,"in_reply_to":"9a68dd71_e076cda2","updated":"2016-01-26 13:16:05.000000000","message":"I understand it as if the process doesn\u0027t end, every time new a RPC object, it uses last pinned rpc version and object version.\n\nWhen a process like backup manager starts, it reads the minimum version from db. \n\nhttps://github.com/openstack/cinder/blob/master/cinder/backup/manager.py#L90\n\nBut this is wierd. For example, during upgrade, for volume services, some in liberty, some in mitaka, when a c-vol restarts, get_minimum_xxx_version gets liberty version, it will not change unless the process restarts. Once all c-vol upgrades, only the last c-vol service has liberty version. \n\nAm I wrong?","commit_id":"281ae118ab7190f60c294dde1333cf3c7a30fd7d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"25184861b26e62a41b133db92398ee7481002e02","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        version_cap \u003d objects.Service.get_minimum_rpc_version("},{"line_number":197,"context_line":"            cinder.context.get_admin_context(), self.BINARY)"},{"line_number":198,"context_line":"        if version_cap \u003d\u003d \u0027liberty\u0027:"},{"line_number":199,"context_line":"            # NOTE(dulek): This means that one of the services is Liberty,"},{"line_number":200,"context_line":"            # we should cap to it\u0027s RPC version."},{"line_number":201,"context_line":"            version_cap \u003d LIBERTY_RPC_VERSIONS[self.BINARY]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_c5013f3b","line":198,"in_reply_to":"9a68dd71_e076cda2","updated":"2016-01-26 15:21:50.000000000","message":"Sure, as next step I want to implement something like [1]. That way we just need to signal the process after complete upgrade. I haven\u0027t had time to do so with all the mid-cycle hurry.\n\n[1] https://review.openstack.org/#/q/topic:okay-we-got-it,n,z","commit_id":"281ae118ab7190f60c294dde1333cf3c7a30fd7d"}]}
