)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"eab3cace1835ec1a9d92ff39efa3c9bdee01ed21","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Sudipta Biswas \u003csbiswas7@in.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-21 00:50:11 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Introduce utility module for pcp"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patchset introduces the pcp utility module."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a50d1a3_4a5e84ea","line":7,"updated":"2015-07-26 06:20:47.000000000","message":"please prefix this with libvirt","commit_id":"9aefb0c0894e487efb3de834f2a1c50032a85123"}],"nova/tests/unit/virt/libvirt/test_pcp_utils.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"649c41b270bd63138a7177e16e4f7eab016a117a","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @property"},{"line_number":33,"context_line":"    def type(self):"},{"line_number":34,"context_line":"        return 0"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def get_numval(self, value):"},{"line_number":37,"context_line":"        return [4, 6]"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_5b464fc0","line":34,"updated":"2016-06-21 17:48:04.000000000","message":"Is 0 really a type that the pcp module returns? If so, please either consider adding a comment above that explains what 0 means or, better yet, change the pcp module interface to publish a set of constants that can be referred to by calling code...","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"e8989f895a5b59ee9ad635865d6b476e456b1a32","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @property"},{"line_number":33,"context_line":"    def type(self):"},{"line_number":34,"context_line":"        return 0"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def get_numval(self, value):"},{"line_number":37,"context_line":"        return [4, 6]"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_e6481b5e","line":34,"in_reply_to":"3aaa91ec_5b464fc0","updated":"2016-06-22 09:40:51.000000000","message":"This is being returned by the pcp python bindings (in turn the actual pcp code). I have added documentation.","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"649c41b270bd63138a7177e16e4f7eab016a117a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        return 4"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def get_inst(self, value, rangeto):"},{"line_number":50,"context_line":"        return 16"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def get_valfmt(self, value):"},{"line_number":53,"context_line":"        return \u0027format\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_bb1133b2","line":50,"updated":"2016-06-21 17:48:04.000000000","message":"What is 16? What is \"inst\"? Instance? Instruction? Instrument? Insanity? :)","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"e8989f895a5b59ee9ad635865d6b476e456b1a32","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        return 4"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def get_inst(self, value, rangeto):"},{"line_number":50,"context_line":"        return 16"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def get_valfmt(self, value):"},{"line_number":53,"context_line":"        return \u0027format\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_c6afdfe1","line":50,"in_reply_to":"3aaa91ec_bb1133b2","updated":"2016-06-22 09:40:51.000000000","message":"Will add documentation.","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"649c41b270bd63138a7177e16e4f7eab016a117a","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def get_inst(self, value, rangeto):"},{"line_number":50,"context_line":"        return 16"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def get_valfmt(self, value):"},{"line_number":53,"context_line":"        return \u0027format\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_vlist(self, value, rangeto):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_9b16f7a5","line":52,"updated":"2016-06-21 17:48:04.000000000","message":"Was it really worth it to save those few characters instead of calling the method name get_value_format()? :(","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"e8989f895a5b59ee9ad635865d6b476e456b1a32","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def get_inst(self, value, rangeto):"},{"line_number":50,"context_line":"        return 16"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def get_valfmt(self, value):"},{"line_number":53,"context_line":"        return \u0027format\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_vlist(self, value, rangeto):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_867cb773","line":52,"in_reply_to":"3aaa91ec_9b16f7a5","updated":"2016-06-22 09:40:51.000000000","message":"Unfortunately, this is the way the python binding has been written :(","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"649c41b270bd63138a7177e16e4f7eab016a117a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        return 16"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def get_valfmt(self, value):"},{"line_number":53,"context_line":"        return \u0027format\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_vlist(self, value, rangeto):"},{"line_number":56,"context_line":"        return [1, 2]"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_fb0bbb7b","line":53,"updated":"2016-06-21 17:48:04.000000000","message":"What significance does the string \u0027format\u0027 have? Is that actually something returned by the pcp module here? or is it faked-out junk?","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"649c41b270bd63138a7177e16e4f7eab016a117a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def get_valfmt(self, value):"},{"line_number":53,"context_line":"        return \u0027format\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_vlist(self, value, rangeto):"},{"line_number":56,"context_line":"        return [1, 2]"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_db107fab","line":55,"updated":"2016-06-21 17:48:04.000000000","message":"WHat is \"vlist\"? value list? Why isn\u0027t the method just get_value_list() then?\n\nDon\u0027t hide the meaning of things in the fakes. Make the fakes realistic with real-world values as much as possible.","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"e8989f895a5b59ee9ad635865d6b476e456b1a32","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def get_valfmt(self, value):"},{"line_number":53,"context_line":"        return \u0027format\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_vlist(self, value, rangeto):"},{"line_number":56,"context_line":"        return [1, 2]"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_860f97e0","line":55,"in_reply_to":"3aaa91ec_db107fab","updated":"2016-06-22 09:40:51.000000000","message":"The fakes are working against the actual attribute list returned from pcp. There they call this get_vlist :(\n\nI have tried to make some of the changes obvious in the next patchset.","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"649c41b270bd63138a7177e16e4f7eab016a117a","unresolved":false,"context_lines":[{"line_number":59,"context_line":"class FakeAtom(object):"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def __init__(self):"},{"line_number":62,"context_line":"        self.l \u003d \u0027Hyper Tension\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class FakeDescList(object):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_3b26e316","line":62,"updated":"2016-06-21 17:48:04.000000000","message":"There is an instance attribute called \"l\"? :( Seriously, that is a horrible attribute name.","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"e8989f895a5b59ee9ad635865d6b476e456b1a32","unresolved":false,"context_lines":[{"line_number":59,"context_line":"class FakeAtom(object):"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def __init__(self):"},{"line_number":62,"context_line":"        self.l \u003d \u0027Hyper Tension\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class FakeDescList(object):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_263183a3","line":62,"in_reply_to":"3aaa91ec_3b26e316","updated":"2016-06-22 09:40:51.000000000","message":":( Yeah - i have added documentation.","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"649c41b270bd63138a7177e16e4f7eab016a117a","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            return_value\u003dFakeContents().get_vlist(0, 4))"},{"line_number":101,"context_line":"        pcp_driver.context.pmExtractValue \u003d mock.Mock("},{"line_number":102,"context_line":"            return_value\u003dFakeAtom())"},{"line_number":103,"context_line":"        self.values_to_return \u003d {16: \u0027Hyper Tension\u0027}"},{"line_number":104,"context_line":"        self.assertEqual("},{"line_number":105,"context_line":"            pcp_driver.get_metric_value(\u0027abcd\u0027),"},{"line_number":106,"context_line":"            self.values_to_return)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_1b232707","line":103,"updated":"2016-06-21 17:48:04.000000000","message":"Don\u0027t use self... just do:\n\n expected \u003d {10: \u0027Hyper Tension\u0027}\n self.assertEqual(expected, pcp_driver.get_metric_value(\u0027abcd\u0027)","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"e8989f895a5b59ee9ad635865d6b476e456b1a32","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            return_value\u003dFakeContents().get_vlist(0, 4))"},{"line_number":101,"context_line":"        pcp_driver.context.pmExtractValue \u003d mock.Mock("},{"line_number":102,"context_line":"            return_value\u003dFakeAtom())"},{"line_number":103,"context_line":"        self.values_to_return \u003d {16: \u0027Hyper Tension\u0027}"},{"line_number":104,"context_line":"        self.assertEqual("},{"line_number":105,"context_line":"            pcp_driver.get_metric_value(\u0027abcd\u0027),"},{"line_number":106,"context_line":"            self.values_to_return)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_86267766","line":103,"in_reply_to":"3aaa91ec_1b232707","updated":"2016-06-22 09:40:51.000000000","message":"This was a miss.","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f714863f6d323740043405071ea7209306c59a3f","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_C_API(self):"},{"line_number":65,"context_line":"        pcp_utils.C_API \u003d None"},{"line_number":66,"context_line":"        importutils.import_module \u003d mock.Mock()"},{"line_number":67,"context_line":"        pcp_utils.PCPDriver()"},{"line_number":68,"context_line":"        importutils.import_module.assert_called_once_with(\u0027cpmapi\u0027)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_c766dd28","line":66,"range":{"start_line":66,"start_character":8,"end_line":66,"end_character":47},"updated":"2016-06-27 15:08:33.000000000","message":"This is mocking a global, right? Where do you unset this?","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"3e8b92da7ced85358768f6dea4cc00c68f68f765","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_C_API(self):"},{"line_number":65,"context_line":"        pcp_utils.C_API \u003d None"},{"line_number":66,"context_line":"        importutils.import_module \u003d mock.Mock()"},{"line_number":67,"context_line":"        pcp_utils.PCPDriver()"},{"line_number":68,"context_line":"        importutils.import_module.assert_called_once_with(\u0027cpmapi\u0027)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_9ff7cef4","line":66,"range":{"start_line":66,"start_character":8,"end_line":66,"end_character":47},"in_reply_to":"3aaa91ec_c766dd28","updated":"2016-06-28 09:58:49.000000000","message":"Does it need an explicit tearDown? Given only this test case is involved here and this would get unset for every new run implicitly?","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7b8f2250e6dad205ba81dafa174e90cc80ef098d","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def fake_result(self):"},{"line_number":45,"context_line":"        result_set \u003d None"},{"line_number":46,"context_line":"        if self.metric_name \u003d\u003d \u0027max.bandwidth\u0027:"},{"line_number":47,"context_line":"            result_set \u003d [(0, \u0027node0\u0027, lambda: next(self.value_list)),"},{"line_number":48,"context_line":"                          (1, \u0027node1\u0027, lambda: next(self.value_list))]"},{"line_number":49,"context_line":"        if self.metric_name \u003d\u003d \u0027pmcd.version\u0027:"},{"line_number":50,"context_line":"            result_set \u003d [(-1, None, lambda: \u00273.11.1\u0027)]"},{"line_number":51,"context_line":"        return result_set"}],"source_content_type":"text/x-python","patch_set":31,"id":"3aaa91ec_23f2ced2","line":48,"range":{"start_line":46,"start_character":0,"end_line":48,"end_character":70},"updated":"2016-06-29 08:45:25.000000000","message":"wrapping the value_list in an iterator then calling next on it seems unnecessary as in test_get_metric_value we only use the first two items of the list","commit_id":"888543c2d2544111b061815bbcde31af3491c6e0"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"4dcce87374bf2575e15ef6471c39e1964f71a2a6","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def fake_result(self):"},{"line_number":45,"context_line":"        result_set \u003d None"},{"line_number":46,"context_line":"        if self.metric_name \u003d\u003d \u0027max.bandwidth\u0027:"},{"line_number":47,"context_line":"            result_set \u003d [(0, \u0027node0\u0027, lambda: next(self.value_list)),"},{"line_number":48,"context_line":"                          (1, \u0027node1\u0027, lambda: next(self.value_list))]"},{"line_number":49,"context_line":"        if self.metric_name \u003d\u003d \u0027pmcd.version\u0027:"},{"line_number":50,"context_line":"            result_set \u003d [(-1, None, lambda: \u00273.11.1\u0027)]"},{"line_number":51,"context_line":"        return result_set"}],"source_content_type":"text/x-python","patch_set":31,"id":"3aaa91ec_eb708d42","line":48,"range":{"start_line":46,"start_character":0,"end_line":48,"end_character":70},"in_reply_to":"3aaa91ec_23f2ced2","updated":"2016-06-29 13:37:40.000000000","message":"Done","commit_id":"888543c2d2544111b061815bbcde31af3491c6e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7b8f2250e6dad205ba81dafa174e90cc80ef098d","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        pcp_utils.PMAPI \u003d mock.Mock()"},{"line_number":62,"context_line":"        pcp_utils.C_API \u003d mock.Mock()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_C_API(self):"},{"line_number":65,"context_line":"        pcp_utils.C_API \u003d None"},{"line_number":66,"context_line":"        importutils.import_module \u003d mock.Mock()"},{"line_number":67,"context_line":"        pcp_utils.PCPDriver()"}],"source_content_type":"text/x-python","patch_set":31,"id":"3aaa91ec_7d159547","line":64,"updated":"2016-06-29 08:45:25.000000000","message":"If we need to test that import is called, then I guess we need to cover both imports and we might need to test the fault case as well.","commit_id":"888543c2d2544111b061815bbcde31af3491c6e0"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"4dcce87374bf2575e15ef6471c39e1964f71a2a6","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        pcp_utils.PMAPI \u003d mock.Mock()"},{"line_number":62,"context_line":"        pcp_utils.C_API \u003d mock.Mock()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_C_API(self):"},{"line_number":65,"context_line":"        pcp_utils.C_API \u003d None"},{"line_number":66,"context_line":"        importutils.import_module \u003d mock.Mock()"},{"line_number":67,"context_line":"        pcp_utils.PCPDriver()"}],"source_content_type":"text/x-python","patch_set":31,"id":"3aaa91ec_2b957532","line":64,"in_reply_to":"3aaa91ec_7d159547","updated":"2016-06-29 13:37:40.000000000","message":"Done","commit_id":"888543c2d2544111b061815bbcde31af3491c6e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7b8f2250e6dad205ba81dafa174e90cc80ef098d","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def test_get_metric_value(self):"},{"line_number":71,"context_line":"        pcp_driver \u003d pcp_utils.PCPDriver()"},{"line_number":72,"context_line":"        pcp_driver.pmfg \u003d FakeFetchGroup(\u0027max.bandwidth\u0027)"},{"line_number":73,"context_line":"        expected \u003d {\u00271\u0027: 56, \u00270\u0027: 45}"},{"line_number":74,"context_line":"        self.assertEqual(expected,"},{"line_number":75,"context_line":"                         pcp_driver.get_metric_value(\u0027max.bandwidth\u0027))"}],"source_content_type":"text/x-python","patch_set":31,"id":"3aaa91ec_83ae2296","line":72,"updated":"2016-06-29 08:45:25.000000000","message":"I think it would be more understandable if you mock PMAPI.fetchgroup to return the FakeFetchGroup","commit_id":"888543c2d2544111b061815bbcde31af3491c6e0"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"4dcce87374bf2575e15ef6471c39e1964f71a2a6","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def test_get_metric_value(self):"},{"line_number":71,"context_line":"        pcp_driver \u003d pcp_utils.PCPDriver()"},{"line_number":72,"context_line":"        pcp_driver.pmfg \u003d FakeFetchGroup(\u0027max.bandwidth\u0027)"},{"line_number":73,"context_line":"        expected \u003d {\u00271\u0027: 56, \u00270\u0027: 45}"},{"line_number":74,"context_line":"        self.assertEqual(expected,"},{"line_number":75,"context_line":"                         pcp_driver.get_metric_value(\u0027max.bandwidth\u0027))"}],"source_content_type":"text/x-python","patch_set":31,"id":"3aaa91ec_eb29ad9c","line":72,"in_reply_to":"3aaa91ec_83ae2296","updated":"2016-06-29 13:37:40.000000000","message":"Umm, well the PMAPI is already a mocked out object. Unless you are very particular about this, I would like to leave it the way it is.","commit_id":"888543c2d2544111b061815bbcde31af3491c6e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"047ce3d05d2efd52827faef0c9f3b493e809925e","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def test_get_metric_value(self):"},{"line_number":71,"context_line":"        pcp_driver \u003d pcp_utils.PCPDriver()"},{"line_number":72,"context_line":"        pcp_driver.pmfg \u003d FakeFetchGroup(\u0027max.bandwidth\u0027)"},{"line_number":73,"context_line":"        expected \u003d {\u00271\u0027: 56, \u00270\u0027: 45}"},{"line_number":74,"context_line":"        self.assertEqual(expected,"},{"line_number":75,"context_line":"                         pcp_driver.get_metric_value(\u0027max.bandwidth\u0027))"}],"source_content_type":"text/x-python","patch_set":31,"id":"3aaa91ec_71112a04","line":72,"in_reply_to":"3aaa91ec_eb29ad9c","updated":"2016-06-29 14:00:54.000000000","message":"No, I\u0027m not super strict on this. Let\u0027s keep it as it is.","commit_id":"888543c2d2544111b061815bbcde31af3491c6e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7b8f2250e6dad205ba81dafa174e90cc80ef098d","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        expected \u003d {\u00271\u0027: 56, \u00270\u0027: 45}"},{"line_number":74,"context_line":"        self.assertEqual(expected,"},{"line_number":75,"context_line":"                         pcp_driver.get_metric_value(\u0027max.bandwidth\u0027))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def test_get_metric_value_string(self):"},{"line_number":78,"context_line":"        pcp_driver \u003d pcp_utils.PCPDriver()"},{"line_number":79,"context_line":"        pcp_driver.pmfg \u003d FakeFetchGroup(\u0027pmcd.version\u0027)"}],"source_content_type":"text/x-python","patch_set":31,"id":"3aaa91ec_aeaa25d0","line":76,"updated":"2016-06-29 08:45:25.000000000","message":"I think we need test coverage on the error cases","commit_id":"888543c2d2544111b061815bbcde31af3491c6e0"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"4dcce87374bf2575e15ef6471c39e1964f71a2a6","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        expected \u003d {\u00271\u0027: 56, \u00270\u0027: 45}"},{"line_number":74,"context_line":"        self.assertEqual(expected,"},{"line_number":75,"context_line":"                         pcp_driver.get_metric_value(\u0027max.bandwidth\u0027))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def test_get_metric_value_string(self):"},{"line_number":78,"context_line":"        pcp_driver \u003d pcp_utils.PCPDriver()"},{"line_number":79,"context_line":"        pcp_driver.pmfg \u003d FakeFetchGroup(\u0027pmcd.version\u0027)"}],"source_content_type":"text/x-python","patch_set":31,"id":"3aaa91ec_ab0a0524","line":76,"in_reply_to":"3aaa91ec_aeaa25d0","updated":"2016-06-29 13:37:40.000000000","message":"Done","commit_id":"888543c2d2544111b061815bbcde31af3491c6e0"}],"nova/virt/libvirt/pcp_utils.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"03e069a0330daf5257d8212f0e2eb48cbaec4dca","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from nova.i18n import _LE"},{"line_number":18,"context_line":"from nova.i18n import _LW"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"pmapi \u003d None"},{"line_number":21,"context_line":"c_api \u003d None"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_617cbbb5","line":20,"updated":"2015-07-18 12:44:47.000000000","message":"please use uppercase for global variables","commit_id":"87a905394011ff60922378f36a983fcfba337e09"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"5da5d23027d22fc56a4224c7a75229366545e290","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from nova.i18n import _LE"},{"line_number":18,"context_line":"from nova.i18n import _LW"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"pmapi \u003d None"},{"line_number":21,"context_line":"c_api \u003d None"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_5b3bd1d1","line":20,"in_reply_to":"9a41bdd9_617cbbb5","updated":"2015-07-20 18:01:35.000000000","message":"Done","commit_id":"87a905394011ff60922378f36a983fcfba337e09"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"03e069a0330daf5257d8212f0e2eb48cbaec4dca","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            try:"},{"line_number":33,"context_line":"                pmapi \u003d importutils.import_module(\u0027pcp.pmapi\u0027)"},{"line_number":34,"context_line":"            except ImportError as e:"},{"line_number":35,"context_line":"                msg \u003d (_(\u0027Cannot load pmapi: (%s)\u0027) % e)"},{"line_number":36,"context_line":"                raise exception.NovaException(msg)"},{"line_number":37,"context_line":"        if c_api is None:"},{"line_number":38,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_c143476b","line":35,"updated":"2015-07-18 12:44:47.000000000","message":"no need for the extra brackets","commit_id":"87a905394011ff60922378f36a983fcfba337e09"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"5da5d23027d22fc56a4224c7a75229366545e290","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            try:"},{"line_number":33,"context_line":"                pmapi \u003d importutils.import_module(\u0027pcp.pmapi\u0027)"},{"line_number":34,"context_line":"            except ImportError as e:"},{"line_number":35,"context_line":"                msg \u003d (_(\u0027Cannot load pmapi: (%s)\u0027) % e)"},{"line_number":36,"context_line":"                raise exception.NovaException(msg)"},{"line_number":37,"context_line":"        if c_api is None:"},{"line_number":38,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_c1637219","line":35,"in_reply_to":"9a41bdd9_c143476b","updated":"2015-07-20 18:01:35.000000000","message":"Done","commit_id":"87a905394011ff60922378f36a983fcfba337e09"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"03e069a0330daf5257d8212f0e2eb48cbaec4dca","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            try:"},{"line_number":39,"context_line":"                c_api \u003d importutils.import_module(\u0027cpmapi\u0027)"},{"line_number":40,"context_line":"            except ImportError as e:"},{"line_number":41,"context_line":"                msg \u003d (_(\u0027Cannot load cpmapi: (%s)\u0027) % e)"},{"line_number":42,"context_line":"                raise exception.NovaException(msg)"},{"line_number":43,"context_line":"        self._connect_to_pcp_daemon()"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_815e9f43","line":41,"updated":"2015-07-18 12:44:47.000000000","message":"ditto","commit_id":"87a905394011ff60922378f36a983fcfba337e09"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"5da5d23027d22fc56a4224c7a75229366545e290","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            try:"},{"line_number":39,"context_line":"                c_api \u003d importutils.import_module(\u0027cpmapi\u0027)"},{"line_number":40,"context_line":"            except ImportError as e:"},{"line_number":41,"context_line":"                msg \u003d (_(\u0027Cannot load cpmapi: (%s)\u0027) % e)"},{"line_number":42,"context_line":"                raise exception.NovaException(msg)"},{"line_number":43,"context_line":"        self._connect_to_pcp_daemon()"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_e168eef7","line":41,"in_reply_to":"9a41bdd9_815e9f43","updated":"2015-07-20 18:01:35.000000000","message":"Done","commit_id":"87a905394011ff60922378f36a983fcfba337e09"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"03e069a0330daf5257d8212f0e2eb48cbaec4dca","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            results \u003d self.context.pmFetch(metric_id)"},{"line_number":77,"context_line":"        except pmapi.pmErr as ex:"},{"line_number":78,"context_line":"            if ex.args[0] \u003d\u003d c_api.PM_ERR_NAME:"},{"line_number":79,"context_line":"                LOG.exception(_(\"The metric %(metric)s is not available\")"},{"line_number":80,"context_line":"                              % {\u0027metric\u0027: metric_name})"},{"line_number":81,"context_line":"            else:"},{"line_number":82,"context_line":"                LOG.exception(_(\"Something bad happened, Returning\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_61535b3a","line":79,"updated":"2015-07-18 12:44:47.000000000","message":"missing _LE","commit_id":"87a905394011ff60922378f36a983fcfba337e09"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"5da5d23027d22fc56a4224c7a75229366545e290","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            results \u003d self.context.pmFetch(metric_id)"},{"line_number":77,"context_line":"        except pmapi.pmErr as ex:"},{"line_number":78,"context_line":"            if ex.args[0] \u003d\u003d c_api.PM_ERR_NAME:"},{"line_number":79,"context_line":"                LOG.exception(_(\"The metric %(metric)s is not available\")"},{"line_number":80,"context_line":"                              % {\u0027metric\u0027: metric_name})"},{"line_number":81,"context_line":"            else:"},{"line_number":82,"context_line":"                LOG.exception(_(\"Something bad happened, Returning\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_4178c2c4","line":79,"in_reply_to":"9a41bdd9_61535b3a","updated":"2015-07-20 18:01:35.000000000","message":"Done","commit_id":"87a905394011ff60922378f36a983fcfba337e09"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"03e069a0330daf5257d8212f0e2eb48cbaec4dca","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                LOG.exception(_(\"The metric %(metric)s is not available\")"},{"line_number":80,"context_line":"                              % {\u0027metric\u0027: metric_name})"},{"line_number":81,"context_line":"            else:"},{"line_number":82,"context_line":"                LOG.exception(_(\"Something bad happened, Returning\"))"},{"line_number":83,"context_line":"            return"},{"line_number":84,"context_line":"        # This tuple define the types of the value fields. The indexing"},{"line_number":85,"context_line":"        # is strict and hence the order should be maintained."}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_a159635d","line":82,"updated":"2015-07-18 12:44:47.000000000","message":"missing _LE","commit_id":"87a905394011ff60922378f36a983fcfba337e09"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"5da5d23027d22fc56a4224c7a75229366545e290","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                LOG.exception(_(\"The metric %(metric)s is not available\")"},{"line_number":80,"context_line":"                              % {\u0027metric\u0027: metric_name})"},{"line_number":81,"context_line":"            else:"},{"line_number":82,"context_line":"                LOG.exception(_(\"Something bad happened, Returning\"))"},{"line_number":83,"context_line":"            return"},{"line_number":84,"context_line":"        # This tuple define the types of the value fields. The indexing"},{"line_number":85,"context_line":"        # is strict and hence the order should be maintained."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_0182ba94","line":82,"in_reply_to":"9a41bdd9_a159635d","updated":"2015-07-20 18:01:35.000000000","message":"Done","commit_id":"87a905394011ff60922378f36a983fcfba337e09"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"eab3cace1835ec1a9d92ff39efa3c9bdee01ed21","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from nova import exception"},{"line_number":16,"context_line":"from nova.i18n import _"},{"line_number":17,"context_line":"from nova.i18n import _LE"},{"line_number":18,"context_line":"from oslo_log import log as logging"},{"line_number":19,"context_line":"from oslo_utils import importutils"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"PMAPI \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_0a587cf9","line":18,"updated":"2015-07-26 06:20:47.000000000","message":"the oslo imports should be in a section above","commit_id":"9aefb0c0894e487efb3de834f2a1c50032a85123"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"eab3cace1835ec1a9d92ff39efa3c9bdee01ed21","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        except PMAPI.pmErr as ex:"},{"line_number":76,"context_line":"            if ex.args[0] \u003d\u003d C_API.PM_ERR_NAME:"},{"line_number":77,"context_line":"                LOG.exception(_LE(\"The metric %(metric)s is not available\")"},{"line_number":78,"context_line":"                              % {\u0027metric\u0027: metric_name})"},{"line_number":79,"context_line":"            else:"},{"line_number":80,"context_line":"                LOG.exception(_LE(\"Something bad happened, Returning\"))"},{"line_number":81,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_aa6708b6","line":78,"updated":"2015-07-26 06:20:47.000000000","message":"please use a comma instead of the %.\nPlease see http://docs.openstack.org/developer/oslo.i18n/guidelines.html","commit_id":"9aefb0c0894e487efb3de834f2a1c50032a85123"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"eab3cace1835ec1a9d92ff39efa3c9bdee01ed21","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            except Exception as e:"},{"line_number":103,"context_line":"                LOG.exception(_LE(\"There was an error in retrieving\""},{"line_number":104,"context_line":"                              \"the metric %(metric)s due to %(exc)s\")"},{"line_number":105,"context_line":"                              % {\u0027metric\u0027: metric_name, \u0027exc\u0027: e})"},{"line_number":106,"context_line":"                return"},{"line_number":107,"context_line":"        return values_to_return"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_4a0524c0","line":105,"updated":"2015-07-26 06:20:47.000000000","message":"ditto","commit_id":"9aefb0c0894e487efb3de834f2a1c50032a85123"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d0ab2a924a43ed2e9e27db4c23593bac0e3100db","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                    values_to_return[inst_id] \u003d getattr(atom,"},{"line_number":105,"context_line":"                                                        value_fields[type])"},{"line_number":106,"context_line":"            except PMAPI.pmErr as e:"},{"line_number":107,"context_line":"                LOG.exception(_LE(\"There was an error in retrieving\""},{"line_number":108,"context_line":"                              \"the metric %(metric)s due to %(exc)s\"),"},{"line_number":109,"context_line":"                              {\u0027metric\u0027: metric_name, \u0027exc\u0027: e})"},{"line_number":110,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":7,"id":"da85f559_6ce0f796","line":107,"updated":"2015-11-11 12:48:37.000000000","message":"missing space at the end of the line","commit_id":"9b117db8d3e505007ec61866b8e8f42749ac85f0"},{"author":{"_account_id":18247,"name":"Mark Doffman","email":"mdoffman@linux.vnet.ibm.com","username":"doffm"},"change_message_id":"7c28474562c6e4394ed529232e2cea4da88613b0","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                C_API \u003d importutils.import_module(\u0027cpmapi\u0027)"},{"line_number":45,"context_line":"            except ImportError as e:"},{"line_number":46,"context_line":"                msg \u003d _(\u0027Cannot load cpmapi: (%s)\u0027) % e"},{"line_number":47,"context_line":"                raise exception.NovaException(msg)"},{"line_number":48,"context_line":"        self._connect_to_pcp_daemon()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _connect_to_pcp_daemon(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a7e1126_96d9f785","line":47,"updated":"2015-12-17 19:49:10.000000000","message":"I see in the spec that that this monitoring should be \u0027optional\u0027 but this doesn\u0027t seem like the right way to do it. In the case that someone wants to use this monitoring they have to go digging through the code to find the python dependencies. The dependencies should be listed somewhere in requirements.txt and loaded as normal.\n\nIf we really don\u0027t want to add this to the requirements then there must be a better way to make this optional. Perhaps by adding a configuration variable and loading a dummy driver by default.\n\nI don\u0027t know what the procedure is for listing optional requirements. Could anyone enlighten me?","commit_id":"3743fe429ace247bde074f3a07c253ef31173d99"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"649c41b270bd63138a7177e16e4f7eab016a117a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            try:"},{"line_number":38,"context_line":"                PMAPI \u003d importutils.import_module(\u0027pcp.pmapi\u0027)"},{"line_number":39,"context_line":"            except ImportError as e:"},{"line_number":40,"context_line":"                msg \u003d _(\u0027Cannot load pmapi: (%s)\u0027) % e"},{"line_number":41,"context_line":"                raise exception.NovaException(msg)"},{"line_number":42,"context_line":"        if C_API is None:"},{"line_number":43,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_1b3cc72e","line":40,"updated":"2016-06-21 17:48:04.000000000","message":"Please include \"PCP\" in the error message, otherwise admins aren\u0027t going to have a clue what \"pmapi\" is.","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"e8989f895a5b59ee9ad635865d6b476e456b1a32","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            try:"},{"line_number":38,"context_line":"                PMAPI \u003d importutils.import_module(\u0027pcp.pmapi\u0027)"},{"line_number":39,"context_line":"            except ImportError as e:"},{"line_number":40,"context_line":"                msg \u003d _(\u0027Cannot load pmapi: (%s)\u0027) % e"},{"line_number":41,"context_line":"                raise exception.NovaException(msg)"},{"line_number":42,"context_line":"        if C_API is None:"},{"line_number":43,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_66e26b05","line":40,"in_reply_to":"3aaa91ec_1b3cc72e","updated":"2016-06-22 09:40:51.000000000","message":"Done.","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"649c41b270bd63138a7177e16e4f7eab016a117a","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @classmethod"},{"line_number":62,"context_line":"    def get_instance(cls):"},{"line_number":63,"context_line":"        \"\"\"To implement singleton\"\"\""},{"line_number":64,"context_line":"        if cls._instance is None:"},{"line_number":65,"context_line":"            cls._instance \u003d PCPDriver()"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_7b498bd0","line":63,"updated":"2016-06-21 17:48:04.000000000","message":"So you want a global PCPDriver? Is the PCPDriver thread-safe? If not, don\u0027t do this...","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"e8989f895a5b59ee9ad635865d6b476e456b1a32","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @classmethod"},{"line_number":62,"context_line":"    def get_instance(cls):"},{"line_number":63,"context_line":"        \"\"\"To implement singleton\"\"\""},{"line_number":64,"context_line":"        if cls._instance is None:"},{"line_number":65,"context_line":"            cls._instance \u003d PCPDriver()"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_26a6a3c1","line":63,"in_reply_to":"3aaa91ec_7b498bd0","updated":"2016-06-22 09:40:51.000000000","message":"I did some experiments around this. No I don\u0027t want this to be a singleton.  CHanged in the new patchset.","commit_id":"820b53316d85e5304e1864aea7375487a9eba213"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"82dac123d9432dd263f65fd79b99684d1ab935dc","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            self.pmfg \u003d PMAPI.fetchgroup(C_API.PM_CONTEXT_HOST, \"local:\")"},{"line_number":51,"context_line":"        except PMAPI.pmErr as ex:"},{"line_number":52,"context_line":"            msg \u003d _(\"There was an error initializing PCP: %(exc)s \""},{"line_number":53,"context_line":"                    \"Please ensure pcpd is running\"), {\u0027exc\u0027: ex}"},{"line_number":54,"context_line":"            raise exception.NovaException(msg)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def get_metric_value(self, metric_name):"}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_e7b839eb","line":53,"range":{"start_line":52,"start_character":18,"end_line":53,"end_character":65},"updated":"2016-06-27 14:57:49.000000000","message":"This is obviously not tested, it looks like a logging statement but you\u0027re trying to create a message object.","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"3e8b92da7ced85358768f6dea4cc00c68f68f765","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            self.pmfg \u003d PMAPI.fetchgroup(C_API.PM_CONTEXT_HOST, \"local:\")"},{"line_number":51,"context_line":"        except PMAPI.pmErr as ex:"},{"line_number":52,"context_line":"            msg \u003d _(\"There was an error initializing PCP: %(exc)s \""},{"line_number":53,"context_line":"                    \"Please ensure pcpd is running\"), {\u0027exc\u0027: ex}"},{"line_number":54,"context_line":"            raise exception.NovaException(msg)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def get_metric_value(self, metric_name):"}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_ec5ab24f","line":53,"range":{"start_line":52,"start_character":18,"end_line":53,"end_character":65},"in_reply_to":"3aaa91ec_e7b839eb","updated":"2016-06-28 09:58:49.000000000","message":"Great catch. Done.","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"366c47351762538ad8ec64375e43a3963d5b9a0b","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def get_metric_value(self, metric_name):"},{"line_number":57,"context_line":"        \"\"\"Obtains a metric value based upon the metric name"},{"line_number":58,"context_line":"        :param metric_name: Requested metric name"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        :returns: The value of the metrics requested. At this moment"},{"line_number":61,"context_line":"                  the values could be a dict or a raw value from pcp."},{"line_number":62,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_67944944","line":59,"updated":"2016-06-27 15:04:05.000000000","message":"nit: drop the blank line between param and returns and add a blank line between the description and param.","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"3e8b92da7ced85358768f6dea4cc00c68f68f765","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def get_metric_value(self, metric_name):"},{"line_number":57,"context_line":"        \"\"\"Obtains a metric value based upon the metric name"},{"line_number":58,"context_line":"        :param metric_name: Requested metric name"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        :returns: The value of the metrics requested. At this moment"},{"line_number":61,"context_line":"                  the values could be a dict or a raw value from pcp."},{"line_number":62,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_4c582657","line":59,"in_reply_to":"3aaa91ec_67944944","updated":"2016-06-28 09:58:49.000000000","message":"Done","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf083f7b46a303ddf151ac94a8bba92f24893068","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            self.pmfg.fetch()"},{"line_number":67,"context_line":"            if metric_value_obj:"},{"line_number":68,"context_line":"                for inst_code, inst_name, metric_value in metric_value_obj():"},{"line_number":69,"context_line":"                    if inst_code \u003d\u003d -1:"},{"line_number":70,"context_line":"                        # This means that this metric does not belong to an"},{"line_number":71,"context_line":"                        # instance domain. Hence just return the value. For"},{"line_number":72,"context_line":"                        # example: the pcp daemon version."}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_b91646ef","line":69,"updated":"2016-06-27 19:27:43.000000000","message":"Where is the test for this special case?","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c371a434b9cb97f06d487f63c5fe9dccd3548553","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            self.pmfg.fetch()"},{"line_number":67,"context_line":"            if metric_value_obj:"},{"line_number":68,"context_line":"                for inst_code, inst_name, metric_value in metric_value_obj():"},{"line_number":69,"context_line":"                    if inst_code \u003d\u003d -1:"},{"line_number":70,"context_line":"                        # This means that this metric does not belong to an"},{"line_number":71,"context_line":"                        # instance domain. Hence just return the value. For"},{"line_number":72,"context_line":"                        # example: the pcp daemon version."}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_9976ead6","line":69,"in_reply_to":"3aaa91ec_b91646ef","updated":"2016-06-27 19:41:44.000000000","message":"See how \"result_set \u003d [(-1, None, lambda: \u00273.11.1\u0027)]\" is used in the test.","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f714863f6d323740043405071ea7209306c59a3f","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            self.pmfg.fetch()"},{"line_number":67,"context_line":"            if metric_value_obj:"},{"line_number":68,"context_line":"                for inst_code, inst_name, metric_value in metric_value_obj():"},{"line_number":69,"context_line":"                    if inst_code \u003d\u003d -1:"},{"line_number":70,"context_line":"                        # This means that this metric does not belong to an"},{"line_number":71,"context_line":"                        # instance domain. Hence just return the value. For"},{"line_number":72,"context_line":"                        # example: the pcp daemon version."},{"line_number":73,"context_line":"                        return metric_value()"},{"line_number":74,"context_line":"                    else:"},{"line_number":75,"context_line":"                        # This case applies to a NUMA based reporting of a"},{"line_number":76,"context_line":"                        # metric value. instance_domains could be treated"}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_47214db4","line":73,"range":{"start_line":69,"start_character":20,"end_line":73,"end_character":45},"updated":"2016-06-27 15:08:33.000000000","message":"Why does this need to be special? It\u0027s not fun returning a single value or a dict to the caller, couldn\u0027t we just always return the dict and let the caller handle whatever parsing is necessary?","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"3e8b92da7ced85358768f6dea4cc00c68f68f765","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            self.pmfg.fetch()"},{"line_number":67,"context_line":"            if metric_value_obj:"},{"line_number":68,"context_line":"                for inst_code, inst_name, metric_value in metric_value_obj():"},{"line_number":69,"context_line":"                    if inst_code \u003d\u003d -1:"},{"line_number":70,"context_line":"                        # This means that this metric does not belong to an"},{"line_number":71,"context_line":"                        # instance domain. Hence just return the value. For"},{"line_number":72,"context_line":"                        # example: the pcp daemon version."},{"line_number":73,"context_line":"                        return metric_value()"},{"line_number":74,"context_line":"                    else:"},{"line_number":75,"context_line":"                        # This case applies to a NUMA based reporting of a"},{"line_number":76,"context_line":"                        # metric value. instance_domains could be treated"}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_cc3a56e7","line":73,"range":{"start_line":69,"start_character":20,"end_line":73,"end_character":45},"in_reply_to":"3aaa91ec_47214db4","updated":"2016-06-28 09:58:49.000000000","message":"Done","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf083f7b46a303ddf151ac94a8bba92f24893068","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            self.pmfg.fetch()"},{"line_number":67,"context_line":"            if metric_value_obj:"},{"line_number":68,"context_line":"                for inst_code, inst_name, metric_value in metric_value_obj():"},{"line_number":69,"context_line":"                    if inst_code \u003d\u003d -1:"},{"line_number":70,"context_line":"                        # This means that this metric does not belong to an"},{"line_number":71,"context_line":"                        # instance domain. Hence just return the value. For"},{"line_number":72,"context_line":"                        # example: the pcp daemon version."},{"line_number":73,"context_line":"                        return metric_value()"},{"line_number":74,"context_line":"                    else:"},{"line_number":75,"context_line":"                        # This case applies to a NUMA based reporting of a"},{"line_number":76,"context_line":"                        # metric value. instance_domains could be treated"}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_39e1b6ff","line":73,"range":{"start_line":69,"start_character":20,"end_line":73,"end_character":45},"in_reply_to":"3aaa91ec_47214db4","updated":"2016-06-27 19:27:43.000000000","message":"Yeah, we return a dict in the other case, but in this one we return the raw value. What is a raw value going to look like? A primitive of some sort I assume?","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf083f7b46a303ddf151ac94a8bba92f24893068","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                        # metric value. instance_domains could be treated"},{"line_number":77,"context_line":"                        # (not necessarily for every metrics) as sockets."},{"line_number":78,"context_line":"                        values_to_return[str(inst_code)] \u003d metric_value()"},{"line_number":79,"context_line":"        except PMAPI.pmErr as ex:"},{"line_number":80,"context_line":"            if ex.args[0] \u003d\u003d C_API.PM_ERR_NAME:"},{"line_number":81,"context_line":"                LOG.exception(_LE(\"The metric %(metric)s is not available\"),"},{"line_number":82,"context_line":"                              {\u0027metric\u0027: metric_name})"}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_194cba75","line":79,"updated":"2016-06-27 19:27:43.000000000","message":"A lot of code inside this try..except block doesn\u0027t raise pmErr, so it should be outside.","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"366c47351762538ad8ec64375e43a3963d5b9a0b","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                        # (not necessarily for every metrics) as sockets."},{"line_number":78,"context_line":"                        values_to_return[str(inst_code)] \u003d metric_value()"},{"line_number":79,"context_line":"        except PMAPI.pmErr as ex:"},{"line_number":80,"context_line":"            if ex.args[0] \u003d\u003d C_API.PM_ERR_NAME:"},{"line_number":81,"context_line":"                LOG.exception(_LE(\"The metric %(metric)s is not available\"),"},{"line_number":82,"context_line":"                              {\u0027metric\u0027: metric_name})"},{"line_number":83,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_a7f11198","line":80,"range":{"start_line":80,"start_character":15,"end_line":80,"end_character":25},"updated":"2016-06-27 15:04:05.000000000","message":"This is pretty nasty, is it part of the PMAPI API or is this subject to change and can break us? Would probably be safer to make sure args exists and that it has length of at least 1.","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"3e8b92da7ced85358768f6dea4cc00c68f68f765","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                        # (not necessarily for every metrics) as sockets."},{"line_number":78,"context_line":"                        values_to_return[str(inst_code)] \u003d metric_value()"},{"line_number":79,"context_line":"        except PMAPI.pmErr as ex:"},{"line_number":80,"context_line":"            if ex.args[0] \u003d\u003d C_API.PM_ERR_NAME:"},{"line_number":81,"context_line":"                LOG.exception(_LE(\"The metric %(metric)s is not available\"),"},{"line_number":82,"context_line":"                              {\u0027metric\u0027: metric_name})"},{"line_number":83,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_ac3f0ad5","line":80,"range":{"start_line":80,"start_character":15,"end_line":80,"end_character":25},"in_reply_to":"3aaa91ec_a7f11198","updated":"2016-06-28 09:58:49.000000000","message":"Done","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"366c47351762538ad8ec64375e43a3963d5b9a0b","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                        values_to_return[str(inst_code)] \u003d metric_value()"},{"line_number":79,"context_line":"        except PMAPI.pmErr as ex:"},{"line_number":80,"context_line":"            if ex.args[0] \u003d\u003d C_API.PM_ERR_NAME:"},{"line_number":81,"context_line":"                LOG.exception(_LE(\"The metric %(metric)s is not available\"),"},{"line_number":82,"context_line":"                              {\u0027metric\u0027: metric_name})"},{"line_number":83,"context_line":"            else:"},{"line_number":84,"context_line":"                LOG.exception(_LE(\"There was a problem while retrieving \""},{"line_number":85,"context_line":"                                  \"metrics value from PCP. Please proceed \""}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_c72eddf9","line":82,"range":{"start_line":81,"start_character":16,"end_line":82,"end_character":54},"updated":"2016-06-27 15:04:05.000000000","message":"What is an admin/operator going to do about this? Is logging a stacktrace and error really justified here?","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"3e8b92da7ced85358768f6dea4cc00c68f68f765","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                        values_to_return[str(inst_code)] \u003d metric_value()"},{"line_number":79,"context_line":"        except PMAPI.pmErr as ex:"},{"line_number":80,"context_line":"            if ex.args[0] \u003d\u003d C_API.PM_ERR_NAME:"},{"line_number":81,"context_line":"                LOG.exception(_LE(\"The metric %(metric)s is not available\"),"},{"line_number":82,"context_line":"                              {\u0027metric\u0027: metric_name})"},{"line_number":83,"context_line":"            else:"},{"line_number":84,"context_line":"                LOG.exception(_LE(\"There was a problem while retrieving \""},{"line_number":85,"context_line":"                                  \"metrics value from PCP. Please proceed \""}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_ec2112b6","line":82,"range":{"start_line":81,"start_character":16,"end_line":82,"end_character":54},"in_reply_to":"3aaa91ec_c72eddf9","updated":"2016-06-28 09:58:49.000000000","message":"Done","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"366c47351762538ad8ec64375e43a3963d5b9a0b","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                LOG.exception(_LE(\"The metric %(metric)s is not available\"),"},{"line_number":82,"context_line":"                              {\u0027metric\u0027: metric_name})"},{"line_number":83,"context_line":"            else:"},{"line_number":84,"context_line":"                LOG.exception(_LE(\"There was a problem while retrieving \""},{"line_number":85,"context_line":"                                  \"metrics value from PCP. Please proceed \""},{"line_number":86,"context_line":"                                  \"with caution.\"))"},{"line_number":87,"context_line":"            return"},{"line_number":88,"context_line":"        return values_to_return"}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_871cd5c2","line":86,"range":{"start_line":84,"start_character":16,"end_line":86,"end_character":51},"updated":"2016-06-27 15:04:05.000000000","message":"Again, if this is not something the admin/operator can address, it doesn\u0027t seem like an error level log worthy of a stacktrace, especially if you\u0027re told to proceed with caution vs wtf, stop everything, this is busted and has to be fixed immediately - which is what error is for.","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"3e8b92da7ced85358768f6dea4cc00c68f68f765","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                LOG.exception(_LE(\"The metric %(metric)s is not available\"),"},{"line_number":82,"context_line":"                              {\u0027metric\u0027: metric_name})"},{"line_number":83,"context_line":"            else:"},{"line_number":84,"context_line":"                LOG.exception(_LE(\"There was a problem while retrieving \""},{"line_number":85,"context_line":"                                  \"metrics value from PCP. Please proceed \""},{"line_number":86,"context_line":"                                  \"with caution.\"))"},{"line_number":87,"context_line":"            return"},{"line_number":88,"context_line":"        return values_to_return"}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_2c2cbaaa","line":86,"range":{"start_line":84,"start_character":16,"end_line":86,"end_character":51},"in_reply_to":"3aaa91ec_5911225d","updated":"2016-06-28 09:58:49.000000000","message":"Done","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c371a434b9cb97f06d487f63c5fe9dccd3548553","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                LOG.exception(_LE(\"The metric %(metric)s is not available\"),"},{"line_number":82,"context_line":"                              {\u0027metric\u0027: metric_name})"},{"line_number":83,"context_line":"            else:"},{"line_number":84,"context_line":"                LOG.exception(_LE(\"There was a problem while retrieving \""},{"line_number":85,"context_line":"                                  \"metrics value from PCP. Please proceed \""},{"line_number":86,"context_line":"                                  \"with caution.\"))"},{"line_number":87,"context_line":"            return"},{"line_number":88,"context_line":"        return values_to_return"}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_5911225d","line":86,"range":{"start_line":84,"start_character":16,"end_line":86,"end_character":51},"in_reply_to":"3aaa91ec_871cd5c2","updated":"2016-06-27 19:41:44.000000000","message":"As we talked about in IRC, can we get here because the pcp deamon is dead? And what is our recovery action? Restarting nova-compute is not great - could we set a dirty flag to check and attempt a reconnect?","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"3e8b92da7ced85358768f6dea4cc00c68f68f765","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                LOG.exception(_LE(\"The metric %(metric)s is not available\"),"},{"line_number":82,"context_line":"                              {\u0027metric\u0027: metric_name})"},{"line_number":83,"context_line":"            else:"},{"line_number":84,"context_line":"                LOG.exception(_LE(\"There was a problem while retrieving \""},{"line_number":85,"context_line":"                                  \"metrics value from PCP. Please proceed \""},{"line_number":86,"context_line":"                                  \"with caution.\"))"},{"line_number":87,"context_line":"            return"},{"line_number":88,"context_line":"        return values_to_return"}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_4c2f86a1","line":86,"range":{"start_line":84,"start_character":16,"end_line":86,"end_character":51},"in_reply_to":"3aaa91ec_871cd5c2","updated":"2016-06-28 09:58:49.000000000","message":"Done","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bf083f7b46a303ddf151ac94a8bba92f24893068","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                                  \"metrics value from PCP. Please proceed \""},{"line_number":86,"context_line":"                                  \"with caution.\"))"},{"line_number":87,"context_line":"            return"},{"line_number":88,"context_line":"        return values_to_return"}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_39809646","line":88,"updated":"2016-06-27 19:27:43.000000000","message":"Am I correct in saying that this will return a dict of values that depends on the version of whatever this external service is? That\u0027s not awesome.","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"3e8b92da7ced85358768f6dea4cc00c68f68f765","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                                  \"metrics value from PCP. Please proceed \""},{"line_number":86,"context_line":"                                  \"with caution.\"))"},{"line_number":87,"context_line":"            return"},{"line_number":88,"context_line":"        return values_to_return"}],"source_content_type":"text/x-python","patch_set":27,"id":"3aaa91ec_1f1abe6e","line":88,"in_reply_to":"3aaa91ec_39809646","updated":"2016-06-28 09:58:49.000000000","message":"This is a generic module for performance co-pilot (http://pcp.io/) - it will just depend on whether the version of the pcp installed supports the pmapi.fetchgroups or not. If it does - we could use this module to obtain any metric in the dict format.","commit_id":"f5f014a8e3f2531cfdbe2ecd9b34a6de50833d89"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7b8f2250e6dad205ba81dafa174e90cc80ef098d","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            self.pmfg.fetch()"},{"line_number":72,"context_line":"            if metric_value_obj:"},{"line_number":73,"context_line":"                for inst_code, inst_name, metric_value in metric_value_obj():"},{"line_number":74,"context_line":"                    # instance_domains could be treated"},{"line_number":75,"context_line":"                    # (not necessarily for every metrics) as sockets."},{"line_number":76,"context_line":"                    # -1 for an instance_domain refers to a case where"},{"line_number":77,"context_line":"                    # the value of the metric applies to the whole system."},{"line_number":78,"context_line":"                    values_to_return[str(inst_code)] \u003d metric_value()"}],"source_content_type":"text/x-python","patch_set":31,"id":"3aaa91ec_2ed3d560","line":75,"range":{"start_line":74,"start_character":20,"end_line":75,"end_character":69},"updated":"2016-06-29 08:45:25.000000000","message":"I don\u0027t see that you treat that as a socket so I don\u0027t get the comment.","commit_id":"888543c2d2544111b061815bbcde31af3491c6e0"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"4dcce87374bf2575e15ef6471c39e1964f71a2a6","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            self.pmfg.fetch()"},{"line_number":72,"context_line":"            if metric_value_obj:"},{"line_number":73,"context_line":"                for inst_code, inst_name, metric_value in metric_value_obj():"},{"line_number":74,"context_line":"                    # instance_domains could be treated"},{"line_number":75,"context_line":"                    # (not necessarily for every metrics) as sockets."},{"line_number":76,"context_line":"                    # -1 for an instance_domain refers to a case where"},{"line_number":77,"context_line":"                    # the value of the metric applies to the whole system."},{"line_number":78,"context_line":"                    values_to_return[str(inst_code)] \u003d metric_value()"}],"source_content_type":"text/x-python","patch_set":31,"id":"3aaa91ec_4b61e138","line":75,"range":{"start_line":74,"start_character":20,"end_line":75,"end_character":69},"in_reply_to":"3aaa91ec_2ed3d560","updated":"2016-06-29 13:37:40.000000000","message":"Done","commit_id":"888543c2d2544111b061815bbcde31af3491c6e0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7b8f2250e6dad205ba81dafa174e90cc80ef098d","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                for inst_code, inst_name, metric_value in metric_value_obj():"},{"line_number":74,"context_line":"                    # instance_domains could be treated"},{"line_number":75,"context_line":"                    # (not necessarily for every metrics) as sockets."},{"line_number":76,"context_line":"                    # -1 for an instance_domain refers to a case where"},{"line_number":77,"context_line":"                    # the value of the metric applies to the whole system."},{"line_number":78,"context_line":"                    values_to_return[str(inst_code)] \u003d metric_value()"},{"line_number":79,"context_line":"        except PMAPI.pmErr as ex:"},{"line_number":80,"context_line":"            if len(ex.args) \u003e 0 and ex.args[0] \u003d\u003d C_API.PM_ERR_NAME:"}],"source_content_type":"text/x-python","patch_set":31,"id":"3aaa91ec_2e6115a9","line":77,"range":{"start_line":76,"start_character":20,"end_line":77,"end_character":74},"updated":"2016-06-29 08:45:25.000000000","message":"If it is about the returned value to the client then this comment shall go to the documentation of function.","commit_id":"888543c2d2544111b061815bbcde31af3491c6e0"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"4dcce87374bf2575e15ef6471c39e1964f71a2a6","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                for inst_code, inst_name, metric_value in metric_value_obj():"},{"line_number":74,"context_line":"                    # instance_domains could be treated"},{"line_number":75,"context_line":"                    # (not necessarily for every metrics) as sockets."},{"line_number":76,"context_line":"                    # -1 for an instance_domain refers to a case where"},{"line_number":77,"context_line":"                    # the value of the metric applies to the whole system."},{"line_number":78,"context_line":"                    values_to_return[str(inst_code)] \u003d metric_value()"},{"line_number":79,"context_line":"        except PMAPI.pmErr as ex:"},{"line_number":80,"context_line":"            if len(ex.args) \u003e 0 and ex.args[0] \u003d\u003d C_API.PM_ERR_NAME:"}],"source_content_type":"text/x-python","patch_set":31,"id":"3aaa91ec_2b661551","line":77,"range":{"start_line":76,"start_character":20,"end_line":77,"end_character":74},"in_reply_to":"3aaa91ec_2e6115a9","updated":"2016-06-29 13:37:40.000000000","message":"Done","commit_id":"888543c2d2544111b061815bbcde31af3491c6e0"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"bc90095f3e2b9b89a66ee040b04b3a53d331a7e4","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        global C_API"},{"line_number":33,"context_line":"        if PMAPI is None:"},{"line_number":34,"context_line":"            try:"},{"line_number":35,"context_line":"                PMAPI \u003d importutils.import_module(\u0027pcp.pmapi\u0027)"},{"line_number":36,"context_line":"            except ImportError as e:"},{"line_number":37,"context_line":"                msg \u003d _(\u0027Cannot load pmapi: (%s)\u0027) % e"},{"line_number":38,"context_line":"                raise exception.NovaException(msg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"3aaa91ec_571dc671","line":35,"updated":"2016-06-30 13:26:05.000000000","message":"That\u0027s not part of the global requirements yet, right?\n\nIf so, I\u0027m a bit sad to see this, I would prefer to understand why we would add this library.","commit_id":"7374f8ffbf53fba7e1c49ddd0db81bb2b1d363ad"},{"author":{"_account_id":9775,"name":"Sudipta Biswas","email":"sbiswas7@in.ibm.com","username":"sudswas"},"change_message_id":"529b8a18b5efcd924910a6fccffd4ee6f9952b9b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        global C_API"},{"line_number":33,"context_line":"        if PMAPI is None:"},{"line_number":34,"context_line":"            try:"},{"line_number":35,"context_line":"                PMAPI \u003d importutils.import_module(\u0027pcp.pmapi\u0027)"},{"line_number":36,"context_line":"            except ImportError as e:"},{"line_number":37,"context_line":"                msg \u003d _(\u0027Cannot load pmapi: (%s)\u0027) % e"},{"line_number":38,"context_line":"                raise exception.NovaException(msg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"3aaa91ec_6e362b04","line":35,"in_reply_to":"3aaa91ec_571dc671","updated":"2016-06-30 14:41:57.000000000","message":"This is not a part of global requirements because it\u0027s an optional plugin which the operator may or may not want to use?\n\nThe reason why we add this library is to integrate perf data into nova: http://pcp.io/features.html#collect \n\nCurrently, libvirt cannot give us this data. PcP has been around for  years specializing on performance data and is available with most linux distros.","commit_id":"7374f8ffbf53fba7e1c49ddd0db81bb2b1d363ad"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4acfdb6debc07c6f145064fabd69d0a32e6e24f6","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        global C_API"},{"line_number":33,"context_line":"        if PMAPI is None:"},{"line_number":34,"context_line":"            try:"},{"line_number":35,"context_line":"                PMAPI \u003d importutils.import_module(\u0027pcp.pmapi\u0027)"},{"line_number":36,"context_line":"            except ImportError as e:"},{"line_number":37,"context_line":"                msg \u003d _(\u0027Cannot load pmapi: (%s)\u0027) % e"},{"line_number":38,"context_line":"                raise exception.NovaException(msg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"3aaa91ec_3b00e001","line":35,"in_reply_to":"3aaa91ec_6e362b04","updated":"2016-06-30 15:10:18.000000000","message":"Optional or not, if it\u0027s in pypi it should be managed through global-reqiurements probably so we can track the version.\n\nFor example, libvirt-python is optional and only required if you\u0027re using libvirt as the virt driver. But it\u0027s tracked through g-r.","commit_id":"7374f8ffbf53fba7e1c49ddd0db81bb2b1d363ad"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c7854f06b3139d640c55e9d681a5dcd02317912c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        global C_API"},{"line_number":33,"context_line":"        if PMAPI is None:"},{"line_number":34,"context_line":"            try:"},{"line_number":35,"context_line":"                PMAPI \u003d importutils.import_module(\u0027pcp.pmapi\u0027)"},{"line_number":36,"context_line":"            except ImportError as e:"},{"line_number":37,"context_line":"                msg \u003d _(\u0027Cannot load pmapi: (%s)\u0027) % e"},{"line_number":38,"context_line":"                raise exception.NovaException(msg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"3aaa91ec_9b1ab47b","line":35,"in_reply_to":"3aaa91ec_6e362b04","updated":"2016-06-30 15:09:06.000000000","message":"Sure, I\u0027m not against using it, I just wonder how to make sure operators know that Nova could use this library.\nAt least, a releasenote is needed.","commit_id":"7374f8ffbf53fba7e1c49ddd0db81bb2b1d363ad"}]}
