)]}'
{"ceilometer/central/discovery.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"84945919aeb2ac09a5a4f4b74e490bafb60f32ab","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            return endpoints"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"class TenantDiscovery(plugin.DiscoveryBase):"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def discover(self, manager, param\u003dNone):"},{"line_number":48,"context_line":"        tenants \u003d manager.keystone.tenants.list()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_6699a478","line":45,"updated":"2014-09-12 15:46:14.000000000","message":"I know we\u0027ve never been particular docstring oriented in the ceilo world, but I wonder if it isn\u0027t time to fix that? If so, I\u0027d love to see a quick docstring here.","commit_id":"161b380d8f034e0ed048aaa3188c34495d823927"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"2af84cf2117f8189a65f9d2e5babef4ca8dc4b73","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            return endpoints"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"class TenantDiscovery(plugin.DiscoveryBase):"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def discover(self, manager, param\u003dNone):"},{"line_number":48,"context_line":"        tenants \u003d manager.keystone.tenants.list()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_8fc67c66","line":45,"in_reply_to":"fa98f980_6699a478","updated":"2014-09-15 03:00:00.000000000","message":"agree with Chris","commit_id":"161b380d8f034e0ed048aaa3188c34495d823927"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5570e4e3db6cf92afff70b586b45538c1c0a5107","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            return endpoints"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"class TenantDiscovery(plugin.DiscoveryBase):"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def discover(self, manager, param\u003dNone):"},{"line_number":48,"context_line":"        tenants \u003d manager.keystone.tenants.list()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_c34cdba0","line":45,"in_reply_to":"fa98f980_8fc67c66","updated":"2014-09-15 08:04:59.000000000","message":"Good point, incoming!","commit_id":"161b380d8f034e0ed048aaa3188c34495d823927"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"3e349b1b4fd4bee15bc043febb0424f37707c4f6","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class EndpointDiscovery(plugin.DiscoveryBase):"},{"line_number":30,"context_line":"    \"\"\"Discovery that supplies service endpoints."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    This discovery should be used when it isn\u0027t possible to divide the"},{"line_number":33,"context_line":"    pollster\u0027s work into smaller pieces than a whole service at once."},{"line_number":34,"context_line":"    Example of this is the floating_ip pollster which calls"},{"line_number":35,"context_line":"    nova.floating_ips.list() and therefore gets all floating IPs at once."}],"source_content_type":"text/x-python","patch_set":2,"id":"fa98f980_bcb29503","line":32,"updated":"2014-09-15 12:07:50.000000000","message":"Possibly clearer as:\n\n  s/when it isn\u0027t possible to divide/when the relevant APIs are not well suited to dividing/","commit_id":"88c1c483e24aa80e4f82951b2c325fe1f5411c61"}],"ceilometer/objectstore/swift.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e8afdc76ebcbd48edf57222d61a02c581e3f0ed3","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            endpoint \u003d ksclient.service_catalog.url_for("},{"line_number":67,"context_line":"                service_type\u003d\u0027object-store\u0027,"},{"line_number":68,"context_line":"                endpoint_type\u003dcfg.CONF.service_credentials.os_endpoint_type)"},{"line_number":69,"context_line":"        except exceptions.EndpointNotFound:"},{"line_number":70,"context_line":"            LOG.debug(_(\"Swift endpoint not found\"))"},{"line_number":71,"context_line":"            raise StopIteration()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_87ef5f1d","line":68,"updated":"2014-09-12 16:24:31.000000000","message":"I wonder can we avoid going back to the service_catalog for each swift pollster on each polling cycle?\n\nPerhaps by calling ksclient.service_catalog.url_for in a _Base.__init__() method?","commit_id":"161b380d8f034e0ed048aaa3188c34495d823927"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"5570e4e3db6cf92afff70b586b45538c1c0a5107","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            endpoint \u003d ksclient.service_catalog.url_for("},{"line_number":67,"context_line":"                service_type\u003d\u0027object-store\u0027,"},{"line_number":68,"context_line":"                endpoint_type\u003dcfg.CONF.service_credentials.os_endpoint_type)"},{"line_number":69,"context_line":"        except exceptions.EndpointNotFound:"},{"line_number":70,"context_line":"            LOG.debug(_(\"Swift endpoint not found\"))"},{"line_number":71,"context_line":"            raise StopIteration()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_c365bb1e","line":68,"in_reply_to":"fa98f980_2fe910b7","updated":"2014-09-15 08:04:59.000000000","message":"Doable, as long as it\u0027s safe to assume that the endpoint won\u0027t change in an agent\u0027s lifetime.","commit_id":"161b380d8f034e0ed048aaa3188c34495d823927"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"2af84cf2117f8189a65f9d2e5babef4ca8dc4b73","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            endpoint \u003d ksclient.service_catalog.url_for("},{"line_number":67,"context_line":"                service_type\u003d\u0027object-store\u0027,"},{"line_number":68,"context_line":"                endpoint_type\u003dcfg.CONF.service_credentials.os_endpoint_type)"},{"line_number":69,"context_line":"        except exceptions.EndpointNotFound:"},{"line_number":70,"context_line":"            LOG.debug(_(\"Swift endpoint not found\"))"},{"line_number":71,"context_line":"            raise StopIteration()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_2fe910b7","line":68,"in_reply_to":"fa98f980_87ef5f1d","updated":"2014-09-15 03:00:00.000000000","message":"maybe we can even put this endpoint as a class attribute instead of instance attribute?","commit_id":"161b380d8f034e0ed048aaa3188c34495d823927"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"47de5767bcc5a7cf5e6201cbb528331c6d79b7d4","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            endpoint \u003d ksclient.service_catalog.url_for("},{"line_number":67,"context_line":"                service_type\u003d\u0027object-store\u0027,"},{"line_number":68,"context_line":"                endpoint_type\u003dcfg.CONF.service_credentials.os_endpoint_type)"},{"line_number":69,"context_line":"        except exceptions.EndpointNotFound:"},{"line_number":70,"context_line":"            LOG.debug(_(\"Swift endpoint not found\"))"},{"line_number":71,"context_line":"            raise StopIteration()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa98f980_99440648","line":68,"in_reply_to":"fa98f980_c365bb1e","updated":"2014-09-15 08:42:21.000000000","message":"@Nejc: fair point, but I think we can make the assumption in a realistic deployment that populating the service catalog is done once upfront, as opposed to being tweaked on an ongoing basis.","commit_id":"161b380d8f034e0ed048aaa3188c34495d823927"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"3e349b1b4fd4bee15bc043febb0424f37707c4f6","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                    endpoint_type\u003dendpoint_type)"},{"line_number":70,"context_line":"            except exceptions.EndpointNotFound:"},{"line_number":71,"context_line":"                LOG.debug(_(\"Swift endpoint not found\"))"},{"line_number":72,"context_line":"            _Base._ENDPOINT \u003d endpoint"},{"line_number":73,"context_line":"        return _Base._ENDPOINT"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _iter_accounts(self, ksclient, cache, tenants):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa98f980_3cf06590","line":72,"updated":"2014-09-15 12:07:50.000000000","message":"So the idea is for the empty string to act as a sentinel value to avoid calling service_catalog.url_for a second time if the endpoint was not found the first time round?\n\nI wonder in that case would it make more sense to allow the subsequent url_for calls, so as to be more tolerant of the edge-case where swift is only fully deployed *after* the central agent has started running?\n\ni.e. moving line 72 to within the try block and removing line 64.","commit_id":"88c1c483e24aa80e4f82951b2c325fe1f5411c61"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"822ef1ae4d1689edfddadeb5b9a5d0dee2ccad45","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                    endpoint_type\u003dendpoint_type)"},{"line_number":70,"context_line":"            except exceptions.EndpointNotFound:"},{"line_number":71,"context_line":"                LOG.debug(_(\"Swift endpoint not found\"))"},{"line_number":72,"context_line":"            _Base._ENDPOINT \u003d endpoint"},{"line_number":73,"context_line":"        return _Base._ENDPOINT"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _iter_accounts(self, ksclient, cache, tenants):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa98f980_7f9d7fbb","line":72,"in_reply_to":"fa98f980_3cf06590","updated":"2014-09-15 12:26:36.000000000","message":"Yes, I was thinking about the case where the swift service is missing. Keystone will get bombarded with url_for requests by every swift pollster every polling interval (which is no different than how it worked so far, true), but I guess if you don\u0027t run swift, you can filter its meters out in the pipeline.yaml .","commit_id":"88c1c483e24aa80e4f82951b2c325fe1f5411c61"}]}
