)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":595,"name":"Nick Barcet","email":"nicolas@barcet.com","username":"nijaba"},"change_message_id":"0a3d23e2073b68b25377b16c776771cd9646622a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     guillaume pernot \u003cgpernot@praksys.org\u003e"},{"line_number":5,"context_line":"CommitDate: 2012-11-28 17:34:48 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement object store metering"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ie27abd0b5803043f06899f14b394f2a7ab691bca"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAMH%2F%2FuZc%3D","line":7,"updated":"2012-11-28 16:52:17.000000000","message":"please add a pointer to the blueprint in the form\n   implement blueprint pollster-swift\nso that the status of https://blueprints.launchpad.net/ceilometer/+spec/pollster-swift can be automatically updated as this patch goes through review.\n\nSame thing for the bug:\n   fixes bug #1004450\n\nYou may also want to specify which counters are proposed in this commit","commit_id":"241a17b7a3ed306ffd6773b9f3b3e7f08bcdf68e"}],"ceilometer/objectstore/swift.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"8c0976b207272232e17bb03c1df3f0c957bb7083","unresolved":false,"context_lines":[{"line_number":35,"context_line":"class _Base(plugin.PollsterBase):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def get_counters(self, manager, context):"},{"line_number":38,"context_line":"        for tenant, account in self.iter_accounts():"},{"line_number":39,"context_line":"            yield counter.Counter("},{"line_number":40,"context_line":"                name\u003d\u0027storage.objects\u0027,"},{"line_number":41,"context_line":"                type\u003dcounter.TYPE_GAUGE,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2Furo%3D","line":38,"updated":"2012-11-28 12:30:36.000000000","message":"If iter_accounts() is part of the API for this base class, there should be a version in the base class describing what the method should do. Making it an abstract method using the abc module would be best.","commit_id":"c160bda0a98350213c75a4b77ed697bb856cd641"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7133e0fd93a5b5eedbf7544b4b4f1072f0d8e422","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                name\u003d\u0027storage.objects\u0027,"},{"line_number":41,"context_line":"                type\u003dcounter.TYPE_GAUGE,"},{"line_number":42,"context_line":"                volume\u003daccount[\u0027x-account-object-count\u0027],"},{"line_number":43,"context_line":"                user_id\u003dtenant,"},{"line_number":44,"context_line":"                project_id\u003dtenant,"},{"line_number":45,"context_line":"                resource_id\u003dtenant,"},{"line_number":46,"context_line":"                timestamp\u003dtimeutils.isotime(),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2FusI%3D","line":43,"updated":"2012-11-28 12:15:38.000000000","message":"Tenant is not a user_id, so this should be None.","commit_id":"c160bda0a98350213c75a4b77ed697bb856cd641"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7133e0fd93a5b5eedbf7544b4b4f1072f0d8e422","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            # TODO: \"AUTH_\" should be reseller_prefix or something"},{"line_number":85,"context_line":"            yield (t.id, swift.head_account(\u0027%s/v1/AUTH_%s\u0027 % (endpoint, t.id),"},{"line_number":86,"context_line":"                                            ks.auth_token))"},{"line_number":87,"context_line":"                 "},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class SwiftDirectPollster(_Base):"},{"line_number":90,"context_line":"    \"\"\"Iterate over all accounts, using swift ring file to alleviate keystone."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2Fusw%3D","line":87,"updated":"2012-11-28 12:15:38.000000000","message":"Blank lines","commit_id":"c160bda0a98350213c75a4b77ed697bb856cd641"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"8c0976b207272232e17bb03c1df3f0c957bb7083","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                                            ks.auth_token))"},{"line_number":87,"context_line":"                 "},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class SwiftDirectPollster(_Base):"},{"line_number":90,"context_line":"    \"\"\"Iterate over all accounts, using swift ring file to alleviate keystone."},{"line_number":91,"context_line":"    \"\"\""},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2Fuqw%3D","line":89,"updated":"2012-11-28 12:30:36.000000000","message":"This class is not listed in the entry points in setup.py. Is it meant to be used in production installations?","commit_id":"c160bda0a98350213c75a4b77ed697bb856cd641"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"8c0976b207272232e17bb03c1df3f0c957bb7083","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                 "},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class SwiftDirectPollster(_Base):"},{"line_number":90,"context_line":"    \"\"\"Iterate over all accounts, using swift ring file to alleviate keystone."},{"line_number":91,"context_line":"    \"\"\""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2Furc%3D","line":90,"updated":"2012-11-28 12:30:36.000000000","message":"I think you mean \"eliminate\" not \"alleviate\".","commit_id":"c160bda0a98350213c75a4b77ed697bb856cd641"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7133e0fd93a5b5eedbf7544b4b4f1072f0d8e422","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                             tenant_name\u003dcfg.CONF.os_tenant_name,"},{"line_number":98,"context_line":"                             auth_url\u003dcfg.CONF.os_auth_url)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        ring \u003d Ring(\u0027/etc/swift/account.ring.gz\u0027)"},{"line_number":101,"context_line":"        "},{"line_number":102,"context_line":"        for t in ks.tenants.list():"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2FusU%3D","line":100,"updated":"2012-11-28 12:15:38.000000000","message":"I\u0027d think a configuration value would be better, just to be safe. I think this is not hard-coded in Swift neither, right?","commit_id":"c160bda0a98350213c75a4b77ed697bb856cd641"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7133e0fd93a5b5eedbf7544b4b4f1072f0d8e422","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                             auth_url\u003dcfg.CONF.os_auth_url)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        ring \u003d Ring(\u0027/etc/swift/account.ring.gz\u0027)"},{"line_number":101,"context_line":"        "},{"line_number":102,"context_line":"        for t in ks.tenants.list():"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"            # TODO: should be reseller_prefix or something :"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2Fuss%3D","line":101,"updated":"2012-11-28 12:15:38.000000000","message":"Blank lines","commit_id":"c160bda0a98350213c75a4b77ed697bb856cd641"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7133e0fd93a5b5eedbf7544b4b4f1072f0d8e422","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            part, nodes \u003d ring.get_nodes(account)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"            for node in nodes:"},{"line_number":111,"context_line":"                url \u003d \u0027http://%s:%s/%s/%s/%s\u0027 % (node[\u0027ip\u0027], node[\u0027port\u0027], "},{"line_number":112,"context_line":"                                                 node[\u0027device\u0027], part,"},{"line_number":113,"context_line":"                                                 urllib2.quote(account))"},{"line_number":114,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2Fuso%3D","line":111,"updated":"2012-11-28 12:15:38.000000000","message":"Blank here","commit_id":"c160bda0a98350213c75a4b77ed697bb856cd641"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"8c0976b207272232e17bb03c1df3f0c957bb7083","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                try:"},{"line_number":115,"context_line":"                    resp \u003d urllib2.urlopen(url)"},{"line_number":116,"context_line":"                except urllib2.HTTPError, e:"},{"line_number":117,"context_line":"                    if e.code \u003d\u003d 404:"},{"line_number":118,"context_line":"                        pass"},{"line_number":119,"context_line":"                    else:"},{"line_number":120,"context_line":"                        #more_nodes \u003d ring.get_more_nodes(part)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2Fuq8%3D","line":117,"updated":"2012-11-28 12:30:36.000000000","message":"This could be simplified to:\n\nif e.code !\u003d 404:\n    raise","commit_id":"c160bda0a98350213c75a4b77ed697bb856cd641"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7133e0fd93a5b5eedbf7544b4b4f1072f0d8e422","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                        pass"},{"line_number":119,"context_line":"                    else:"},{"line_number":120,"context_line":"                        #more_nodes \u003d ring.get_more_nodes(part)"},{"line_number":121,"context_line":"                        raise"},{"line_number":122,"context_line":"                else:"},{"line_number":123,"context_line":"                    info \u003d resp.info()"},{"line_number":124,"context_line":"                    resp.close()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2FusM%3D","line":121,"updated":"2012-11-28 12:15:38.000000000","message":"hm? is this correct?","commit_id":"c160bda0a98350213c75a4b77ed697bb856cd641"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7133e0fd93a5b5eedbf7544b4b4f1072f0d8e422","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                    info \u003d resp.info()"},{"line_number":124,"context_line":"                    resp.close()"},{"line_number":125,"context_line":"                    yield (t.id, dict( (p, int(info[p]))"},{"line_number":126,"context_line":"                                       for p in [\u0027x-account-bytes-used\u0027, "},{"line_number":127,"context_line":"                                                 \u0027x-account-container-count\u0027,"},{"line_number":128,"context_line":"                                                 \u0027x-account-object-count\u0027]))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMH%2F%2Fusk%3D","line":126,"updated":"2012-11-28 12:15:38.000000000","message":"Blank here","commit_id":"c160bda0a98350213c75a4b77ed697bb856cd641"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"1dcd1cc8666347780e4b5f8b5a7650988bf77be8","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    \"\"\""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @staticmethod"},{"line_number":86,"context_line":"    def iter_accounts():"},{"line_number":87,"context_line":"        ks \u003d ksclient.Client(username\u003dcfg.CONF.os_username,"},{"line_number":88,"context_line":"                             password\u003dcfg.CONF.os_password,"},{"line_number":89,"context_line":"                             tenant_name\u003dcfg.CONF.os_tenant_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2Fuiw%3D","line":86,"updated":"2012-11-28 14:48:23.000000000","message":"I think you missed Doug comment on adding this as an abstract method in the base class.","commit_id":"dafd8224bac1276496486049f5dbcae0ada1e602"},{"author":{"_account_id":595,"name":"Nick Barcet","email":"nicolas@barcet.com","username":"nijaba"},"change_message_id":"0a3d23e2073b68b25377b16c776771cd9646622a","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"            # ask all nodes for stats."},{"line_number":130,"context_line":"            # TODO: maybe we should \u0027break\u0027 loop as soon as we get a response"},{"line_number":131,"context_line":"            # from one node, assuming others will give same results...."},{"line_number":132,"context_line":"            for node in nodes:"},{"line_number":133,"context_line":"                url \u003d \u0027http://%s:%s/%s/%s/%s\u0027 % (node[\u0027ip\u0027], node[\u0027port\u0027],"},{"line_number":134,"context_line":"                                                 node[\u0027device\u0027], part,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2FuYk%3D","line":131,"updated":"2012-11-28 16:52:17.000000000","message":"shouldn\u0027t we just ask once? this seems very clumsy","commit_id":"241a17b7a3ed306ffd6773b9f3b3e7f08bcdf68e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"57c0e711cd015c5125b0f101351db21aa8530ef9","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"            # ask all nodes for stats."},{"line_number":130,"context_line":"            # TODO: maybe we should \u0027break\u0027 loop as soon as we get a response"},{"line_number":131,"context_line":"            # from one node, assuming others will give same results...."},{"line_number":132,"context_line":"            for node in nodes:"},{"line_number":133,"context_line":"                url \u003d \u0027http://%s:%s/%s/%s/%s\u0027 % (node[\u0027ip\u0027], node[\u0027port\u0027],"},{"line_number":134,"context_line":"                                                 node[\u0027device\u0027], part,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2Ftbk%3D","line":131,"updated":"2012-11-29 09:21:10.000000000","message":"Yes, you should break.\n\nSo basically, I think what you want here is to try all nodes like you do and break as soon as you yielded a counter. Data consistency is not our issue.\n\nIf all nodes are down, there\u0027s no need to raise an error. I think we can assume that is all node for an account is down, we just don\u0027t emit counters and that\u0027s it, since it doesn\u0027t work. And that\u0027s not a common situation, hopefully.\nOtherwise, you may want to log the fact it wasn\u0027t able to talk to any of the servers with LOG.warn just to be safe and nice with the operator.","commit_id":"afcaf40e7bb0824af9a33dab9b78b8efdee3581d"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"441e0f3fa1d6b3cf1188fabce308d12c920f3770","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                                            ks.auth_token))"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"class SwiftDirectPollster(_Base):"},{"line_number":111,"context_line":"    \"\"\"Iterate over all accounts, using swift ring file to bypass keystone."},{"line_number":112,"context_line":"    \"\"\""},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2FtDY%3D","line":110,"updated":"2012-11-29 16:55:49.000000000","message":"Can you explain the use case for using this pollster instead of the one that talks to swift via the API? How would one configure ceilometer to use this? I would not expect any of the ceilometer services would be running on the storage nodes. Is the ring file available on the central servers where our central agent runs?","commit_id":"85aae4f87fee882c2f5f5c5ae6df678052871d6b"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"9ab5c19fb0499f47bb39ef73c6f1d325d90c0265","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                    # break as soon as we get a valid response, assuming other"},{"line_number":153,"context_line":"                    # nodes will give same results"},{"line_number":154,"context_line":"                    break"},{"line_number":155,"context_line":"            if info is None:"},{"line_number":156,"context_line":"                LOG.warning(\"Can\u0027t reach any swift node for tenant %s\", t.name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2FtIQ%3D","line":155,"updated":"2012-11-29 16:29:18.000000000","message":"Minor nitpick, unless of using `info\u0027 I think you can use:\n\nfor node in nodes:\n   \u003c...\u003e\nelse:\n    LOG.warning(...)","commit_id":"85aae4f87fee882c2f5f5c5ae6df678052871d6b"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"63b646a658f90d1ee4b965a6e6d88cab732946cb","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def get_counters(self, manager, context):"},{"line_number":56,"context_line":"        for tenant, account in self.iter_accounts():"},{"line_number":57,"context_line":"            yield counter.Counter("},{"line_number":58,"context_line":"                name\u003d\u0027storage.objects\u0027,"},{"line_number":59,"context_line":"                type\u003dcounter.TYPE_GAUGE,"},{"line_number":60,"context_line":"                volume\u003dint(account[\u0027x-account-object-count\u0027]),"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAMH%2F%2Fr9A%3D","line":57,"updated":"2012-11-30 15:04:46.000000000","message":"We should split each of these counters out to their own pollster so they can be enabled and disabled individually by the deployer.","commit_id":"6e38fbfa3fc2b721cfbd65b7c979764fdc097ff2"}],"doc/source/install.rst":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"63b646a658f90d1ee4b965a6e6d88cab732946cb","unresolved":false,"context_lines":[{"line_number":83,"context_line":"   to ``rabbit`` or ``qpid`` in ``glance-api.conf`` and restarting the"},{"line_number":84,"context_line":"   service."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"3. In order to retrieve object store statistics, ceilometer needs an"},{"line_number":87,"context_line":"   access to swift with ``ResellerAdmin`` role. You should give this"},{"line_number":88,"context_line":"   role to your ``os_username`` user for tenant ``os_tenant_name``::"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"AAAAMH%2F%2Fr80%3D","line":86,"updated":"2012-11-30 15:04:46.000000000","message":"\"needs an access\" -\u003e \"needs access\"","commit_id":"6e38fbfa3fc2b721cfbd65b7c979764fdc097ff2"}],"doc/source/measurements.rst":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"57c0e711cd015c5125b0f101351db21aa8530ef9","unresolved":false,"context_lines":[{"line_number":112,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":113,"context_line":"Name                        Type        Volume   Resource  Note"},{"line_number":114,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":115,"context_line":"storage.objects             Gauge             1  store ID  Number of objects"},{"line_number":116,"context_line":"storage.objects.size        Gauge         bytes  store ID  Total size of stored objects "},{"line_number":117,"context_line":"storage.objects.containers  Gauge             1  store ID  Number of containers"},{"line_number":118,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":6,"id":"AAAAMH%2F%2FtbY%3D","line":115,"updated":"2012-11-29 09:21:10.000000000","message":"I wouldn\u0027t say 1, it doesn\u0027t really mean anything, even if I see we use that above but that\u0027s not going to be always 1. Let\u0027s say the unit, which is \u0027objects\u0027 or \u0027obj\u0027 if objects is too long.","commit_id":"afcaf40e7bb0824af9a33dab9b78b8efdee3581d"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"57c0e711cd015c5125b0f101351db21aa8530ef9","unresolved":false,"context_lines":[{"line_number":113,"context_line":"Name                        Type        Volume   Resource  Note"},{"line_number":114,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":115,"context_line":"storage.objects             Gauge             1  store ID  Number of objects"},{"line_number":116,"context_line":"storage.objects.size        Gauge         bytes  store ID  Total size of stored objects "},{"line_number":117,"context_line":"storage.objects.containers  Gauge             1  store ID  Number of containers"},{"line_number":118,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"AAAAMH%2F%2Ftbc%3D","line":116,"updated":"2012-11-29 09:21:10.000000000","message":"Whitespace :)","commit_id":"afcaf40e7bb0824af9a33dab9b78b8efdee3581d"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"57c0e711cd015c5125b0f101351db21aa8530ef9","unresolved":false,"context_lines":[{"line_number":114,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":115,"context_line":"storage.objects             Gauge             1  store ID  Number of objects"},{"line_number":116,"context_line":"storage.objects.size        Gauge         bytes  store ID  Total size of stored objects "},{"line_number":117,"context_line":"storage.objects.containers  Gauge             1  store ID  Number of containers"},{"line_number":118,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Naming convention"}],"source_content_type":"text/x-rst","patch_set":6,"id":"AAAAMH%2F%2FtbU%3D","line":117,"updated":"2012-11-29 09:21:10.000000000","message":"Same here, not 1 but \u0027containers\u0027. Probably abbreviated somehow like \u0027ctnrs\u0027.","commit_id":"afcaf40e7bb0824af9a33dab9b78b8efdee3581d"}],"setup.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"57c0e711cd015c5125b0f101351db21aa8530ef9","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    network_floatingip \u003d ceilometer.network.floatingip:FloatingIPPollster"},{"line_number":120,"context_line":"    image \u003d ceilometer.image.glance:ImagePollster"},{"line_number":121,"context_line":"    image_size \u003d ceilometer.image.glance:ImageSizePollster"},{"line_number":122,"context_line":"    objectstore \u003d ceilometer.objectstore.swift:SwiftPollster"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    [ceilometer.storage]"},{"line_number":125,"context_line":"    log \u003d ceilometer.storage.impl_log:LogStorage"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2FtbQ%3D","line":122,"updated":"2012-11-29 09:21:10.000000000","message":"I don\u0027t think it\u0027s enough to register one, we would want to register both but disable one by default. Doug, is there an easy way to do that currently?","commit_id":"afcaf40e7bb0824af9a33dab9b78b8efdee3581d"}],"tests/objectstore/test_swift.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"1dcd1cc8666347780e4b5f8b5a7650988bf77be8","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def setUp(self):"},{"line_number":43,"context_line":"        super(TestSwiftPollster, self).setUp()"},{"line_number":44,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":45,"context_line":"        self.manager \u003d manager.AgentManager()"},{"line_number":46,"context_line":"        self.pollster \u003d swift.SwiftPollster()"},{"line_number":47,"context_line":"        self.stubs.Set(swift.SwiftPollster, \u0027iter_accounts\u0027,"},{"line_number":48,"context_line":"                       self.fake_iter_accounts)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2Fuis%3D","line":45,"updated":"2012-11-28 14:48:23.000000000","message":"I\u0027ve the impression that both manager and context are useless here, am I right?","commit_id":"dafd8224bac1276496486049f5dbcae0ada1e602"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"57c0e711cd015c5125b0f101351db21aa8530ef9","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.stubs.Set(swift.SwiftPollster, \u0027iter_accounts\u0027,"},{"line_number":44,"context_line":"                       self.fake_iter_accounts)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def test_objectstore_metering(self):"},{"line_number":47,"context_line":"        counters \u003d list(self.pollster.get_counters(None, None))"},{"line_number":48,"context_line":"        self.assertEqual(len(counters), 6)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2FtbM%3D","line":46,"updated":"2012-11-29 09:21:10.000000000","message":"Just to be safe, could you copy this test with a SwiftDirectPollster?\nThat would test the same thing for now, but if things evolve, we\u0027ll be safer.","commit_id":"afcaf40e7bb0824af9a33dab9b78b8efdee3581d"}],"tools/pip-requires":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"57c0e711cd015c5125b0f101351db21aa8530ef9","unresolved":false,"context_lines":[{"line_number":14,"context_line":"python-glanceclient"},{"line_number":15,"context_line":"python-novaclient\u003e\u003d2.6.10"},{"line_number":16,"context_line":"python-keystoneclient\u003e\u003d0.2,\u003c0.3"},{"line_number":17,"context_line":"python-swiftclient"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAAMH%2F%2FtbI%3D","line":17,"updated":"2012-11-29 09:21:10.000000000","message":"It seems you also miss swift because you use the Ring object here.","commit_id":"afcaf40e7bb0824af9a33dab9b78b8efdee3581d"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"983ec94133992f0f497ef8533970c6d2c634b20b","unresolved":false,"context_lines":[{"line_number":15,"context_line":"python-novaclient\u003e\u003d2.6.10"},{"line_number":16,"context_line":"python-keystoneclient\u003e\u003d0.2,\u003c0.3"},{"line_number":17,"context_line":"python-swiftclient"},{"line_number":18,"context_line":"swift"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"AAAAMH%2F%2Fs7o%3D","line":18,"updated":"2012-11-29 18:12:59.000000000","message":"I don\u0027t think it needs Swift in this version, right?","commit_id":"cf1963399c08c69d55d05b0b9b9b52d094777205"}]}
