)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"95d5de289b0bfa8f6939a8d80cef5df9ea0d6747","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The following is part of the cinder effort to support"},{"line_number":10,"context_line":"rolling upgrade.   This patch inserts an entry into the"},{"line_number":11,"context_line":"service_versions table for each service that is brought"},{"line_number":12,"context_line":"up."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I46964a8b19e5d5469c9a859f24103523951e2027"},{"line_number":15,"context_line":"Partial-Implements: blueprint rpc-object-compatibility"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a4dcd0f_fe10eb4f","line":12,"updated":"2015-08-12 21:28:10.000000000","message":"It might be good to mention the other things that were added as well, like the RPCVersioned object class? Be a little more verbose about your changes.","commit_id":"f7d0032bf29f3807bae5d049150384c8c9a06e10"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"f4d33112c6047aabd02919e135be16948213204f","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The following is part of the cinder effort to support"},{"line_number":10,"context_line":"rolling upgrade.   This patch inserts an entry into the"},{"line_number":11,"context_line":"service_versions table for each service that is brought"},{"line_number":12,"context_line":"up."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I46964a8b19e5d5469c9a859f24103523951e2027"},{"line_number":15,"context_line":"Partial-Implements: blueprint rpc-object-compatibility"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a4dcd0f_3865e2ad","line":12,"in_reply_to":"1a4dcd0f_fe10eb4f","updated":"2015-08-13 14:29:43.000000000","message":"It is pretty self explanatory.  Most of the detail is contained in the spec.","commit_id":"f7d0032bf29f3807bae5d049150384c8c9a06e10"}],"cinder/rpc.py":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"95d5de289b0bfa8f6939a8d80cef5df9ea0d6747","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                # than 5 seconds"},{"line_number":228,"context_line":"                if (timeutils.utcnow() - self.service_version_last_updated"},{"line_number":229,"context_line":"                        \u003c datetime.timedelta(seconds\u003d5)):"},{"line_number":230,"context_line":"                    LOG.debug(\"Using cache copy of service_version\")"},{"line_number":231,"context_line":"                    return self.service_version"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"                LOG.debug(\"Refreshing cache copy of service_version\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_3bb74586","line":230,"updated":"2015-08-12 21:28:10.000000000","message":"\".\" at EOL","commit_id":"f7d0032bf29f3807bae5d049150384c8c9a06e10"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"95d5de289b0bfa8f6939a8d80cef5df9ea0d6747","unresolved":false,"context_lines":[{"line_number":230,"context_line":"                    LOG.debug(\"Using cache copy of service_version\")"},{"line_number":231,"context_line":"                    return self.service_version"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"                LOG.debug(\"Refreshing cache copy of service_version\")"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"            # Get the current/pin object and RPC versions"},{"line_number":236,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_dbb2e193","line":233,"updated":"2015-08-12 21:28:10.000000000","message":"\".\" at EOL","commit_id":"f7d0032bf29f3807bae5d049150384c8c9a06e10"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"78b18fe1ce1728b8405f07330a34c0878f015290","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        self.rpc_current_version \u003d service.get(\u0027rpc_current_version\u0027)"},{"line_number":195,"context_line":"        self.object_current_version \u003d service.get(\u0027object_current_version\u0027)"},{"line_number":196,"context_line":"        object_available_version \u003d version.version_string()"},{"line_number":197,"context_line":"        LOG.debug(\"%(service_name)s running rpc_version\u003d%(rpc_version)s \""},{"line_number":198,"context_line":"                  \"and obj_version\u003d%(obj_version)s.\","},{"line_number":199,"context_line":"                  {\u0027service_name\u0027: self.SERVICE_NAME,"},{"line_number":200,"context_line":"                   \u0027rpc_version\u0027: self.rpc_current_version,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_7117d354","line":197,"updated":"2015-08-24 00:54:18.000000000","message":"Suggest: \"%(service_name)s is running rpc_version: %(rpc_version)s and obj_version: %(obj_version)s.\"","commit_id":"eb8256a2bc6a8b3f3db4d986962aa0bf2ff2e4b5"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"78b18fe1ce1728b8405f07330a34c0878f015290","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                LOG.debug(\"Found service - %(service)s on %(host)s. \""},{"line_number":251,"context_line":"                          \"Current (pinned) RPC version - %(rpc_version)s. \""},{"line_number":252,"context_line":"                          \"Current (pinned) object version - \""},{"line_number":253,"context_line":"                          \"%(object_version)s.\","},{"line_number":254,"context_line":"                          {\u0027service\u0027: self.SERVICE_NAME,"},{"line_number":255,"context_line":"                           \u0027host\u0027: host,"},{"line_number":256,"context_line":"                           \u0027rpc_version\u0027: rpc_current_version,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_cc3084eb","line":253,"updated":"2015-08-24 00:54:18.000000000","message":"Suggest: \"Current (pinned) RPC version: %s(object_version)s.\"","commit_id":"eb8256a2bc6a8b3f3db4d986962aa0bf2ff2e4b5"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"16f56df60a79d50fe26d655720f6fda3913b9a9a","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        # match."},{"line_number":205,"context_line":"        if (self.rpc_current_version !\u003d self.RPC_API_VERSION or"},{"line_number":206,"context_line":"                self.object_current_version !\u003d object_available_version):"},{"line_number":207,"context_line":"            self.BACKWARD_COMPAT_MODE \u003d True"},{"line_number":208,"context_line":"            LOG.debug(\"%(service_name)s BACKWARD_COMPAT_MODE set to \""},{"line_number":209,"context_line":"                      \"%(compat_mode)s.\","},{"line_number":210,"context_line":"                      {\u0027service_name\u0027: self.SERVICE_NAME,"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a1a9d01_5e348148","line":207,"updated":"2015-09-30 09:22:16.000000000","message":"BACKWARD_COMPAT_MODE is a class variable and here you initialize an instance variable that shadows it. You probably should replace this line with\n\n self.__class__.BACKWARD_COMPAT_MODE \u003d True\n\nor even better have something like\n\n @classmethod\n def set_backward_compat_mode(cls, enable):\n     cls.BACKWARD_COMPAT_MODE \u003d enable\n\nif you intend to change class var (uppercase indicates that). If not move it\u0027s initialization line into __init__ (and made it lowercase then).","commit_id":"cb494042f19e44f20ee822170e6b6194841edd10"}],"cinder/service.py":[{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"78b18fe1ce1728b8405f07330a34c0878f015290","unresolved":false,"context_lines":[{"line_number":166,"context_line":"              \"Available RPC version - %(rpc_available_version)s. \""},{"line_number":167,"context_line":"              \"Current (pinned) RPC version - %(rpc_current_version)s. \""},{"line_number":168,"context_line":"              \"Available object version - %(object_available_version)s. \""},{"line_number":169,"context_line":"              \"Current (pinned) object version - %(object_current_version)s.\","},{"line_number":170,"context_line":"              {\u0027service\u0027: name,"},{"line_number":171,"context_line":"               \u0027host\u0027: host,"},{"line_number":172,"context_line":"               \u0027rpc_available_version\u0027: rpc_available_version,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_0cac3cec","line":169,"updated":"2015-08-24 00:54:18.000000000","message":"I suggest making all of the \u0027-\u0027 into \u0027:\u0027 to keep consistent with other files and their logging statements.","commit_id":"eb8256a2bc6a8b3f3db4d986962aa0bf2ff2e4b5"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"ba0a1928c78dbcee1b50a7c1a3b63cda0e268ee6","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"@utils.synchronized(\u0027register_service\u0027, external\u003dTrue)"},{"line_number":110,"context_line":"def register_service(name, host):"},{"line_number":111,"context_line":"    # This function will create or update an entry in cinder.services"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    # NOTE(thangp): When a service comes up, it will register the object and"},{"line_number":114,"context_line":"    # RPC versions (current/pin and available) it knows about."}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_7c4db1c2","line":111,"updated":"2015-09-01 03:31:20.000000000","message":"Should we change this to a DocString?","commit_id":"0e4a0a9d3f778877eb88fdcd196e7d34b0998587"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"9abb89e1f0f67487bea4e14083a43a209306e25a","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    (current/pin and available) it knows about in cinder.services."},{"line_number":116,"context_line":"    \"\"\""},{"line_number":117,"context_line":"    ctxt \u003d context.get_admin_context()"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    if name \u003d\u003d \u0027osapi_volume\u0027:"},{"line_number":120,"context_line":"        # NOTE(thangp): cinder-api uses cinder/volume/rpcapi.py"},{"line_number":121,"context_line":"        rpc_available_version \u003d volume_rpcapi.VolumeAPI.RPC_API_VERSION"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a1a9d01_3f8a79c0","line":118,"updated":"2015-09-25 16:40:10.000000000","message":"Seems a bit strange to doing these checks against name here as opposed to having rpc_available_version passed in (but could be wrong about that).  Also, is it fine for rpc_available_version to be None in the case we don\u0027t land in any elif?","commit_id":"df40021c2253997c9c85eaad2173bae512e43c5a"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"bf7f1b7c1fe751fa4627865b58588843d5f893cd","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    (current/pin and available) it knows about in cinder.services."},{"line_number":116,"context_line":"    \"\"\""},{"line_number":117,"context_line":"    ctxt \u003d context.get_admin_context()"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    if name \u003d\u003d \u0027osapi_volume\u0027:"},{"line_number":120,"context_line":"        # NOTE(thangp): cinder-api uses cinder/volume/rpcapi.py"},{"line_number":121,"context_line":"        rpc_available_version \u003d volume_rpcapi.VolumeAPI.RPC_API_VERSION"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a1a9d01_bc19a07b","line":118,"in_reply_to":"9a1a9d01_3f8a79c0","updated":"2015-09-26 13:05:51.000000000","message":"No reason why we could not pass in the rpc_available_version as an argument to register_service.  I will post another patch.","commit_id":"df40021c2253997c9c85eaad2173bae512e43c5a"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"c407296506c0e3d6bfb5f79d295de82706803db7","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    (current/pin and available) it knows about in cinder.services."},{"line_number":116,"context_line":"    \"\"\""},{"line_number":117,"context_line":"    ctxt \u003d context.get_admin_context()"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    if name \u003d\u003d \u0027osapi_volume\u0027:"},{"line_number":120,"context_line":"        # NOTE(thangp): cinder-api uses cinder/volume/rpcapi.py"},{"line_number":121,"context_line":"        rpc_available_version \u003d volume_rpcapi.VolumeAPI.RPC_API_VERSION"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a1a9d01_4d2c5002","line":118,"in_reply_to":"9a1a9d01_bc19a07b","updated":"2015-09-27 00:33:18.000000000","message":"I take that back.  The Service class below gets initialized by the starter script under cinder/cmd.  We only need to register (or update) the service versions when the service starts.  Since the Service class is generic here and used by c-api, c-sch, c-vol, and c-bak, we need to decipher the versions here.\n\nHowever, we should skip the register if the service name is not known.","commit_id":"df40021c2253997c9c85eaad2173bae512e43c5a"}]}
