)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"6d61c317739614e1831477a4540701038c0397d9","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"CPU info of hypervisors were changed from string to object at API"},{"line_number":10,"context_line":"microversion 2.28. CPU info could be empty when using ironic virt"},{"line_number":11,"context_line":"driver. The empty stirng cannot be convert to a JSON object.This"},{"line_number":12,"context_line":"patch converts an empty string to an empty JSON."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I34a7937ee6df985587fa98ccc3a17c969516d5ef"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"bacf61ea_66cb67a6","line":11,"range":{"start_line":11,"start_character":8,"end_line":11,"end_character":24},"updated":"2016-07-28 17:39:27.000000000","message":"On the alternative patch discussion(https://review.openstack.org/#/c/347870/), None also can come here, I guess it is better to write None also here.","commit_id":"f28079195fac622e4f6016c128adeb7c6d25d735"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"34cc53d2d9b1985f85984817fbaf1e4dbb12f8dc","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"CPU info of hypervisors were changed from string to object at API"},{"line_number":10,"context_line":"microversion 2.28. CPU info could be empty when using ironic virt"},{"line_number":11,"context_line":"driver. The empty stirng cannot be convert to a JSON object.This"},{"line_number":12,"context_line":"patch converts an empty string to an empty JSON."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I34a7937ee6df985587fa98ccc3a17c969516d5ef"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"bacf61ea_9e94ad43","line":11,"range":{"start_line":11,"start_character":8,"end_line":11,"end_character":24},"in_reply_to":"bacf61ea_66cb67a6","updated":"2016-07-29 16:05:44.000000000","message":"Done","commit_id":"f28079195fac622e4f6016c128adeb7c6d25d735"},{"author":{"_account_id":12712,"name":"Gleb Stepanov","email":"gstepanov@mirantis.com","username":"stgleb"},"change_message_id":"3ccea92e07fd2cfc501af4fd42546b829b9e0962","unresolved":false,"context_lines":[{"line_number":15,"context_line":"This patch set cpu info in an API resonse to None in the case. An"},{"line_number":16,"context_line":"alternative option is setting an empty dict. None would be better"},{"line_number":17,"context_line":"because nova hypervisor-show command can display cpu info explicitly."},{"line_number":18,"context_line":"Cpu info is not displayed when a empty dict is retuned."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This patch also adds unit tests for this fix. These tests copies an"},{"line_number":21,"context_line":"hypervisor object locally and modified the copy. In"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"bacf61ea_80a271fb","line":18,"updated":"2016-07-30 10:59:12.000000000","message":"returned","commit_id":"4b6b74630660d1a4842dda7e9e941646afb764f7"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"41f1efa497a37796e35ce57e24d19f0644fd2750","unresolved":false,"context_lines":[{"line_number":15,"context_line":"This patch set cpu info in an API resonse to None in the case. An"},{"line_number":16,"context_line":"alternative option is setting an empty dict. None would be better"},{"line_number":17,"context_line":"because nova hypervisor-show command can display cpu info explicitly."},{"line_number":18,"context_line":"Cpu info is not displayed when a empty dict is retuned."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This patch also adds unit tests for this fix. These tests copies an"},{"line_number":21,"context_line":"hypervisor object locally and modified the copy. In"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"bacf61ea_c0474975","line":18,"in_reply_to":"bacf61ea_80a271fb","updated":"2016-07-30 12:44:07.000000000","message":"Done","commit_id":"4b6b74630660d1a4842dda7e9e941646afb764f7"}],"nova/api/openstack/compute/hypervisors.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c936279b69fe9bf7088e19d9f995480a69138c00","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                if hypervisor.cpu_info:"},{"line_number":73,"context_line":"                    hyp_dict[\u0027cpu_info\u0027] \u003d jsonutils.loads(hypervisor.cpu_info)"},{"line_number":74,"context_line":"                else:"},{"line_number":75,"context_line":"                    hyp_dict[\u0027cpu_info\u0027] \u003d None"},{"line_number":76,"context_line":"            else:"},{"line_number":77,"context_line":"                hyp_dict[\u0027cpu_info\u0027] \u003d hypervisor.cpu_info"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_6051a10e","line":75,"updated":"2016-08-03 10:04:52.000000000","message":"So here, we say it returns a dictionary, so I think we should keep returning a dictionary, i.e. return an empty dictionary:\nhttp://developer.openstack.org/api-ref/compute/?expanded\u003dlist-hypervisors-details-detail#id298","commit_id":"dec8120eb8b0620109a53c735056e10c214f6aa2"}],"nova/cells/utils.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"6d61c317739614e1831477a4540701038c0397d9","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    def __getattr__(self, key):"},{"line_number":113,"context_line":"        return getattr(self._obj, key)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def __deepcopy__(self, memo):"},{"line_number":116,"context_line":"        return _CellProxy(copy.deepcopy(self._obj, memo), self._cell_path)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class ComputeNodeProxy(_CellProxy):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_069f0bb5","line":116,"range":{"start_line":115,"start_character":0,"end_line":116,"end_character":74},"updated":"2016-07-28 17:39:27.000000000","message":"Why do we need this change here?\nThe commit message doesn\u0027t mention the reason, and a little hard to understand..","commit_id":"f28079195fac622e4f6016c128adeb7c6d25d735"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"34cc53d2d9b1985f85984817fbaf1e4dbb12f8dc","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    def __getattr__(self, key):"},{"line_number":113,"context_line":"        return getattr(self._obj, key)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def __deepcopy__(self, memo):"},{"line_number":116,"context_line":"        return _CellProxy(copy.deepcopy(self._obj, memo), self._cell_path)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class ComputeNodeProxy(_CellProxy):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_fefa0942","line":116,"range":{"start_line":115,"start_character":0,"end_line":116,"end_character":74},"in_reply_to":"bacf61ea_069f0bb5","updated":"2016-07-29 16:05:44.000000000","message":"I agree with you. The reason should be mentioned. I added description in the commit message.","commit_id":"f28079195fac622e4f6016c128adeb7c6d25d735"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"be946d01e57000a2d116d12e59879346b247fe99","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        return getattr(self._obj, key)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def __deepcopy__(self, memo):"},{"line_number":116,"context_line":"        return _CellProxy(copy.deepcopy(self._obj, memo), self._cell_path)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class ComputeNodeProxy(_CellProxy):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_3f836dce","line":116,"updated":"2016-08-08 14:10:38.000000000","message":"If this deepcopy is only being used for testing (the commit messages suggests that\u0027s the case) then I would think the test should add the deepcopy functionality and not have it here.\n\nOr, if the deepcopy will be used for things other than testing there ought to be a comment here (not just in the commit message) about what it is doing and why.","commit_id":"92005d4a434bfe97f8ad86be726afb0beeaadfed"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"b4ad17f2339f50b70cacf8dace4337b4f979429d","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        return getattr(self._obj, key)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def __deepcopy__(self, memo):"},{"line_number":116,"context_line":"        return _CellProxy(copy.deepcopy(self._obj, memo), self._cell_path)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class ComputeNodeProxy(_CellProxy):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad45d7e_c7ad1f8a","line":116,"in_reply_to":"9ad45d7e_3f836dce","updated":"2016-08-08 18:22:42.000000000","message":"deepcopy is used only for the test. So, I added the method in the test.","commit_id":"92005d4a434bfe97f8ad86be726afb0beeaadfed"}],"nova/tests/unit/api/openstack/compute/test_hypervisors.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"6d61c317739614e1831477a4540701038c0397d9","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        req \u003d self._get_request(True)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        test_hypervisor_obj \u003d copy.deepcopy(self.TEST_HYPERS_OBJ[0])"},{"line_number":264,"context_line":"        test_hypervisor_obj.cpu_info \u003d \u0027\u0027"},{"line_number":265,"context_line":"        result \u003d self.controller._view_hypervisor(test_hypervisor_obj,"},{"line_number":266,"context_line":"                                                  self.TEST_SERVICES[0],"},{"line_number":267,"context_line":"                                                  True, req)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_a6739f7f","line":264,"updated":"2016-07-28 17:39:27.000000000","message":"Better to add None case also.","commit_id":"f28079195fac622e4f6016c128adeb7c6d25d735"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"34cc53d2d9b1985f85984817fbaf1e4dbb12f8dc","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        req \u003d self._get_request(True)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        test_hypervisor_obj \u003d copy.deepcopy(self.TEST_HYPERS_OBJ[0])"},{"line_number":264,"context_line":"        test_hypervisor_obj.cpu_info \u003d \u0027\u0027"},{"line_number":265,"context_line":"        result \u003d self.controller._view_hypervisor(test_hypervisor_obj,"},{"line_number":266,"context_line":"                                                  self.TEST_SERVICES[0],"},{"line_number":267,"context_line":"                                                  True, req)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_9e7b0d28","line":264,"in_reply_to":"bacf61ea_a6739f7f","updated":"2016-07-29 16:05:44.000000000","message":"Done","commit_id":"f28079195fac622e4f6016c128adeb7c6d25d735"}]}
