)]}'
{"cinder/api/openstack/api_version_request.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"95ff5253dbc7ebb9c86221bc59f3db8893930747","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    * 3.14 - Add group snapshot and create group from src APIs."},{"line_number":65,"context_line":"    * 3.15 - Inject the response\u0027s `Etag` header to avoid the lost update"},{"line_number":66,"context_line":"             problem with volume metadata."},{"line_number":67,"context_line":"    * 3.16 - Migrate volume now supports cluster"},{"line_number":68,"context_line":"\"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a74a57a_8071a978","line":67,"range":{"start_line":67,"start_character":13,"end_line":67,"end_character":48},"updated":"2016-11-28 13:01:36.000000000","message":"What about \"manage\"?","commit_id":"87dccdbdfbdc73e8a7fb493b6db090457c03046e"}],"cinder/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"df0eefa063c3df5c1ecb3817c6d847b1355637b6","unresolved":false,"context_lines":[{"line_number":200,"context_line":"  requested that specific cluster.  If both are specified the host parameter"},{"line_number":201,"context_line":"  will be ignored."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"  Creating a managed volume also supports the cluster parameter."}],"source_content_type":"text/x-rst","patch_set":25,"id":"5a74a57a_cf7dd71d","line":203,"updated":"2016-11-25 06:49:15.000000000","message":"Why not like following patch which allows only host or only cluster is specified?\n\nhttps://review.openstack.org/#/c/355968/18/cinder/api/openstack/rest_api_version_history.rst","commit_id":"e7623027d167278682026ed3e9c9e4e28a4f93f8"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d7576d66b3b11b934af4ff429bace118b3d22044","unresolved":false,"context_lines":[{"line_number":200,"context_line":"  requested that specific cluster.  If both are specified the host parameter"},{"line_number":201,"context_line":"  will be ignored."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"  Creating a managed volume also supports the cluster parameter."}],"source_content_type":"text/x-rst","patch_set":25,"id":"5a74a57a_4cf6edf9","line":203,"in_reply_to":"5a74a57a_cf7dd71d","updated":"2016-11-28 12:55:28.000000000","message":"Yeah, I should, because we are only allowing one also in the replication patch [1].\n\n[1]: https://review.openstack.org/#/c/381835/17/cinder/api/contrib/services.py@122","commit_id":"e7623027d167278682026ed3e9c9e4e28a4f93f8"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"95ff5253dbc7ebb9c86221bc59f3db8893930747","unresolved":false,"context_lines":[{"line_number":197,"context_line":"  os-migrate_volume now accepts cluster parameter when we want to migrate a"},{"line_number":198,"context_line":"  volume to a cluster.  If we request a volume to be migrated to a specific"},{"line_number":199,"context_line":"  host in a cluster the request will be made to the whole cluster as if we had"},{"line_number":200,"context_line":"  requested that specific cluster.  If both are specified the host parameter"},{"line_number":201,"context_line":"  will be ignored."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"  Creating a managed volume also supports the cluster parameter."}],"source_content_type":"text/x-rst","patch_set":26,"id":"5a74a57a_4044f119","line":201,"range":{"start_line":200,"start_character":36,"end_line":201,"end_character":18},"updated":"2016-11-28 13:01:36.000000000","message":"Hm, shouldn\u0027t we simply return 400 in case requested host isn\u0027t part of the requested cluster?","commit_id":"87dccdbdfbdc73e8a7fb493b6db090457c03046e"}],"cinder/scheduler/host_manager.py":[{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"163798d160b7ced85ba937bde3d73477fad9747b","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        self._no_capabilities_hosts \u003d no_capabilities_hosts"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        # remove non-active keys from host_state_map"},{"line_number":524,"context_line":"        inactive_backend_keys \u003d set(self.host_state_map) - active_backends"},{"line_number":525,"context_line":"        for backend_key in inactive_backend_keys:"},{"line_number":526,"context_line":"            if backend_key not in active_hosts:"},{"line_number":527,"context_line":"                LOG.info(_LI(\"Removing non-active host: %(host)s from \""},{"line_number":528,"context_line":"                             \"scheduler cache.\"), {\u0027host\u0027: host})"},{"line_number":529,"context_line":"            del self.host_state_map[backend_key]"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    def get_all_host_states(self, context):"},{"line_number":532,"context_line":"        \"\"\"Returns a dict of all the hosts the HostManager knows about."}],"source_content_type":"text/x-python","patch_set":25,"id":"5a74a57a_cf5eb875","line":529,"range":{"start_line":524,"start_character":0,"end_line":529,"end_character":48},"updated":"2016-11-25 06:44:16.000000000","message":"I don\u0027t understand why need to keep active_hosts here. I think we use active_backends to replace active_hosts. No matter a host is in a cluster or not, its corresponding capacity is or put intor self.host_state_map[cluster_name], or put into self.host_state_map[host]. Why need to check backend_key not in active_hosts?","commit_id":"e7623027d167278682026ed3e9c9e4e28a4f93f8"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d7576d66b3b11b934af4ff429bace118b3d22044","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        self._no_capabilities_hosts \u003d no_capabilities_hosts"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        # remove non-active keys from host_state_map"},{"line_number":524,"context_line":"        inactive_backend_keys \u003d set(self.host_state_map) - active_backends"},{"line_number":525,"context_line":"        for backend_key in inactive_backend_keys:"},{"line_number":526,"context_line":"            if backend_key not in active_hosts:"},{"line_number":527,"context_line":"                LOG.info(_LI(\"Removing non-active host: %(host)s from \""},{"line_number":528,"context_line":"                             \"scheduler cache.\"), {\u0027host\u0027: host})"},{"line_number":529,"context_line":"            del self.host_state_map[backend_key]"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    def get_all_host_states(self, context):"},{"line_number":532,"context_line":"        \"\"\"Returns a dict of all the hosts the HostManager knows about."}],"source_content_type":"text/x-python","patch_set":25,"id":"5a74a57a_d1ec5af5","line":529,"range":{"start_line":524,"start_character":0,"end_line":529,"end_character":48},"in_reply_to":"5a74a57a_cf5eb875","updated":"2016-11-28 12:55:28.000000000","message":"I\u0027ll add a comment explaining it, because it\u0027s been 4 months since I wrote this patch and it wasn\u0027t clear to me either at first read.\n\nBasically we don\u0027t want to log that we have removed a non-active host when the host has been added to a cluster, because the host is active and it would be misleading.\n\nThough there\u0027s a problem here because we should be loggign the backend_key.","commit_id":"e7623027d167278682026ed3e9c9e4e28a4f93f8"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"15edf7ae12effe742da4cdd1a916cf527321b4df","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        self.updated \u003d None"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @property"},{"line_number":127,"context_line":"    def id(self):"},{"line_number":128,"context_line":"        return self.cluster_name or self.host"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def update_capabilities(self, capabilities\u003dNone, service\u003dNone):"},{"line_number":131,"context_line":"        # Read-only capability dicts"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a74a57a_f3a15095","line":128,"range":{"start_line":126,"start_character":0,"end_line":128,"end_character":45},"updated":"2016-11-28 15:09:22.000000000","message":"This confuses me a little - we\u0027re already having `id` column in `services` table, and it\u0027s just a numeric id. Should we use some name like \"backend\" or maybe \"host_id\"?","commit_id":"9d5fd73bbab5c89c7e8bc3bcde7eaa4c3d5ce7de"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fb42ffec4d02d271ea1bd7ff90a8d143b6b519ab","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        self.updated \u003d None"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @property"},{"line_number":127,"context_line":"    def id(self):"},{"line_number":128,"context_line":"        return self.cluster_name or self.host"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def update_capabilities(self, capabilities\u003dNone, service\u003dNone):"},{"line_number":131,"context_line":"        # Read-only capability dicts"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a74a57a_2f9fd05f","line":128,"range":{"start_line":126,"start_character":0,"end_line":128,"end_character":45},"in_reply_to":"5a74a57a_f3a15095","updated":"2016-11-30 10:16:19.000000000","message":"This is not a class to reflect the service table, so I think naming the property ID makes sense.  But I see value in naming it `backend_id` so I\u0027ll rename it.  :-(","commit_id":"9d5fd73bbab5c89c7e8bc3bcde7eaa4c3d5ce7de"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"ae3d45d9d2f5517a94fb76589f00e58613bbce04","unresolved":false,"context_lines":[{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    def notify_service_capabilities(self, service_name, host, capabilities):"},{"line_number":504,"context_line":"        \"\"\"Notify the ceilometer with updated volume stats\"\"\""},{"line_number":505,"context_line":"        # TODO(geguileo): Make this work with Active/Active"},{"line_number":506,"context_line":"        if service_name !\u003d \u0027volume\u0027:"},{"line_number":507,"context_line":"            return"},{"line_number":508,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"1a6eadb0_bf05ee11","line":505,"range":{"start_line":505,"start_character":0,"end_line":505,"end_character":59},"updated":"2016-12-15 14:32:22.000000000","message":"That\u0027s enough for me.","commit_id":"9acf079b8c84f7d8e9151d58162a8deb8fd77fad"}],"cinder/scheduler/rpcapi.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"0d3c2d926ffb6463207079615af2a551bf5c91fc","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        cctxt \u003d self._get_cctxt()"},{"line_number":150,"context_line":"        return cctxt.call(ctxt, \u0027get_pools\u0027, filters\u003dfilters)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def update_service_capabilities(self, ctxt, service_name, host,"},{"line_number":153,"context_line":"                                    capabilities, cluster_name,"},{"line_number":154,"context_line":"                                    timestamp\u003dNone):"},{"line_number":155,"context_line":"        msg_args \u003d dict(service_name\u003dservice_name, host\u003dhost,"},{"line_number":156,"context_line":"                        capabilities\u003dcapabilities)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        version \u003d \u00273.2\u0027"},{"line_number":159,"context_line":"        # If server accepts timestamping the capabilities and the cluster name"},{"line_number":160,"context_line":"        if self.client.can_send_version(version):"},{"line_number":161,"context_line":"            # Serialize the timestamp"},{"line_number":162,"context_line":"            timestamp \u003d timestamp or timeutils.utcnow()"},{"line_number":163,"context_line":"            msg_args.update(cluster_name\u003dcluster_name,"},{"line_number":164,"context_line":"                            timestamp\u003djsonutils.to_primitive(timestamp))"},{"line_number":165,"context_line":"        else:"},{"line_number":166,"context_line":"            version \u003d \u00273.0\u0027"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        cctxt \u003d self._get_cctxt(fanout\u003dTrue, version\u003dversion)"},{"line_number":169,"context_line":"        cctxt.cast(ctxt, \u0027update_service_capabilities\u0027, **msg_args)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def notify_service_capabilities(self, ctxt, service_name,"},{"line_number":172,"context_line":"                                    host, capabilities):"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_e54ca478","line":169,"range":{"start_line":152,"start_character":0,"end_line":169,"end_character":67},"updated":"2016-12-08 15:48:42.000000000","message":"Shouldn\u0027t we do the same with notify_service_capabilities now?","commit_id":"92a89af3de72edf1e801038ae8fbc77820b7f8c9"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"4ae5dde5fb94aa3b0ae8765273d61ae8adb39d98","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        cctxt \u003d self._get_cctxt()"},{"line_number":150,"context_line":"        return cctxt.call(ctxt, \u0027get_pools\u0027, filters\u003dfilters)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def update_service_capabilities(self, ctxt, service_name, host,"},{"line_number":153,"context_line":"                                    capabilities, cluster_name,"},{"line_number":154,"context_line":"                                    timestamp\u003dNone):"},{"line_number":155,"context_line":"        msg_args \u003d dict(service_name\u003dservice_name, host\u003dhost,"},{"line_number":156,"context_line":"                        capabilities\u003dcapabilities)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        version \u003d \u00273.2\u0027"},{"line_number":159,"context_line":"        # If server accepts timestamping the capabilities and the cluster name"},{"line_number":160,"context_line":"        if self.client.can_send_version(version):"},{"line_number":161,"context_line":"            # Serialize the timestamp"},{"line_number":162,"context_line":"            timestamp \u003d timestamp or timeutils.utcnow()"},{"line_number":163,"context_line":"            msg_args.update(cluster_name\u003dcluster_name,"},{"line_number":164,"context_line":"                            timestamp\u003djsonutils.to_primitive(timestamp))"},{"line_number":165,"context_line":"        else:"},{"line_number":166,"context_line":"            version \u003d \u00273.0\u0027"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        cctxt \u003d self._get_cctxt(fanout\u003dTrue, version\u003dversion)"},{"line_number":169,"context_line":"        cctxt.cast(ctxt, \u0027update_service_capabilities\u0027, **msg_args)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def notify_service_capabilities(self, ctxt, service_name,"},{"line_number":172,"context_line":"                                    host, capabilities):"}],"source_content_type":"text/x-python","patch_set":34,"id":"1a6eadb0_ff592636","line":169,"range":{"start_line":152,"start_character":0,"end_line":169,"end_character":67},"in_reply_to":"3a71b18c_b271e2aa","updated":"2016-12-15 14:32:42.000000000","message":"Yup, I was to ask you about merging this one, but it got merged before I did that. Sorry!","commit_id":"92a89af3de72edf1e801038ae8fbc77820b7f8c9"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0087b5507e8471690454a6818d7d51bc5e49e13c","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        cctxt \u003d self._get_cctxt()"},{"line_number":150,"context_line":"        return cctxt.call(ctxt, \u0027get_pools\u0027, filters\u003dfilters)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def update_service_capabilities(self, ctxt, service_name, host,"},{"line_number":153,"context_line":"                                    capabilities, cluster_name,"},{"line_number":154,"context_line":"                                    timestamp\u003dNone):"},{"line_number":155,"context_line":"        msg_args \u003d dict(service_name\u003dservice_name, host\u003dhost,"},{"line_number":156,"context_line":"                        capabilities\u003dcapabilities)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        version \u003d \u00273.2\u0027"},{"line_number":159,"context_line":"        # If server accepts timestamping the capabilities and the cluster name"},{"line_number":160,"context_line":"        if self.client.can_send_version(version):"},{"line_number":161,"context_line":"            # Serialize the timestamp"},{"line_number":162,"context_line":"            timestamp \u003d timestamp or timeutils.utcnow()"},{"line_number":163,"context_line":"            msg_args.update(cluster_name\u003dcluster_name,"},{"line_number":164,"context_line":"                            timestamp\u003djsonutils.to_primitive(timestamp))"},{"line_number":165,"context_line":"        else:"},{"line_number":166,"context_line":"            version \u003d \u00273.0\u0027"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        cctxt \u003d self._get_cctxt(fanout\u003dTrue, version\u003dversion)"},{"line_number":169,"context_line":"        cctxt.cast(ctxt, \u0027update_service_capabilities\u0027, **msg_args)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def notify_service_capabilities(self, ctxt, service_name,"},{"line_number":172,"context_line":"                                    host, capabilities):"}],"source_content_type":"text/x-python","patch_set":34,"id":"3a71b18c_b271e2aa","line":169,"range":{"start_line":152,"start_character":0,"end_line":169,"end_character":67},"in_reply_to":"3a71b18c_e54ca478","updated":"2016-12-09 13:44:21.000000000","message":"Well, apparently \"we\" merged a patch [1] that was meant to work with the old Active/Active mechanism that used the host field to distribute jobs, so it\u0027s going to be a mess to fix that new functionality now.\n\nI\u0027ve looked at it and that is going to require a considerable patch, so I\u0027m not going to do it in this patch.\n\nI\u0027ll update the patch to reflect that that\u0027s something we need to do in another patch.\n\n[1] https://review.openstack.org/#/c/206923/","commit_id":"92a89af3de72edf1e801038ae8fbc77820b7f8c9"}],"cinder/tests/unit/api/contrib/test_volume_manage.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"15edf7ae12effe742da4cdd1a916cf527321b4df","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    @mock.patch("},{"line_number":243,"context_line":"        \u0027cinder.api.openstack.wsgi.Controller.validate_name_and_description\u0027)"},{"line_number":244,"context_line":"    def test_manage_volume_ok_cluster(self, mock_validate, mock_api_manage):"},{"line_number":245,"context_line":"        body \u003d {\u0027volume\u0027: {\u0027host\u0027: \u0027host_ok\u0027,"},{"line_number":246,"context_line":"                           \u0027cluster\u0027: \u0027cluster\u0027,"},{"line_number":247,"context_line":"                           \u0027ref\u0027: \u0027fake_ref\u0027}}"},{"line_number":248,"context_line":"        res \u003d self._get_resp_create(body, \u00273.16\u0027)"},{"line_number":249,"context_line":"        self.assertEqual([\u0027volume\u0027], list(res.keys()))"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a74a57a_d3de14dc","line":246,"range":{"start_line":245,"start_character":27,"end_line":246,"end_character":48},"updated":"2016-11-28 15:09:22.000000000","message":"We have both host and cluster here and it works fine?","commit_id":"9d5fd73bbab5c89c7e8bc3bcde7eaa4c3d5ce7de"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fb42ffec4d02d271ea1bd7ff90a8d143b6b519ab","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    @mock.patch("},{"line_number":243,"context_line":"        \u0027cinder.api.openstack.wsgi.Controller.validate_name_and_description\u0027)"},{"line_number":244,"context_line":"    def test_manage_volume_ok_cluster(self, mock_validate, mock_api_manage):"},{"line_number":245,"context_line":"        body \u003d {\u0027volume\u0027: {\u0027host\u0027: \u0027host_ok\u0027,"},{"line_number":246,"context_line":"                           \u0027cluster\u0027: \u0027cluster\u0027,"},{"line_number":247,"context_line":"                           \u0027ref\u0027: \u0027fake_ref\u0027}}"},{"line_number":248,"context_line":"        res \u003d self._get_resp_create(body, \u00273.16\u0027)"},{"line_number":249,"context_line":"        self.assertEqual([\u0027volume\u0027], list(res.keys()))"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a74a57a_ec05e645","line":246,"range":{"start_line":245,"start_character":27,"end_line":246,"end_character":48},"in_reply_to":"5a74a57a_d3de14dc","updated":"2016-11-30 10:16:19.000000000","message":"Because I hadn\u0027t made the change to the volume manage to make it only accept one.  :-(","commit_id":"9d5fd73bbab5c89c7e8bc3bcde7eaa4c3d5ce7de"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"58b290fa2d4c994d39c2451feb5bda902542f54a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    return mapper"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def service_get(context, id, host\u003dNone, binary\u003dNone, *args, **kwargs):"},{"line_number":56,"context_line":"    \"\"\"Replacement for Service.service_get_by_host_and_topic."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    We mock the Service.service_get_by_host_and_topic method to return"}],"source_content_type":"text/x-python","patch_set":38,"id":"1a6eadb0_d5eb38da","line":55,"range":{"start_line":55,"start_character":25,"end_line":55,"end_character":27},"updated":"2016-12-16 14:29:42.000000000","message":"id is actually a keyword in Python. I think this is OK for now, but would be good to change this in a follow on patch.","commit_id":"9acf079b8c84f7d8e9151d58162a8deb8fd77fad"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"639a073ec10bb78e784193f5e57db352030a8eeb","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    return mapper"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def service_get(context, id, host\u003dNone, binary\u003dNone, *args, **kwargs):"},{"line_number":56,"context_line":"    \"\"\"Replacement for Service.service_get_by_host_and_topic."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    We mock the Service.service_get_by_host_and_topic method to return"}],"source_content_type":"text/x-python","patch_set":38,"id":"1a6eadb0_78013e39","line":55,"range":{"start_line":55,"start_character":25,"end_line":55,"end_character":27},"in_reply_to":"1a6eadb0_d5eb38da","updated":"2016-12-19 11:01:10.000000000","message":"I usually avoid reserved keywords, but since we use the id keyword throughout the code I slipped here.\n\nPatch fixing the method\u0027s signature is here: https://review.openstack.org/412403","commit_id":"9acf079b8c84f7d8e9151d58162a8deb8fd77fad"}],"cinder/tests/unit/scheduler/fakes.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"15edf7ae12effe742da4cdd1a916cf527321b4df","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from cinder.scheduler import host_manager"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"UTC_NOW \u003d timeutils.utcnow()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class FakeFilterScheduler(filter_scheduler.FilterScheduler):"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a74a57a_338e68d0","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":28},"updated":"2016-11-28 15:09:22.000000000","message":"Nothing too serious, but I think it\u0027s better to have deterministic data in unit tests. Update if you wish.","commit_id":"9d5fd73bbab5c89c7e8bc3bcde7eaa4c3d5ce7de"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fb42ffec4d02d271ea1bd7ff90a8d143b6b519ab","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from cinder.scheduler import host_manager"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"UTC_NOW \u003d timeutils.utcnow()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class FakeFilterScheduler(filter_scheduler.FilterScheduler):"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a74a57a_2f4b505a","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":28},"in_reply_to":"5a74a57a_338e68d0","updated":"2016-11-30 10:16:19.000000000","message":"I would use static values if it where necessary, for the tests, but in this case it isn\u0027t...  So any time should do.","commit_id":"9d5fd73bbab5c89c7e8bc3bcde7eaa4c3d5ce7de"}],"cinder/volume/flows/api/create_volume.py":[{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"163798d160b7ced85ba937bde3d73477fad9747b","unresolved":false,"context_lines":[{"line_number":763,"context_line":"            volume.scheduled_at \u003d timeutils.utcnow()"},{"line_number":764,"context_line":"            volume.save()"},{"line_number":765,"context_line":"            if not cgsnapshot_id:"},{"line_number":766,"context_line":"                self.volume_rpcapi.create_volume("},{"line_number":767,"context_line":"                    context,"},{"line_number":768,"context_line":"                    volume,"},{"line_number":769,"context_line":"                    request_spec,"},{"line_number":770,"context_line":"                    filter_properties,"},{"line_number":771,"context_line":"                    allow_reschedule\u003dFalse)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def execute(self, context, **kwargs):"},{"line_number":774,"context_line":"        scheduler_hints \u003d kwargs.pop(\u0027scheduler_hints\u0027, None)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a74a57a_afa97be1","line":771,"range":{"start_line":766,"start_character":0,"end_line":771,"end_character":43},"updated":"2016-11-25 06:44:16.000000000","message":"https://review.openstack.org/#/c/344226/25/cinder/volume/rpcapi.py@163\n\n-1. I think we need to set cluster here, not just host.","commit_id":"e7623027d167278682026ed3e9c9e4e28a4f93f8"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d7576d66b3b11b934af4ff429bace118b3d22044","unresolved":false,"context_lines":[{"line_number":763,"context_line":"            volume.scheduled_at \u003d timeutils.utcnow()"},{"line_number":764,"context_line":"            volume.save()"},{"line_number":765,"context_line":"            if not cgsnapshot_id:"},{"line_number":766,"context_line":"                self.volume_rpcapi.create_volume("},{"line_number":767,"context_line":"                    context,"},{"line_number":768,"context_line":"                    volume,"},{"line_number":769,"context_line":"                    request_spec,"},{"line_number":770,"context_line":"                    filter_properties,"},{"line_number":771,"context_line":"                    allow_reschedule\u003dFalse)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def execute(self, context, **kwargs):"},{"line_number":774,"context_line":"        scheduler_hints \u003d kwargs.pop(\u0027scheduler_hints\u0027, None)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a74a57a_0c0b158f","line":771,"range":{"start_line":766,"start_character":0,"end_line":771,"end_character":43},"in_reply_to":"5a74a57a_afa97be1","updated":"2016-11-28 12:55:28.000000000","message":"Great catch!!","commit_id":"e7623027d167278682026ed3e9c9e4e28a4f93f8"}],"cinder/volume/rpcapi.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"15edf7ae12effe742da4cdd1a916cf527321b4df","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def update_consistencygroup(self, ctxt, group, add_volumes\u003dNone,"},{"line_number":138,"context_line":"                                remove_volumes\u003dNone):"},{"line_number":139,"context_line":"        cctxt \u003d self._get_cctxt(group.host)"},{"line_number":140,"context_line":"        cctxt.cast(ctxt, \u0027update_consistencygroup\u0027,"},{"line_number":141,"context_line":"                   group\u003dgroup,"},{"line_number":142,"context_line":"                   add_volumes\u003dadd_volumes,"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a74a57a_aa53dc37","line":139,"range":{"start_line":139,"start_character":32,"end_line":139,"end_character":42},"updated":"2016-11-28 15:09:22.000000000","message":"What about this one?","commit_id":"9d5fd73bbab5c89c7e8bc3bcde7eaa4c3d5ce7de"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fb42ffec4d02d271ea1bd7ff90a8d143b6b519ab","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def update_consistencygroup(self, ctxt, group, add_volumes\u003dNone,"},{"line_number":138,"context_line":"                                remove_volumes\u003dNone):"},{"line_number":139,"context_line":"        cctxt \u003d self._get_cctxt(group.host)"},{"line_number":140,"context_line":"        cctxt.cast(ctxt, \u0027update_consistencygroup\u0027,"},{"line_number":141,"context_line":"                   group\u003dgroup,"},{"line_number":142,"context_line":"                   add_volumes\u003dadd_volumes,"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a74a57a_efe0782b","line":139,"range":{"start_line":139,"start_character":32,"end_line":139,"end_character":42},"in_reply_to":"5a74a57a_aa53dc37","updated":"2016-11-30 10:16:19.000000000","message":"That one isn\u0027t going through the scheduler, so it\u0027s changed in another patch: https://review.openstack.org/#/c/355968/20/cinder/volume/rpcapi.py@139","commit_id":"9d5fd73bbab5c89c7e8bc3bcde7eaa4c3d5ce7de"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"15edf7ae12effe742da4cdd1a916cf527321b4df","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                   reservations\u003dreservations)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def migrate_volume(self, ctxt, volume, dest_host, force_host_copy):"},{"line_number":239,"context_line":"        backend_p \u003d {\u0027host\u0027: dest_host.host,"},{"line_number":240,"context_line":"                     \u0027cluster_name\u0027: dest_host.cluster_name,"},{"line_number":241,"context_line":"                     \u0027capabilities\u0027: dest_host.capabilities}"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        version \u003d \u00273.3\u0027"},{"line_number":244,"context_line":"        if not self.client.can_send_version(version):"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a74a57a_4ab24895","line":241,"range":{"start_line":239,"start_character":0,"end_line":241,"end_character":60},"updated":"2016-11-28 15:09:22.000000000","message":"Generally this should be backported using objects, but this way also works. We\u0027ll move it to a versioned object one day. ;)","commit_id":"9d5fd73bbab5c89c7e8bc3bcde7eaa4c3d5ce7de"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fb42ffec4d02d271ea1bd7ff90a8d143b6b519ab","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                   reservations\u003dreservations)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def migrate_volume(self, ctxt, volume, dest_host, force_host_copy):"},{"line_number":239,"context_line":"        backend_p \u003d {\u0027host\u0027: dest_host.host,"},{"line_number":240,"context_line":"                     \u0027cluster_name\u0027: dest_host.cluster_name,"},{"line_number":241,"context_line":"                     \u0027capabilities\u0027: dest_host.capabilities}"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        version \u003d \u00273.3\u0027"},{"line_number":244,"context_line":"        if not self.client.can_send_version(version):"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a74a57a_cfcc9cbd","line":241,"range":{"start_line":239,"start_character":0,"end_line":241,"end_character":60},"in_reply_to":"5a74a57a_4ab24895","updated":"2016-11-30 10:16:19.000000000","message":"That\u0027s what I thought as well, but I didn\u0027t want to delay this work even more with another patch that moved it to an OVO.  :-(","commit_id":"9d5fd73bbab5c89c7e8bc3bcde7eaa4c3d5ce7de"}]}
