)]}'
{"ceilometer/agent.py":[{"author":{"_account_id":6230,"name":"Rob Raymond","email":"rob.raymond@hp.com","username":"rob-raymond"},"change_message_id":"ef6c27fba5e524ce25c90940fb1b9fa646aadbfd","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                    LOG.warning(_("},{"line_number":75,"context_line":"                        \u0027Continue after error from %(name)s: %(error)s\u0027)"},{"line_number":76,"context_line":"                        % ({\u0027name\u0027: pollster.name, \u0027error\u0027: err}))"},{"line_number":77,"context_line":"                    LOG.exception(err)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"class AgentManager(os_service.Service):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F8A4%3D","line":77,"updated":"2014-02-23 23:17:56.000000000","message":"Why not build up the message and pass that in as first arg to exception() rather than logging twice?\nIf the reason is that you want to log as a warning rather than error but with traceback, then pass exc_info\u003dTrue as an arg to warning.","commit_id":"10ddc2ae7de555f9b67a803b525d9f6be9127d1c"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"577963553e0fb1f0275e265f33ca16b2cf07c229","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                    LOG.warning(_("},{"line_number":75,"context_line":"                        \u0027Continue after error from %(name)s: %(error)s\u0027)"},{"line_number":76,"context_line":"                        % ({\u0027name\u0027: pollster.name, \u0027error\u0027: err}))"},{"line_number":77,"context_line":"                    LOG.exception(err)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"class AgentManager(os_service.Service):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F418%3D","line":77,"in_reply_to":"AAAAU3%2F%2F8A4%3D","updated":"2014-02-24 09:21:38.000000000","message":"Good point, Rob.\n\nThat code was pre-existing and duplicated in the individual AgentManager sub-classes, so I\u0027ve just promoted it to the base class as part of my refactor to unify the agent logic.\n\nBut your point is well made, so I might as well fix as you suggest now that my nose is in this part of the code anyway.\n\nWill be changed in the latest.","commit_id":"10ddc2ae7de555f9b67a803b525d9f6be9127d1c"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"00ae4e9e70b7a7cb7c6bdddd3e5c9ea7a1d8dc47","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def _discoverer(self, name):"},{"line_number":138,"context_line":"        for d in self.discovery_manager:"},{"line_number":139,"context_line":"            if d.name \u003d\u003d name:"},{"line_number":140,"context_line":"                return d.obj"},{"line_number":141,"context_line":"        return None"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def discover(self, discovery\u003d[]):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVX%2F%2F%2BOA%3D","line":140,"updated":"2014-02-27 03:30:44.000000000","message":"Does this mean we might ending up with 2 PollingTasks simultaneously using the same discoverer object instance to getting resources with different parameters? This requires the implementation of the discoverer to be thread-safe, which I think is too much requirement. \n\nMaybe we should give different discoverer object instance to different PollingTasks, just like the ceilometer.publisher.get_publisher() ?\n\nHowever, it seems to me that we already have had the same requirement for the pollster object too, so I\u0027m not sure whether this justify to give -1.","commit_id":"b54e97e30025aa52d37b7663fda57a1387db106d"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e40fae1a12adbe4ddf3047405da762a6f227a207","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def _discoverer(self, name):"},{"line_number":138,"context_line":"        for d in self.discovery_manager:"},{"line_number":139,"context_line":"            if d.name \u003d\u003d name:"},{"line_number":140,"context_line":"                return d.obj"},{"line_number":141,"context_line":"        return None"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def discover(self, discovery\u003d[]):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAVX%2F%2F7gM%3D","line":140,"in_reply_to":"AAAAVX%2F%2F%2BOA%3D","updated":"2014-02-27 09:53:23.000000000","message":"Yeah, I thought that the operation of a discoverer would typically be \"naturally thread-safe\" due to it\u0027s read-only, non-mutating nature ... e.g. call out to a RESTful API, or load from a file.\n\nWhere the discovery extension is doing something a bit more sophisticated, then yes, the burden of thread-safety if appropriate would fall upon the implementer.","commit_id":"b54e97e30025aa52d37b7663fda57a1387db106d"}],"ceilometer/compute/discovery.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"4281c4f9dc9abf1477b097d2ff40bd81349afb56","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ceilometer.openstack.common import log"},{"line_number":23,"context_line":"from ceilometer import plugin"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class InstanceDiscovery(plugin.DiscoveryBase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAU3%2F%2FrO4%3D","line":25,"updated":"2014-02-25 10:22:55.000000000","message":"Unused","commit_id":"4b23b9abe6d63e22cb083ba46a147399ee5447db"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"b5a66ad63b15b56f17ceb697944e6b195a44e6da","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ceilometer.openstack.common import log"},{"line_number":23,"context_line":"from ceilometer import plugin"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class InstanceDiscovery(plugin.DiscoveryBase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAU3%2F%2FrEg%3D","line":25,"in_reply_to":"AAAAU3%2F%2FrO4%3D","updated":"2014-02-25 10:59:44.000000000","message":"Well spotted, will remove.","commit_id":"4b23b9abe6d63e22cb083ba46a147399ee5447db"}],"ceilometer/compute/plugin.py":[{"author":{"_account_id":9684,"name":"Jia Dong","email":"joey5566@yeah.net","username":"joey5678"},"change_message_id":"2b4503908f3e5a024d557fc7b7a6114791f4acb3","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param manager: The service manager invoking the plugin"},{"line_number":37,"context_line":"        :param cache: A dictionary for passing data between plugins"},{"line_number":38,"context_line":"        :param instance: The instance to examine"},{"line_number":39,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F7YU%3D","line":38,"updated":"2014-02-24 02:04:13.000000000","message":"should be :param resources: ....","commit_id":"10ddc2ae7de555f9b67a803b525d9f6be9127d1c"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"577963553e0fb1f0275e265f33ca16b2cf07c229","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param manager: The service manager invoking the plugin"},{"line_number":37,"context_line":"        :param cache: A dictionary for passing data between plugins"},{"line_number":38,"context_line":"        :param instance: The instance to examine"},{"line_number":39,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F41o%3D","line":38,"in_reply_to":"AAAAU3%2F%2F7YU%3D","updated":"2014-02-24 09:21:38.000000000","message":"Well spotted, thanks Jia Dong!\n\nWill be fixed in the latest.","commit_id":"10ddc2ae7de555f9b67a803b525d9f6be9127d1c"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"0f043bac16df873a3b170f888874f5beff6c3287","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param manager: The service manager invoking the plugin"},{"line_number":37,"context_line":"        :param cache: A dictionary for passing data between plugins"},{"line_number":38,"context_line":"        :param resources: The instances to examine"},{"line_number":39,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAU3%2F%2FoNs%3D","line":38,"updated":"2014-02-25 15:47:56.000000000","message":"you wanted to say The resources to examine?","commit_id":"4b23b9abe6d63e22cb083ba46a147399ee5447db"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"eda49452da8c80f8eeb34ada9e2c466b6b93adb5","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param manager: The service manager invoking the plugin"},{"line_number":37,"context_line":"        :param cache: A dictionary for passing data between plugins"},{"line_number":38,"context_line":"        :param resources: The instances to examine"},{"line_number":39,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAU3%2F%2Fn0k%3D","line":38,"in_reply_to":"AAAAU3%2F%2FoNs%3D","updated":"2014-02-25 16:05:42.000000000","message":"Well in this case, it is always instances (as the compute agent uses a single per-agent discovery extension that only yields instances).\n\nBut sure, I can change the comment to \u0027The resources\u0027 for consistency.","commit_id":"4b23b9abe6d63e22cb083ba46a147399ee5447db"}],"ceilometer/plugin.py":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"c87b6edf74360eb469304f80061149403b901cf9","unresolved":false,"context_lines":[{"line_number":109,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":110,"context_line":"class DiscoveryBase(object):"},{"line_number":111,"context_line":"    @abc.abstractmethod"},{"line_number":112,"context_line":"    def discover(self):"},{"line_number":113,"context_line":"        \"\"\"Discover resources to monitor."},{"line_number":114,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAU3%2F%2FheQ%3D","line":112,"updated":"2014-02-26 05:46:45.000000000","message":"I think it\u0027d better to define this method to accept additional parameters: \n\ndef discover(self, discover_url\u003dNone)\n\nSo that we can handle the pipeline definition like:\n\ndiscovery:\n             - \"file_loader:///foo/bar\"","commit_id":"4b23b9abe6d63e22cb083ba46a147399ee5447db"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"147a9354d8299d46e1785dc2f0be22f2950da451","unresolved":false,"context_lines":[{"line_number":109,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":110,"context_line":"class DiscoveryBase(object):"},{"line_number":111,"context_line":"    @abc.abstractmethod"},{"line_number":112,"context_line":"    def discover(self):"},{"line_number":113,"context_line":"        \"\"\"Discover resources to monitor."},{"line_number":114,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAU3%2F%2Fc8o%3D","line":112,"in_reply_to":"AAAAU3%2F%2FheQ%3D","updated":"2014-02-26 15:10:13.000000000","message":"Done.","commit_id":"4b23b9abe6d63e22cb083ba46a147399ee5447db"}]}
