)]}'
{"ceilometer/agent/base.py":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"4d230c4cc566c7806a02560d513d3ca1d044401c","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    pass"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class PollsterPollingError(Exception):"},{"line_number":86,"context_line":"    pass"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_89dcfc75","line":85,"updated":"2015-01-15 04:34:45.000000000","message":"How about naming it to PollsterPermanentError which indicate the pollster is no longer functional forever and want to be removed from polling queue?","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"c8cf7bde63806456c0f1d88d8dc4bb06351e14fb","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    pass"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class PollsterPollingError(Exception):"},{"line_number":86,"context_line":"    pass"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_6fba69c1","line":85,"in_reply_to":"3a961159_89dcfc75","updated":"2015-01-15 10:57:11.000000000","message":"okay","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"4d230c4cc566c7806a02560d513d3ca1d044401c","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class PollsterPollingError(Exception):"},{"line_number":86,"context_line":"    pass"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class PollingTask(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_c9b9a417","line":86,"updated":"2015-01-15 04:34:45.000000000","message":"I think it would be better to move the above to exception definition into ceilometer/agent/plugin_base.py, because it is related to pollster plugins.\n\nI\u0027m also thinking it\u0027s best to put those definition into ceilometer.agent.plugin_base.PollsterBase(), and add comment there how to use these 2 exceptions.","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"c8cf7bde63806456c0f1d88d8dc4bb06351e14fb","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class PollsterPollingError(Exception):"},{"line_number":86,"context_line":"    pass"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class PollingTask(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_ef2019b2","line":86,"in_reply_to":"3a961159_c9b9a417","updated":"2015-01-15 10:57:11.000000000","message":"putting it in plugin_base is okay. But does it limit scope withing PollsterBase subclass only? We need access it out of this.","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"4d230c4cc566c7806a02560d513d3ca1d044401c","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    def remove(self, pollsters):"},{"line_number":121,"context_line":"        # Lightweight removal of pollster to avoid polling again"},{"line_number":122,"context_line":"        for source_name, pollster in pollsters:"},{"line_number":123,"context_line":"            self.pollster_matches[source_name].remove(pollster)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def poll_and_publish(self):"},{"line_number":126,"context_line":"        \"\"\"Polling sample and publish into pipeline.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_4954d4c5","line":123,"updated":"2015-01-15 04:34:45.000000000","message":"If self.pollster_matches[source_name] is empty, we could even remove the whole entry in the pollster_matches dict","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"c8cf7bde63806456c0f1d88d8dc4bb06351e14fb","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    def remove(self, pollsters):"},{"line_number":121,"context_line":"        # Lightweight removal of pollster to avoid polling again"},{"line_number":122,"context_line":"        for source_name, pollster in pollsters:"},{"line_number":123,"context_line":"            self.pollster_matches[source_name].remove(pollster)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def poll_and_publish(self):"},{"line_number":126,"context_line":"        \"\"\"Polling sample and publish into pipeline.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_7a86a566","line":123,"in_reply_to":"3a961159_4954d4c5","updated":"2015-01-15 10:57:11.000000000","message":"pollster_matches is defaultdict and deliver set by default. Remove non-existed element for empty set cause KeyError.\n\nBut it should not happen, since we only call remove when failed_pollsters is not empty and failed_pollster come from pollster_matches.","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"4d230c4cc566c7806a02560d513d3ca1d044401c","unresolved":false,"context_lines":[{"line_number":156,"context_line":"                        ))"},{"line_number":157,"context_line":"                        publisher(samples)"},{"line_number":158,"context_line":"                    except Exception as err:"},{"line_number":159,"context_line":"                        if (isinstance(err, PollsterPollingError)):"},{"line_number":160,"context_line":"                            LOG.warning(_(\u0027Remove pollster %s!\u0027)"},{"line_number":161,"context_line":"                                        % pollster.name)"},{"line_number":162,"context_line":"                            failed_pollsters.append((source_name, pollster))"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_09056cc1","line":159,"updated":"2015-01-15 04:34:45.000000000","message":"Let\u0027s follow the exception coding routine here\n\nexcept PollsterPollingError as err:\n  ... ...\nexcept Exception as err:\n  ... ...","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"c8cf7bde63806456c0f1d88d8dc4bb06351e14fb","unresolved":false,"context_lines":[{"line_number":156,"context_line":"                        ))"},{"line_number":157,"context_line":"                        publisher(samples)"},{"line_number":158,"context_line":"                    except Exception as err:"},{"line_number":159,"context_line":"                        if (isinstance(err, PollsterPollingError)):"},{"line_number":160,"context_line":"                            LOG.warning(_(\u0027Remove pollster %s!\u0027)"},{"line_number":161,"context_line":"                                        % pollster.name)"},{"line_number":162,"context_line":"                            failed_pollsters.append((source_name, pollster))"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_7a6225ae","line":159,"in_reply_to":"3a961159_09056cc1","updated":"2015-01-15 10:57:11.000000000","message":"ok","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"4d230c4cc566c7806a02560d513d3ca1d044401c","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                    except Exception as err:"},{"line_number":159,"context_line":"                        if (isinstance(err, PollsterPollingError)):"},{"line_number":160,"context_line":"                            LOG.warning(_(\u0027Remove pollster %s!\u0027)"},{"line_number":161,"context_line":"                                        % pollster.name)"},{"line_number":162,"context_line":"                            failed_pollsters.append((source_name, pollster))"},{"line_number":163,"context_line":"                        else:"},{"line_number":164,"context_line":"                            LOG.warning(_("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_891f9c08","line":161,"updated":"2015-01-15 04:34:45.000000000","message":"better to elaborate the warning message as:\n\nPrevent pollster %s polling for source %s anymore.","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"c8cf7bde63806456c0f1d88d8dc4bb06351e14fb","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                    except Exception as err:"},{"line_number":159,"context_line":"                        if (isinstance(err, PollsterPollingError)):"},{"line_number":160,"context_line":"                            LOG.warning(_(\u0027Remove pollster %s!\u0027)"},{"line_number":161,"context_line":"                                        % pollster.name)"},{"line_number":162,"context_line":"                            failed_pollsters.append((source_name, pollster))"},{"line_number":163,"context_line":"                        else:"},{"line_number":164,"context_line":"                            LOG.warning(_("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_5a7809f8","line":161,"in_reply_to":"3a961159_891f9c08","updated":"2015-01-15 10:57:11.000000000","message":"ok","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"77a0c59bda60f94a97bf2391a5de64c8ce09a205","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        def _catch_extension_load_error(mgr, ep, exc):"},{"line_number":210,"context_line":"            # Extension raising ExtensionLoadError can be ignored"},{"line_number":211,"context_line":"            if (isinstance(exc, plugin_base.ExtensionLoadError)):"},{"line_number":212,"context_line":"                LOG.warning(_(\"Skip loading extension for %s\") % ep.name)"},{"line_number":213,"context_line":"                return"},{"line_number":214,"context_line":"            raise exc"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_2c0cf8a4","line":211,"updated":"2015-01-26 02:58:48.000000000","message":"soft -1: the outside () pair can be removed","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"a6a1b64aab173ba323ca80422f27342c3111ee1e","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        def _catch_extension_load_error(mgr, ep, exc):"},{"line_number":210,"context_line":"            # Extension raising ExtensionLoadError can be ignored"},{"line_number":211,"context_line":"            if (isinstance(exc, plugin_base.ExtensionLoadError)):"},{"line_number":212,"context_line":"                LOG.warning(_(\"Skip loading extension for %s\") % ep.name)"},{"line_number":213,"context_line":"                return"},{"line_number":214,"context_line":"            raise exc"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_8e0dd7ea","line":211,"in_reply_to":"1a930d6b_2c0cf8a4","updated":"2015-01-26 12:17:12.000000000","message":"ok","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"77a0c59bda60f94a97bf2391a5de64c8ce09a205","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            namespace\u003dnamespace,"},{"line_number":218,"context_line":"            invoke_on_load\u003dTrue,"},{"line_number":219,"context_line":"            on_load_failure_callback\u003d_catch_extension_load_error,"},{"line_number":220,"context_line":"        )"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def join_partitioning_groups(self):"},{"line_number":223,"context_line":"        groups \u003d set([self.construct_group_id(d.obj.group_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_6c028070","line":220,"updated":"2015-01-26 02:58:48.000000000","message":"I\u0027m wondering if it is better to use try...except","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"a6a1b64aab173ba323ca80422f27342c3111ee1e","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            namespace\u003dnamespace,"},{"line_number":218,"context_line":"            invoke_on_load\u003dTrue,"},{"line_number":219,"context_line":"            on_load_failure_callback\u003d_catch_extension_load_error,"},{"line_number":220,"context_line":"        )"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def join_partitioning_groups(self):"},{"line_number":223,"context_line":"        groups \u003d set([self.construct_group_id(d.obj.group_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_6ea8ab8d","line":220,"in_reply_to":"1a930d6b_6c028070","updated":"2015-01-26 12:17:12.000000000","message":"try ... except can get the exception, but the entrypoint is not clear. So ExtensionManager provides extra hook parameter, and called with manager/entrypoint/exception to provide well-defined interface for user.","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"393661b2b150d34ef5d78bc5c2b2abc237308227","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                            \u0027Prevent pollster %(name)s for \u0027"},{"line_number":151,"context_line":"                            \u0027polling source %(source)s anymore!\u0027)"},{"line_number":152,"context_line":"                            % ({\u0027name\u0027: pollster.name, \u0027source\u0027: source_name}))"},{"line_number":153,"context_line":"                        failed_pollsters.append((source_name, pollster))"},{"line_number":154,"context_line":"                    except Exception as err:"},{"line_number":155,"context_line":"                        LOG.warning(_("},{"line_number":156,"context_line":"                            \u0027Continue after error \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_3c5a3883","line":153,"updated":"2015-01-27 02:11:08.000000000","message":"I think this mechanism should be improved. Considering the following scenario:\n\nFor a pipeline definition source S we have pollsters P1, P2. The pollster P1\u0027s default discover will return a list of resources [R1, R2, R3] to be polled from. When P is polling resource R2, it raises a PermanentError. \n\nThe current logic will prevent pollster P1 from being called for the pipeline source S forever. A better solution should be preventing from P1 polling for R2 only.","commit_id":"f796eff5f6f18c8653560eab4dca187f3e8a7921"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"c808147f2b0bc3a4c1d8c7abacc5373fcf1cf82e","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                            \u0027Prevent pollster %(name)s for \u0027"},{"line_number":151,"context_line":"                            \u0027polling source %(source)s anymore!\u0027)"},{"line_number":152,"context_line":"                            % ({\u0027name\u0027: pollster.name, \u0027source\u0027: source_name}))"},{"line_number":153,"context_line":"                        failed_pollsters.append((source_name, pollster))"},{"line_number":154,"context_line":"                    except Exception as err:"},{"line_number":155,"context_line":"                        LOG.warning(_("},{"line_number":156,"context_line":"                            \u0027Continue after error \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa81d914_7b448074","line":153,"in_reply_to":"1a930d6b_3c5a3883","updated":"2015-01-28 01:19:12.000000000","message":"yes.\nWill enhance this to remove failed resource only.","commit_id":"f796eff5f6f18c8653560eab4dca187f3e8a7921"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"3a4d4950f5e7ea49c5cc7798a09b66f7851dd110","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                        self.resources[key].get(discovery_cache))"},{"line_number":131,"context_line":"                    candidate_res \u003d (source_resources or"},{"line_number":132,"context_line":"                                     pollster_resources)"},{"line_number":133,"context_line":"                    if not candidate_res:"},{"line_number":134,"context_line":"                        LOG.info(_(\"Skip polling pollster %s, no resources\""},{"line_number":135,"context_line":"                                   \" found\"), pollster.name)"},{"line_number":136,"context_line":"                        continue"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_654c2f9f","line":133,"updated":"2015-02-05 05:48:28.000000000","message":"I think we already have the test at Ln144, no need here","commit_id":"89f9d304dba189f4d07275b8e9984ec813762824"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"e2fb277ef61259f44e90bc2743972e10fed543c8","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                        self.resources[key].get(discovery_cache))"},{"line_number":131,"context_line":"                    candidate_res \u003d (source_resources or"},{"line_number":132,"context_line":"                                     pollster_resources)"},{"line_number":133,"context_line":"                    if not candidate_res:"},{"line_number":134,"context_line":"                        LOG.info(_(\"Skip polling pollster %s, no resources\""},{"line_number":135,"context_line":"                                   \" found\"), pollster.name)"},{"line_number":136,"context_line":"                        continue"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_b6381f3e","line":133,"in_reply_to":"da86d52c_654c2f9f","updated":"2015-02-05 07:56:10.000000000","message":"Removing it would cause possible iterating None object below. So I believe we should keep it.\n\nThey are different check:\n1. No resource discovered\n2. Only discovered failed resoruce","commit_id":"89f9d304dba189f4d07275b8e9984ec813762824"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"3a4d4950f5e7ea49c5cc7798a09b66f7851dd110","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                    # Exclude the failed resource from polling"},{"line_number":139,"context_line":"                    black_res \u003d self.resources[key].blacklist"},{"line_number":140,"context_line":"                    polling_resources \u003d ["},{"line_number":141,"context_line":"                        x for x in candidate_res if x not in black_res]"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"                    # If all resources got removed, skip for this pollster"},{"line_number":144,"context_line":"                    if not polling_resources:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_05aff32a","line":141,"updated":"2015-02-05 05:48:28.000000000","message":"we could you set(), e.g.\n\npolling_resources \u003d list(set(candidates_res) - set(black_res))","commit_id":"89f9d304dba189f4d07275b8e9984ec813762824"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"52385d1b9ec6fdd482cc02f97d05f4e173170641","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                    # Exclude the failed resource from polling"},{"line_number":139,"context_line":"                    black_res \u003d self.resources[key].blacklist"},{"line_number":140,"context_line":"                    polling_resources \u003d ["},{"line_number":141,"context_line":"                        x for x in candidate_res if x not in black_res]"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"                    # If all resources got removed, skip for this pollster"},{"line_number":144,"context_line":"                    if not polling_resources:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_7b1f706c","line":141,"in_reply_to":"da86d52c_05aff32a","updated":"2015-02-05 07:42:45.000000000","message":"It remove duplicated element and lose the order. Some test case depends on the order:(","commit_id":"89f9d304dba189f4d07275b8e9984ec813762824"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"cbe34c44909c608339749ded4df2ff97ada82649","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                                     pollster_resources)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"                    # Exclude the failed resource from polling"},{"line_number":146,"context_line":"                    black_res \u003d self.resources[key].blacklist"},{"line_number":147,"context_line":"                    polling_resources \u003d ["},{"line_number":148,"context_line":"                        x for x in candidate_res if x not in black_res]"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_c777e39d","line":146,"updated":"2015-02-10 17:30:26.000000000","message":"So the only way a previously failed, but now restored, resource can get back into the polling mix is for the polling agent to be restarted?","commit_id":"c67a04ef54ca84f4f420f3a7a4da10d14cbbf5a8"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"597ad739290535baab84196a58cc3de5773fa9ac","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                                     pollster_resources)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"                    # Exclude the failed resource from polling"},{"line_number":146,"context_line":"                    black_res \u003d self.resources[key].blacklist"},{"line_number":147,"context_line":"                    polling_resources \u003d ["},{"line_number":148,"context_line":"                        x for x in candidate_res if x not in black_res]"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_f00648cd","line":146,"in_reply_to":"da86d52c_38cff080","updated":"2015-02-11 08:21:31.000000000","message":"OK, that aspect is fair enough to push to a subsequent patch.","commit_id":"c67a04ef54ca84f4f420f3a7a4da10d14cbbf5a8"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"6763d1fa207697d43076065fc925a35c74104fbb","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                                     pollster_resources)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"                    # Exclude the failed resource from polling"},{"line_number":146,"context_line":"                    black_res \u003d self.resources[key].blacklist"},{"line_number":147,"context_line":"                    polling_resources \u003d ["},{"line_number":148,"context_line":"                        x for x in candidate_res if x not in black_res]"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_38cff080","line":146,"in_reply_to":"da86d52c_c777e39d","updated":"2015-02-11 02:04:43.000000000","message":"At this point, yes.\nIn future it\u0027s possible to add periodic check, or empty black_res from time to time.","commit_id":"c67a04ef54ca84f4f420f3a7a4da10d14cbbf5a8"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"8462284cfcc7197b01272e9bdc0b30198688a7dc","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                    except plugin_base.PollsterPermanentError as err:"},{"line_number":164,"context_line":"                        LOG.warning(_("},{"line_number":165,"context_line":"                            \u0027Prevent pollster %(name)s for \u0027"},{"line_number":166,"context_line":"                            \u0027polling source %(source)s anymore!\u0027)"},{"line_number":167,"context_line":"                            % ({\u0027name\u0027: pollster.name, \u0027source\u0027: source_name}))"},{"line_number":168,"context_line":"                        self.resources[key].blacklist_add(err.fail_res)"},{"line_number":169,"context_line":"                    except Exception as err:"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_7bf9624d","line":166,"updated":"2015-02-11 02:48:29.000000000","message":"I think it is better to add the err into log message","commit_id":"c67a04ef54ca84f4f420f3a7a4da10d14cbbf5a8"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"cbe34c44909c608339749ded4df2ff97ada82649","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                            \u0027Prevent pollster %(name)s for \u0027"},{"line_number":166,"context_line":"                            \u0027polling source %(source)s anymore!\u0027)"},{"line_number":167,"context_line":"                            % ({\u0027name\u0027: pollster.name, \u0027source\u0027: source_name}))"},{"line_number":168,"context_line":"                        self.resources[key].blacklist_add(err.fail_res)"},{"line_number":169,"context_line":"                    except Exception as err:"},{"line_number":170,"context_line":"                        LOG.warning(_("},{"line_number":171,"context_line":"                            \u0027Continue after error \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_4763f3dc","line":168,"updated":"2015-02-10 17:30:26.000000000","message":"Not sure why we need the blacklist_add method, given the precedent that the blacklist attribute is referred to directly in line 146.\n\nWhy not just remove that method from the Resources class and change line 168 to:\n\n  self.resources[key].blacklist.append(err.fail_res)","commit_id":"c67a04ef54ca84f4f420f3a7a4da10d14cbbf5a8"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"6763d1fa207697d43076065fc925a35c74104fbb","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                            \u0027Prevent pollster %(name)s for \u0027"},{"line_number":166,"context_line":"                            \u0027polling source %(source)s anymore!\u0027)"},{"line_number":167,"context_line":"                            % ({\u0027name\u0027: pollster.name, \u0027source\u0027: source_name}))"},{"line_number":168,"context_line":"                        self.resources[key].blacklist_add(err.fail_res)"},{"line_number":169,"context_line":"                    except Exception as err:"},{"line_number":170,"context_line":"                        LOG.warning(_("},{"line_number":171,"context_line":"                            \u0027Continue after error \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_98c29c51","line":168,"in_reply_to":"da86d52c_4763f3dc","updated":"2015-02-11 02:04:43.000000000","message":"Yes, It\u0027s clear.\nWill change it","commit_id":"c67a04ef54ca84f4f420f3a7a4da10d14cbbf5a8"}],"ceilometer/agent/plugin_base.py":[{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"8311b2784135b8c3f73ab3a9eb8308766aabca1f","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"class PollsterPermanentError(Exception):"},{"line_number":204,"context_line":"    \"\"\"Permenant error when polling"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    When unrecoverable error happened in polling, pollster can raise this"},{"line_number":207,"context_line":"    exception to prevent itself from polling any more."}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_1e3c79be","line":204,"updated":"2015-01-16 18:34:55.000000000","message":"First docstring should end with dot.","commit_id":"df441af8fe50046aa798a03076635720efc719af"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"77a0c59bda60f94a97bf2391a5de64c8ce09a205","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    PollsterBase provides a hook, setup_environment, called in pollster loading"},{"line_number":196,"context_line":"    to setup required HW/SW dependency. Any exception from it would be"},{"line_number":197,"context_line":"    propagated as ExtensionLoadError, then skip loading this pollster."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    \"\"\""},{"line_number":200,"context_line":"    pass"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_ac01c839","line":198,"updated":"2015-01-26 02:58:48.000000000","message":"nit: this blank line is not needed","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"77a0c59bda60f94a97bf2391a5de64c8ce09a205","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    When unrecoverable error happened in polling, pollster can raise this"},{"line_number":207,"context_line":"    exception to prevent itself from polling any more."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    \"\"\""},{"line_number":210,"context_line":"    pass"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_ecf75057","line":208,"updated":"2015-01-26 02:58:48.000000000","message":"ditto","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"77a0c59bda60f94a97bf2391a5de64c8ce09a205","unresolved":false,"context_lines":[{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        Each subclass could overwrite it for specific usage. Any exception"},{"line_number":221,"context_line":"        raised in this function would prevent pollster being loaded."},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        \"\"\""},{"line_number":224,"context_line":"        pass"},{"line_number":225,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_0c981c1b","line":222,"updated":"2015-01-26 02:58:48.000000000","message":"ditto","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"77a0c59bda60f94a97bf2391a5de64c8ce09a205","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        try:"},{"line_number":228,"context_line":"            self.setup_environment()"},{"line_number":229,"context_line":"        except Exception as err:"},{"line_number":230,"context_line":"            raise ExtensionLoadError(_(\u0027%s\u0027) % err)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    @abc.abstractproperty"},{"line_number":233,"context_line":"    def default_discovery(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_0cf1fc6a","line":230,"updated":"2015-01-26 02:58:48.000000000","message":"soft -1: the string format actually do nothing, raise ExtensionLoadError(err) is enough IIUC","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"a6a1b64aab173ba323ca80422f27342c3111ee1e","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        try:"},{"line_number":228,"context_line":"            self.setup_environment()"},{"line_number":229,"context_line":"        except Exception as err:"},{"line_number":230,"context_line":"            raise ExtensionLoadError(_(\u0027%s\u0027) % err)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    @abc.abstractproperty"},{"line_number":233,"context_line":"    def default_discovery(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_4e912f46","line":230,"in_reply_to":"1a930d6b_0cf1fc6a","updated":"2015-01-26 12:17:12.000000000","message":"ok","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"3a4d4950f5e7ea49c5cc7798a09b66f7851dd110","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    exception to prevent itself from polling any more."},{"line_number":205,"context_line":"    \"\"\""},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def __init__(self, resource):"},{"line_number":208,"context_line":"        self.fail_res \u003d resource"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_8006711b","line":207,"updated":"2015-02-05 05:48:28.000000000","message":"Please add some comment of the param resource, indicating that the resource should be one of the ones got from get_samples()","commit_id":"89f9d304dba189f4d07275b8e9984ec813762824"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"52385d1b9ec6fdd482cc02f97d05f4e173170641","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    exception to prevent itself from polling any more."},{"line_number":205,"context_line":"    \"\"\""},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def __init__(self, resource):"},{"line_number":208,"context_line":"        self.fail_res \u003d resource"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_b65adf27","line":207,"in_reply_to":"da86d52c_8006711b","updated":"2015-02-05 07:42:45.000000000","message":"ok","commit_id":"89f9d304dba189f4d07275b8e9984ec813762824"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"3a4d4950f5e7ea49c5cc7798a09b66f7851dd110","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        \"\"\""},{"line_number":221,"context_line":"        pass"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def __init__(self):"},{"line_number":224,"context_line":"        try:"},{"line_number":225,"context_line":"            self.setup_environment()"},{"line_number":226,"context_line":"        except Exception as err:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_c515db49","line":223,"updated":"2015-02-05 05:48:28.000000000","message":"let\u0027s follow the python routine to call the super class\u0027 __init__(), in case we want to support multiple inheritance in future","commit_id":"89f9d304dba189f4d07275b8e9984ec813762824"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"52385d1b9ec6fdd482cc02f97d05f4e173170641","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        \"\"\""},{"line_number":221,"context_line":"        pass"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def __init__(self):"},{"line_number":224,"context_line":"        try:"},{"line_number":225,"context_line":"            self.setup_environment()"},{"line_number":226,"context_line":"        except Exception as err:"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_d642f33c","line":223,"in_reply_to":"da86d52c_c515db49","updated":"2015-02-05 07:42:45.000000000","message":"ok","commit_id":"89f9d304dba189f4d07275b8e9984ec813762824"}],"ceilometer/ipmi/pollsters/__init__.py":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"4d230c4cc566c7806a02560d513d3ca1d044401c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Intel Corporation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Zhai Edwin \u003cedwin.zhai@intel.com\u003e"},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":7,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_e4fbe5bb","line":4,"updated":"2015-01-15 04:34:45.000000000","message":"Please don\u0027t use Author tag, it will break new pep rules","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"c8cf7bde63806456c0f1d88d8dc4bb06351e14fb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Intel Corporation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Author: Zhai Edwin \u003cedwin.zhai@intel.com\u003e"},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":7,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_15181275","line":4,"in_reply_to":"3a961159_e4fbe5bb","updated":"2015-01-15 10:57:11.000000000","message":"ok","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"4d230c4cc566c7806a02560d513d3ca1d044401c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"               default\u003d3,"},{"line_number":26,"context_line":"               help\u003d\u0027Number of retries upon IPMI/NM polling\u0027"},{"line_number":27,"context_line":"                    \u0027failure before disable this pollster\u0027)"},{"line_number":28,"context_line":"]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CONF \u003d cfg.CONF"},{"line_number":31,"context_line":"CONF.register_opts(OPTS, group\u003d\u0027ipmi\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_e4e925e4","line":28,"updated":"2015-01-15 04:34:45.000000000","message":"you need to register this OPTS into ceilometer/opts.py in order to generate sample config file.","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"c8cf7bde63806456c0f1d88d8dc4bb06351e14fb","unresolved":false,"context_lines":[{"line_number":25,"context_line":"               default\u003d3,"},{"line_number":26,"context_line":"               help\u003d\u0027Number of retries upon IPMI/NM polling\u0027"},{"line_number":27,"context_line":"                    \u0027failure before disable this pollster\u0027)"},{"line_number":28,"context_line":"]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CONF \u003d cfg.CONF"},{"line_number":31,"context_line":"CONF.register_opts(OPTS, group\u003d\u0027ipmi\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_751cf677","line":28,"in_reply_to":"3a961159_e4e925e4","updated":"2015-01-15 10:57:11.000000000","message":"ok","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"19f07f6ba4e1513a27f341dbaca44e0ded1cd64e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\"Pollsters for IPMI and Intel Node Manager"},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo.config import cfg"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"OPTS \u003d ["},{"line_number":22,"context_line":"    cfg.IntOpt(\u0027polling_retry\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_eea29498","line":19,"updated":"2015-01-17 05:40:10.000000000","message":"-1: use oslo_config","commit_id":"df441af8fe50046aa798a03076635720efc719af"},{"author":{"_account_id":12927,"name":"Lan Qi song","email":"lqs933@foxmail.com","username":"lqisong"},"change_message_id":"20dd3586ef43d07d1c3bea3ca11f1ba6553ab91f","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"OPTS \u003d ["},{"line_number":22,"context_line":"    cfg.IntOpt(\u0027polling_retry\u0027,"},{"line_number":23,"context_line":"               default\u003d3,"},{"line_number":24,"context_line":"               help\u003d\u0027Number of retries upon IPMI/NM polling\u0027"},{"line_number":25,"context_line":"                    \u0027failure before disable this pollster\u0027)"},{"line_number":26,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a930d6b_a381654c","line":23,"updated":"2015-01-21 06:24:50.000000000","message":"Maybe we should provide an option to retry polling forever.","commit_id":"cebb8737278e8c63d3c5affaed8b771e105ef4e4"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"77a0c59bda60f94a97bf2391a5de64c8ce09a205","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Intel Corporation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_8cb24c92","line":2,"updated":"2015-01-26 02:58:48.000000000","message":"some rights are not reserved as long as you use Apache license\n\nmost of our source files don\u0027t use such statement","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"a6a1b64aab173ba323ca80422f27342c3111ee1e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Intel Corporation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_d9140746","line":2,"in_reply_to":"1a930d6b_8cb24c92","updated":"2015-01-26 12:17:12.000000000","message":"There are still many files with \"All Rights Reserved\". As long as it doesn\u0027t break Apache license, let\u0027s keep it at this point. We can clean it in batch in future if needed. Is it okay?\n\nThanks,","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"77a0c59bda60f94a97bf2391a5de64c8ce09a205","unresolved":false,"context_lines":[{"line_number":23,"context_line":"               default\u003d3,"},{"line_number":24,"context_line":"               help\u003d\u0027Number of retries upon IPMI/NM polling \u0027"},{"line_number":25,"context_line":"                    \u0027failure before disable this pollster. \u0027"},{"line_number":26,"context_line":"                    \u0027Negative indicates retrying forever.\u0027)"},{"line_number":27,"context_line":"]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_6c48c087","line":26,"updated":"2015-01-26 02:58:48.000000000","message":"according to your code, polling_retry\u003d\u003d0 also means retry forever","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"a6a1b64aab173ba323ca80422f27342c3111ee1e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"               default\u003d3,"},{"line_number":24,"context_line":"               help\u003d\u0027Number of retries upon IPMI/NM polling \u0027"},{"line_number":25,"context_line":"                    \u0027failure before disable this pollster. \u0027"},{"line_number":26,"context_line":"                    \u0027Negative indicates retrying forever.\u0027)"},{"line_number":27,"context_line":"]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_99243f61","line":26,"in_reply_to":"1a930d6b_6c48c087","updated":"2015-01-26 12:17:12.000000000","message":"need change the code and doc.\n\"tolerance of IPMI/NM polling failures before disable this pollster...\" \n\nif polling_retry \u003e\u003d 0 and ....","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"8462284cfcc7197b01272e9bdc0b30198688a7dc","unresolved":false,"context_lines":[{"line_number":27,"context_line":"]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONF \u003d cfg.CONF"},{"line_number":30,"context_line":"CONF.register_opts(OPTS, group\u003d\u0027ipmi\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_fbce322c","line":30,"updated":"2015-02-11 02:48:29.000000000","message":"can be one line","commit_id":"c67a04ef54ca84f4f420f3a7a4da10d14cbbf5a8"}],"ceilometer/ipmi/pollsters/node.py":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"393661b2b150d34ef5d78bc5c2b2abc237308227","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from ceilometer import sample"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CONF \u003d cfg.CONF"},{"line_number":31,"context_line":"CONF.import_opt(\u0027host\u0027, \u0027ceilometer.service\u0027)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_bc4d48c6","line":31,"updated":"2015-01-27 02:11:08.000000000","message":"I saw CONF.import_opt(\u0027polling_retry\u0027, \u0027ceilometer.ipmi.pollsters\u0027,30           group\u003d\u0027ipmi\u0027) in sensor.py.\n\nWhy not here?","commit_id":"f796eff5f6f18c8653560eab4dca187f3e8a7921"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"c808147f2b0bc3a4c1d8c7abacc5373fcf1cf82e","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from ceilometer import sample"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CONF \u003d cfg.CONF"},{"line_number":31,"context_line":"CONF.import_opt(\u0027host\u0027, \u0027ceilometer.service\u0027)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa81d914_3b3768b2","line":31,"in_reply_to":"1a930d6b_bc4d48c6","updated":"2015-01-28 01:19:12.000000000","message":"Sorry. Missed this.\nBut curious it still works.","commit_id":"f796eff5f6f18c8653560eab4dca187f3e8a7921"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"cb716fd61ebf649b42f99b7760bfe7311cf511e1","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        # Do not load this extension if no NM support"},{"line_number":47,"context_line":"        if not self.nodemanager.nm_support:"},{"line_number":48,"context_line":"            raise plugin_base.ExtensionLoadError()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @property"},{"line_number":51,"context_line":"    def default_discovery(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_ae7b40bc","line":48,"updated":"2015-01-27 11:56:24.000000000","message":"So the absence of the node manager is not considered a permanent error - to what extent is IPMI polling partially functional without the node manager functionality?\n\nDo we need to signal this partial nature in some way, e.g. via an explicit log warning message?","commit_id":"f796eff5f6f18c8653560eab4dca187f3e8a7921"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"c808147f2b0bc3a4c1d8c7abacc5373fcf1cf82e","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        # Do not load this extension if no NM support"},{"line_number":47,"context_line":"        if not self.nodemanager.nm_support:"},{"line_number":48,"context_line":"            raise plugin_base.ExtensionLoadError()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @property"},{"line_number":51,"context_line":"    def default_discovery(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa81d914_5b689cf5","line":48,"in_reply_to":"1a930d6b_ae7b40bc","updated":"2015-01-28 01:19:12.000000000","message":"Node Manager is enhancement of IPMI, so does the setup_environment check: For IPMI, just check if simple ipmitool get info command can run; For NM, add more check with ipmitool, like agent status and vender ID.\n\nBut from end user point of view, IPMI pollsters and NM pollsters are function independent: IPMI get IPMI sensor data, while NM get system power/thermal data. One implicit rule is no NM pollster without IPMI pollster, as even simple ipmitool command failed. So end user can check the log, like \"Skip loading extension XXX\", to see what kind of pollsters are skipped.\n\nBTW, both IPMI and NM run the HW initialization only once, e.g. NodeManager is designed as singleton. So if the 1st NM pollster encounter init error, the following pollsters just fail. It can be treated as permanent error.","commit_id":"f796eff5f6f18c8653560eab4dca187f3e8a7921"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"cbe34c44909c608339749ded4df2ff97ada82649","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"\"\"Return data sample for IPMI.\"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":57,"context_line":"        for resource in resources:"},{"line_number":58,"context_line":"            try:"},{"line_number":59,"context_line":"                stats \u003d self.read_data()"},{"line_number":60,"context_line":"            except nmexcept.IPMIException:"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_e40f85df","line":57,"updated":"2015-02-10 17:30:26.000000000","message":"Does this for loop actually change anything substantive?\n\ni.e. the sense that the resources list seems fixed at length 1:\n\n  https://github.com/openstack/ceilometer/blob/master/ceilometer/agent/discovery/localnode.py\n\nand not really to carry any meaningful information.","commit_id":"c67a04ef54ca84f4f420f3a7a4da10d14cbbf5a8"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"6763d1fa207697d43076065fc925a35c74104fbb","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"\"\"Return data sample for IPMI.\"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":57,"context_line":"        for resource in resources:"},{"line_number":58,"context_line":"            try:"},{"line_number":59,"context_line":"                stats \u003d self.read_data()"},{"line_number":60,"context_line":"            except nmexcept.IPMIException:"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_189cec5c","line":57,"updated":"2015-02-11 02:04:43.000000000","message":"The loop is just for possible changes in future.\nLet\u0027s remove it for now.","commit_id":"c67a04ef54ca84f4f420f3a7a4da10d14cbbf5a8"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"cbe34c44909c608339749ded4df2ff97ada82649","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                if (CONF.ipmi.polling_retry \u003e\u003d 0 and"},{"line_number":66,"context_line":"                        self.polling_failures \u003e CONF.ipmi.polling_retry):"},{"line_number":67,"context_line":"                    LOG.warning(_(\u0027Pollster for %s is disabled!\u0027) % self.NAME)"},{"line_number":68,"context_line":"                    raise plugin_base.PollsterPermanentError(resource)"},{"line_number":69,"context_line":"                else:"},{"line_number":70,"context_line":"                    return"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_04af3995","line":68,"updated":"2015-02-10 17:30:26.000000000","message":"We might as well remove the for loop and explicitly declare resources[0] to be in error?\n\n(Given that the resources duplicity is really just an illusion here, am I right?)\n\nWould it ever make sense for static resources to be defined in the pipeline.yaml for the impi pollsters?","commit_id":"c67a04ef54ca84f4f420f3a7a4da10d14cbbf5a8"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"6763d1fa207697d43076065fc925a35c74104fbb","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                if (CONF.ipmi.polling_retry \u003e\u003d 0 and"},{"line_number":66,"context_line":"                        self.polling_failures \u003e CONF.ipmi.polling_retry):"},{"line_number":67,"context_line":"                    LOG.warning(_(\u0027Pollster for %s is disabled!\u0027) % self.NAME)"},{"line_number":68,"context_line":"                    raise plugin_base.PollsterPermanentError(resource)"},{"line_number":69,"context_line":"                else:"},{"line_number":70,"context_line":"                    return"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_58ae642f","line":68,"in_reply_to":"da86d52c_04af3995","updated":"2015-02-11 02:04:43.000000000","message":"Yes. We can use resources[0] directly.\n\nstatic resources is possible, but it requires extra setup in pipeline.yaml besides loading ipmi agent. Let\u0027s keep it now.","commit_id":"c67a04ef54ca84f4f420f3a7a4da10d14cbbf5a8"}],"ceilometer/ipmi/pollsters/sensor.py":[{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"8311b2784135b8c3f73ab3a9eb8308766aabca1f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            stats \u003d self.ipmi.read_sensor_any(self.METRIC)"},{"line_number":70,"context_line":"        except ipmiexcept.IPMIException:"},{"line_number":71,"context_line":"            self.polling_failures +\u003d 1"},{"line_number":72,"context_line":"            LOG.warning(_(\u0027Polling %(metric)s sensor faild for %(cnt)s times!\u0027)"},{"line_number":73,"context_line":"                        % ({\u0027metric\u0027: self.METRIC,"},{"line_number":74,"context_line":"                            \u0027cnt\u0027: self.polling_failures}))"},{"line_number":75,"context_line":"            if self.polling_failures \u003e CONF.ipmi.polling_retry:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_5eb52117","line":72,"updated":"2015-01-16 18:34:55.000000000","message":"%s/faild/failed","commit_id":"df441af8fe50046aa798a03076635720efc719af"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"cbe34c44909c608339749ded4df2ff97ada82649","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            return []"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":63,"context_line":"        for resource in resources:"},{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                stats \u003d self.ipmi.read_sensor_any(self.METRIC)"},{"line_number":66,"context_line":"            except ipmiexcept.IPMIException:"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_a4882d23","line":63,"updated":"2015-02-10 17:30:26.000000000","message":"Similar comment to the node pollster.","commit_id":"c67a04ef54ca84f4f420f3a7a4da10d14cbbf5a8"}],"ceilometer/opts.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"19f07f6ba4e1513a27f341dbaca44e0ded1cd64e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"import ceilometer.identity.notifications"},{"line_number":41,"context_line":"import ceilometer.image.glance"},{"line_number":42,"context_line":"import ceilometer.image.notifications"},{"line_number":43,"context_line":"import ceilometer.ipmi.notifications.ironic"},{"line_number":44,"context_line":"import ceilometer.ipmi.platform.intel_node_manager"},{"line_number":45,"context_line":"import ceilometer.middleware"},{"line_number":46,"context_line":"import ceilometer.network.notifications"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_8eb910cd","line":43,"updated":"2015-01-17 05:40:10.000000000","message":"-1: add: import ceilometer.ipmi.pollsters","commit_id":"df441af8fe50046aa798a03076635720efc719af"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"19f07f6ba4e1513a27f341dbaca44e0ded1cd64e","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        (\u0027hardware\u0027, ceilometer.hardware.discovery.OPTS),"},{"line_number":118,"context_line":"        (\u0027ipmi\u0027,"},{"line_number":119,"context_line":"         itertools.chain(ceilometer.ipmi.platform.intel_node_manager.OPTS,"},{"line_number":120,"context_line":"                         ceilometer.ipmi.pollsters.__init__.OPTS)),"},{"line_number":121,"context_line":"        (\u0027notification\u0027, ceilometer.notification.OPTS),"},{"line_number":122,"context_line":"        (\u0027polling\u0027, ceilometer.agent.manager.OPTS),"},{"line_number":123,"context_line":"        (\u0027publisher\u0027, ceilometer.publisher.utils.OPTS),"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_aeac0c89","line":120,"updated":"2015-01-17 05:40:10.000000000","message":"-1: ceilometer.ipmi.pollsters.OPTS","commit_id":"df441af8fe50046aa798a03076635720efc719af"}],"ceilometer/tests/ipmi/platform/test_intel_node_manager.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"19f07f6ba4e1513a27f341dbaca44e0ded1cd64e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def tearDown(self):"},{"line_number":35,"context_line":"        super(TestNodeManager, self).tearDown()"},{"line_number":36,"context_line":"        # reset inited to force an initialization of singleton for next test"},{"line_number":37,"context_line":"        self.nm._inited \u003d False"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_read_power_all(self):"},{"line_number":40,"context_line":"        power \u003d self.nm.read_power_all()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_eec9b45a","line":37,"updated":"2015-01-17 05:40:10.000000000","message":"non blocking, just note: we usually\n\n    super.setUp()\n    do_my_job()\n\n    clean_my_job()\n    super.tearDown()\n\nbecause tearDown is not safe, it may fail, the best way to use testtools is its addCleanup method\n\nbut seems no harm here","commit_id":"df441af8fe50046aa798a03076635720efc719af"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"77a0c59bda60f94a97bf2391a5de64c8ce09a205","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def tearDownClass(cls):"},{"line_number":81,"context_line":"        super(TestNonNodeManager, cls).tearDownClass()"},{"line_number":82,"context_line":"        # reset inited to force an initialization of singleton for next test"},{"line_number":83,"context_line":"        node_manager.NodeManager()._inited \u003d False"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def test_read_power_all(self):"},{"line_number":86,"context_line":"        power \u003d self.nm.read_power_all()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_6f0d1237","line":83,"updated":"2015-01-26 02:58:48.000000000","message":"nit: I think it is better to clean self then invoke super.something, see what you\u0027ve done in L37","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"a6a1b64aab173ba323ca80422f27342c3111ee1e","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def tearDownClass(cls):"},{"line_number":81,"context_line":"        super(TestNonNodeManager, cls).tearDownClass()"},{"line_number":82,"context_line":"        # reset inited to force an initialization of singleton for next test"},{"line_number":83,"context_line":"        node_manager.NodeManager()._inited \u003d False"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def test_read_power_all(self):"},{"line_number":86,"context_line":"        power \u003d self.nm.read_power_all()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_f9f6238e","line":83,"in_reply_to":"1a930d6b_6f0d1237","updated":"2015-01-26 12:17:12.000000000","message":"Yes.\nBTW, I probably separate this as a standalone fix, as it\u0027s not related to self-disabled-pollster.","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"}],"ceilometer/tests/ipmi/platform/test_ipmi_sensor.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"77a0c59bda60f94a97bf2391a5de64c8ce09a205","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def tearDownClass(cls):"},{"line_number":35,"context_line":"        super(TestIPMISensor, cls).tearDownClass()"},{"line_number":36,"context_line":"        # reset inited to force an initialization of singleton for next test"},{"line_number":37,"context_line":"        ipmi_sensor.IPMISensor()._inited \u003d False"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_read_sensor_temperature(self):"},{"line_number":40,"context_line":"        sensors \u003d self.ipmi.read_sensor_any(\u0027Temperature\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_cf1b6671","line":37,"updated":"2015-01-26 02:58:48.000000000","message":"ditto","commit_id":"7245ac6152d98b02294be9ee4b78cc1db9150c5e"}],"ceilometer/tests/ipmi/pollsters/base.py":[{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"8311b2784135b8c3f73ab3a9eb8308766aabca1f","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            \u0027ceilometer.ipmi.platform.ipmi_sensor.IPMISensor\u0027,"},{"line_number":55,"context_line":"            return_value\u003dnm))"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # self.mgr \u003d mock.Mock()"},{"line_number":58,"context_line":"        self.mgr \u003d manager.AgentManager()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        self.pollster \u003d self.make_pollster()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_7e2c9d4a","line":57,"updated":"2015-01-16 18:34:55.000000000","message":"Could you delete this comment if we don\u0027t need it?","commit_id":"df441af8fe50046aa798a03076635720efc719af"}],"ceilometer/tests/ipmi/test_manager.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"8d3948caa845c629b104cdd77af9415febbcbd16","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @mock.patch(\u0027ceilometer.pipeline.setup_pipeline\u0027, mock.MagicMock())"},{"line_number":35,"context_line":"    @mock.patch(\u0027ceilometer.ipmi.pollsters.node._Base.__init__\u0027,"},{"line_number":36,"context_line":"                new\u003d_normal_init)"},{"line_number":37,"context_line":"    @mock.patch(\u0027ceilometer.ipmi.pollsters.sensor.SensorPollster.__init__\u0027,"},{"line_number":38,"context_line":"                new\u003d_normal_init)"},{"line_number":39,"context_line":"    def test_load_plugins(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_4973edb3","line":36,"updated":"2015-01-15 08:42:11.000000000","message":"please rebase master and remove these","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"c8cf7bde63806456c0f1d88d8dc4bb06351e14fb","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @mock.patch(\u0027ceilometer.pipeline.setup_pipeline\u0027, mock.MagicMock())"},{"line_number":35,"context_line":"    @mock.patch(\u0027ceilometer.ipmi.pollsters.node._Base.__init__\u0027,"},{"line_number":36,"context_line":"                new\u003d_normal_init)"},{"line_number":37,"context_line":"    @mock.patch(\u0027ceilometer.ipmi.pollsters.sensor.SensorPollster.__init__\u0027,"},{"line_number":38,"context_line":"                new\u003d_normal_init)"},{"line_number":39,"context_line":"    def test_load_plugins(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_a794758c","line":36,"in_reply_to":"3a961159_4973edb3","updated":"2015-01-15 10:57:11.000000000","message":"We need 3 different init for test:\nsucceed(no error),\nfailed(raise specific exception, so we prevent loading it)\nexceptional(raise other exception, we propagate it)\n\nSo mock.Mock() is not suitable here, as we need defined behavior","commit_id":"cb0c852284da03a502c92639dcf15516d5734319"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"8311b2784135b8c3f73ab3a9eb8308766aabca1f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":"\"\"\"Tests for ceilometer/ipmi/manager.py"},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from ceilometer.agent import plugin_base"},{"line_number":20,"context_line":"from ceilometer.ipmi import manager"},{"line_number":21,"context_line":"from ceilometer import pipeline"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_1e1b991c","line":18,"updated":"2015-01-16 18:34:55.000000000","message":"ceilometer modules should been placed after third party libs.","commit_id":"df441af8fe50046aa798a03076635720efc719af"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"19f07f6ba4e1513a27f341dbaca44e0ded1cd64e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    @mock.patch(\u0027ceilometer.ipmi.pollsters.node._Base.__init__\u0027,"},{"line_number":36,"context_line":"                new\u003d_normal_init)"},{"line_number":37,"context_line":"    @mock.patch(\u0027ceilometer.ipmi.pollsters.sensor.SensorPollster.__init__\u0027,"},{"line_number":38,"context_line":"                new\u003d_normal_init)"},{"line_number":39,"context_line":"    def test_load_plugins(self):"},{"line_number":40,"context_line":"        mgr \u003d manager.AgentManager()"},{"line_number":41,"context_line":"        self.assertIsNotNone(list(mgr.extensions))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_aee32cd6","line":38,"updated":"2015-01-17 05:40:10.000000000","message":"I\u0027m not sure if it is ok to use mock.Mock(return_value\u003dNone) here, since I\u0027ve not test it","commit_id":"df441af8fe50046aa798a03076635720efc719af"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"19f07f6ba4e1513a27f341dbaca44e0ded1cd64e","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        raise plugin_base.ExtensionLoadError()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    @mock.patch(\u0027ceilometer.ipmi.pollsters.node._Base.__init__\u0027,"},{"line_number":49,"context_line":"                new\u003d_failed_init)"},{"line_number":50,"context_line":"    @mock.patch(\u0027ceilometer.ipmi.pollsters.sensor.SensorPollster.__init__\u0027,"},{"line_number":51,"context_line":"                new\u003d_failed_init)"},{"line_number":52,"context_line":"    def test_load_failed_plugins(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_cee6b8e6","line":49,"updated":"2015-01-17 05:40:10.000000000","message":"use side_effect\u003dplugin_base.ExtensionLoadError ?","commit_id":"df441af8fe50046aa798a03076635720efc719af"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"19f07f6ba4e1513a27f341dbaca44e0ded1cd64e","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        raise plugin_base.PollsterPermanentError()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @mock.patch(\u0027ceilometer.ipmi.pollsters.node._Base.__init__\u0027,"},{"line_number":62,"context_line":"                new\u003d_exceptional_init)"},{"line_number":63,"context_line":"    @mock.patch(\u0027ceilometer.ipmi.pollsters.sensor.SensorPollster.__init__\u0027,"},{"line_number":64,"context_line":"                new\u003d_exceptional_init)"},{"line_number":65,"context_line":"    def test_load_exceptional_plugins(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_0ecc4060","line":62,"updated":"2015-01-17 05:40:10.000000000","message":"use side_effect\u003dplugin_base.PollsterPermanentError ?","commit_id":"df441af8fe50046aa798a03076635720efc719af"}]}
