)]}'
{"nova/api/openstack/compute/contrib/fping.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"e3e70caa8ad01a9d9c912ac09f0e095ad9862132","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def check_fping(self, context):"},{"line_number":59,"context_line":"        project_id \u003d context.project_id"},{"line_number":60,"context_line":"        if not os.access(FLAGS.fping_path, os.X_OK):"},{"line_number":61,"context_line":"                raise exc.HTTPServiceUnavailable("},{"line_number":62,"context_line":"                    explanation\u003d_(\"fping utility is not found.\"))"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        now \u003d time.time()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FhjY%3D","line":61,"updated":"2012-09-04 15:14:40.000000000","message":"Too heavily indented; you only need 4 spaces of extra indent here.","commit_id":"1b8dadc287acc1d3ad215c9d8683d49825691203"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"e3e70caa8ad01a9d9c912ac09f0e095ad9862132","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        now \u003d time.time()"},{"line_number":65,"context_line":"        last_call \u003d self.last_call.get(project_id, None)"},{"line_number":66,"context_line":"        if last_call is not None:"},{"line_number":67,"context_line":"            if now - last_call \u003c FLAGS.fping_interval:"},{"line_number":68,"context_line":"                raise exc.HTTPServiceUnavailable("},{"line_number":69,"context_line":"                    explanation\u003d_(\"fping cannot be performed at the moment.\""},{"line_number":70,"context_line":"                                  \" Please try again after %d seconds\") %"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FhjU%3D","line":67,"updated":"2012-09-04 15:14:40.000000000","message":"It would be better to eliminate this second \"if\" by combining its test with the one in the previous \"if\" with the conjunction \"and\".","commit_id":"1b8dadc287acc1d3ad215c9d8683d49825691203"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"e3e70caa8ad01a9d9c912ac09f0e095ad9862132","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                raise exc.HTTPServiceUnavailable("},{"line_number":69,"context_line":"                    explanation\u003d_(\"fping cannot be performed at the moment.\""},{"line_number":70,"context_line":"                                  \" Please try again after %d seconds\") %"},{"line_number":71,"context_line":"                    int(FLAGS.fping_interval - (now - last_call)))"},{"line_number":72,"context_line":"        self.last_call[project_id] \u003d now"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FhjI%3D","line":71,"updated":"2012-09-04 15:14:40.000000000","message":"This certainly is one way of rate-limiting the service, but it isn\u0027t complete.  First, there already exists more general rate-limiting code in nova, which is what I had expected you to use.  Second, this interval information is not persisted in any way, so it will only be available in this one executing nova-api worker—making your rate limiting work in a way you are not expecting.  (And yes, the same flaw affects the nova built-in rate limiter, but that can be substituted out for a distributed one like Turnstile, whereas this one cannot.)","commit_id":"1b8dadc287acc1d3ad215c9d8683d49825691203"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"d46e4498e258e1373ee32b6022366a299a676fc6","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from nova.api.openstack import common"},{"line_number":26,"context_line":"from nova.api.openstack import extensions"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from nova import compute"},{"line_number":29,"context_line":"from nova import exception"},{"line_number":30,"context_line":"from nova import flags"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALn%2F%2FuiE%3D","line":27,"updated":"2012-11-09 19:00:37.000000000","message":"This blank line should be eliminated.","commit_id":"aaf0c8cb52fbdb065bdb78516309c61de4266d40"},{"author":{"_account_id":1267,"name":"Alexei Ababilov","display_name":"Alexei Ababilov","email":"ilovegnulinux@gmail.com","username":"aababilov"},"change_message_id":"997d9a8b2217df48139e07a4d519b5b92efbe86a","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from nova.api.openstack import common"},{"line_number":26,"context_line":"from nova.api.openstack import extensions"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from nova import compute"},{"line_number":29,"context_line":"from nova import exception"},{"line_number":30,"context_line":"from nova import flags"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F%2Fuk%3D","line":27,"in_reply_to":"AAAALn%2F%2FuiE%3D","updated":"2012-11-12 12:21:40.000000000","message":"Done","commit_id":"aaf0c8cb52fbdb065bdb78516309c61de4266d40"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"d46e4498e258e1373ee32b6022366a299a676fc6","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from nova import exception"},{"line_number":30,"context_line":"from nova import flags"},{"line_number":31,"context_line":"from nova import utils"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from nova.openstack.common import cfg"},{"line_number":34,"context_line":"from nova.openstack.common import log as logging"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALn%2F%2Fuh8%3D","line":32,"updated":"2012-11-09 19:00:37.000000000","message":"This blank line also needs eliminated, and the following two imports sorted into the correct place.","commit_id":"aaf0c8cb52fbdb065bdb78516309c61de4266d40"},{"author":{"_account_id":1267,"name":"Alexei Ababilov","display_name":"Alexei Ababilov","email":"ilovegnulinux@gmail.com","username":"aababilov"},"change_message_id":"997d9a8b2217df48139e07a4d519b5b92efbe86a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from nova import exception"},{"line_number":30,"context_line":"from nova import flags"},{"line_number":31,"context_line":"from nova import utils"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from nova.openstack.common import cfg"},{"line_number":34,"context_line":"from nova.openstack.common import log as logging"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F%2Fuo%3D","line":32,"in_reply_to":"AAAALn%2F%2Fuh8%3D","updated":"2012-11-12 12:21:40.000000000","message":"Done","commit_id":"aaf0c8cb52fbdb065bdb78516309c61de4266d40"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"d46e4498e258e1373ee32b6022366a299a676fc6","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        search_opts \u003d {}"},{"line_number":85,"context_line":"        search_opts[\"deleted\"] \u003d False"},{"line_number":86,"context_line":"        if not context.is_admin or (context.is_admin and \"all_tenants\""},{"line_number":87,"context_line":"                                    not in req.GET):"},{"line_number":88,"context_line":"            if context.project_id:"},{"line_number":89,"context_line":"                search_opts[\"project_id\"] \u003d context.project_id"},{"line_number":90,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALn%2F%2Fuhk%3D","line":87,"updated":"2012-11-09 19:00:37.000000000","message":"This should probably use the policy code, so that administrators can easily turn the capability on and off…","commit_id":"aaf0c8cb52fbdb065bdb78516309c61de4266d40"},{"author":{"_account_id":1267,"name":"Alexei Ababilov","display_name":"Alexei Ababilov","email":"ilovegnulinux@gmail.com","username":"aababilov"},"change_message_id":"997d9a8b2217df48139e07a4d519b5b92efbe86a","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        search_opts \u003d {}"},{"line_number":85,"context_line":"        search_opts[\"deleted\"] \u003d False"},{"line_number":86,"context_line":"        if not context.is_admin or (context.is_admin and \"all_tenants\""},{"line_number":87,"context_line":"                                    not in req.GET):"},{"line_number":88,"context_line":"            if context.project_id:"},{"line_number":89,"context_line":"                search_opts[\"project_id\"] \u003d context.project_id"},{"line_number":90,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F%2Fs4%3D","line":87,"in_reply_to":"AAAALn%2F%2Fuhk%3D","updated":"2012-11-12 12:21:40.000000000","message":"Done (I hope I\u0027ve chosen an acceptable policy scheme now)","commit_id":"aaf0c8cb52fbdb065bdb78516309c61de4266d40"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"5aeb5fa7e29da81cd715c880e9a04bb8de3f1b4c","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                search_opts[\"project_id\"] \u003d context.project_id"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                search_opts[\"user_id\"] \u003d context.user_id"},{"line_number":93,"context_line":"        search_opts[\"deleted\"] \u003d False"},{"line_number":94,"context_line":"        self.check_fping()"},{"line_number":95,"context_line":"        include \u003d req.GET.get(\"include\", None)"},{"line_number":96,"context_line":"        if include:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2F%2Fb4%3D","line":93,"updated":"2012-11-12 17:15:19.000000000","message":"femtonit: I would have probably put this in the search_opts \u003d line above, i.e.:\n\n    search_opts \u003d dict(deleted\u003dFalse)\n    if \"all_tenants\" in req.GET:\n        …","commit_id":"2f5151ca694ce3d0e833060a62c1cbf07d604262"},{"author":{"_account_id":1267,"name":"Alexei Ababilov","display_name":"Alexei Ababilov","email":"ilovegnulinux@gmail.com","username":"aababilov"},"change_message_id":"19be1e5ff5e718104e39bc97597950935c398932","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                search_opts[\"project_id\"] \u003d context.project_id"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                search_opts[\"user_id\"] \u003d context.user_id"},{"line_number":93,"context_line":"        search_opts[\"deleted\"] \u003d False"},{"line_number":94,"context_line":"        self.check_fping()"},{"line_number":95,"context_line":"        include \u003d req.GET.get(\"include\", None)"},{"line_number":96,"context_line":"        if include:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2F%2Bnk%3D","line":93,"in_reply_to":"AAAAMH%2F%2F%2Fb4%3D","updated":"2012-11-13 09:52:44.000000000","message":"Done","commit_id":"2f5151ca694ce3d0e833060a62c1cbf07d604262"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"5aeb5fa7e29da81cd715c880e9a04bb8de3f1b4c","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            context \u003d req.environ[\"nova.context\"]"},{"line_number":135,"context_line":"            authorize(context)"},{"line_number":136,"context_line":"            self.check_fping()"},{"line_number":137,"context_line":"            instance \u003d self.compute_api.get(context, id)"},{"line_number":138,"context_line":"            ips \u003d [str(ip) for ip in self._get_instance_ips(context, instance)]"},{"line_number":139,"context_line":"            alive_ips \u003d self.fping(ips)"},{"line_number":140,"context_line":"            return {"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2F%2Fb0%3D","line":137,"updated":"2012-11-12 17:15:19.000000000","message":"One question I have—what happens if the instance does not belong to the user issuing the fping request?  Do you know?","commit_id":"2f5151ca694ce3d0e833060a62c1cbf07d604262"},{"author":{"_account_id":1267,"name":"Alexei Ababilov","display_name":"Alexei Ababilov","email":"ilovegnulinux@gmail.com","username":"aababilov"},"change_message_id":"19be1e5ff5e718104e39bc97597950935c398932","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            context \u003d req.environ[\"nova.context\"]"},{"line_number":135,"context_line":"            authorize(context)"},{"line_number":136,"context_line":"            self.check_fping()"},{"line_number":137,"context_line":"            instance \u003d self.compute_api.get(context, id)"},{"line_number":138,"context_line":"            ips \u003d [str(ip) for ip in self._get_instance_ips(context, instance)]"},{"line_number":139,"context_line":"            alive_ips \u003d self.fping(ips)"},{"line_number":140,"context_line":"            return {"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2F%2Blg%3D","line":137,"in_reply_to":"AAAAMH%2F%2F%2Fb0%3D","updated":"2012-11-13 09:52:44.000000000","message":"For non-admin user, InstanceNotFound will be raised and HTTP Not Found is returned. \ncompute_api.get calls db.instance_get_by_uuid and, finally, db.sqlalchemy.model_query. The latter allows a non-admin user to get  instances that belong to his project only.\nThe same policy and implementation is used by server controller in https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/servers.py#L717 (anything for admin and project-only for non-admin).","commit_id":"2f5151ca694ce3d0e833060a62c1cbf07d604262"}],"nova/api/openstack/compute/limits.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"5aeb5fa7e29da81cd715c880e9a04bb8de3f1b4c","unresolved":false,"context_lines":[{"line_number":212,"context_line":"    Limit(\"PUT\", \"*\", \".*\", 10, PER_MINUTE),"},{"line_number":213,"context_line":"    Limit(\"GET\", \"*changes-since*\", \".*changes-since.*\", 3, PER_MINUTE),"},{"line_number":214,"context_line":"    Limit(\"DELETE\", \"*\", \".*\", 100, PER_MINUTE),"},{"line_number":215,"context_line":"    Limit(\"GET\", \"*/os-fping\", \"^/os-fping\", 1, PER_MINUTE),"},{"line_number":216,"context_line":"]"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2F%2Fbo%3D","line":215,"updated":"2012-11-12 17:15:19.000000000","message":"I\u0027m thinking it might be a good idea to tighten this down even more; maybe something like 5 * PER_MINUTE so you can only issue this once every 5 minutes…e.g.,\n\n    Limit(\"GET\", \"*/os-fping\", \"^/os-fping\", 1, 5 * PER_MINUTE),","commit_id":"2f5151ca694ce3d0e833060a62c1cbf07d604262"},{"author":{"_account_id":1267,"name":"Alexei Ababilov","display_name":"Alexei Ababilov","email":"ilovegnulinux@gmail.com","username":"aababilov"},"change_message_id":"19be1e5ff5e718104e39bc97597950935c398932","unresolved":false,"context_lines":[{"line_number":212,"context_line":"    Limit(\"PUT\", \"*\", \".*\", 10, PER_MINUTE),"},{"line_number":213,"context_line":"    Limit(\"GET\", \"*changes-since*\", \".*changes-since.*\", 3, PER_MINUTE),"},{"line_number":214,"context_line":"    Limit(\"DELETE\", \"*\", \".*\", 100, PER_MINUTE),"},{"line_number":215,"context_line":"    Limit(\"GET\", \"*/os-fping\", \"^/os-fping\", 1, PER_MINUTE),"},{"line_number":216,"context_line":"]"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAMH%2F%2F%2Bno%3D","line":215,"in_reply_to":"AAAAMH%2F%2F%2Fbo%3D","updated":"2012-11-13 09:52:44.000000000","message":"Done","commit_id":"2f5151ca694ce3d0e833060a62c1cbf07d604262"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"48be0ce5c7a481f2dd22f0be3e0831069f474c86","unresolved":false,"context_lines":[{"line_number":212,"context_line":"    Limit(\"PUT\", \"*\", \".*\", 10, PER_MINUTE),"},{"line_number":213,"context_line":"    Limit(\"GET\", \"*changes-since*\", \".*changes-since.*\", 3, PER_MINUTE),"},{"line_number":214,"context_line":"    Limit(\"DELETE\", \"*\", \".*\", 100, PER_MINUTE),"},{"line_number":215,"context_line":"    Limit(\"GET\", \"*/os-fping\", \"^/os-fping\", 5, PER_MINUTE),"},{"line_number":216,"context_line":"]"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F%2BQU%3D","line":215,"updated":"2012-11-13 16:34:13.000000000","message":"well, no, now you\u0027ve loosened the limit; you\u0027re now allowing 5 requests per minute instead of 1 request per minute, whereas I was suggesting making it 1 request per 5 minutes.  I\u0027m looking for something more like:\n\n    Limit(\"GET\", \"*/os-fping\", \"^/os-fping\", 1, 5 * PER_MINUTE),","commit_id":"570f77e9b8ce351e7f38ca143c4ec5248dc7d35b"},{"author":{"_account_id":1267,"name":"Alexei Ababilov","display_name":"Alexei Ababilov","email":"ilovegnulinux@gmail.com","username":"aababilov"},"unresolved":false,"context_lines":[{"line_number":212,"context_line":"    Limit(\"PUT\", \"*\", \".*\", 10, PER_MINUTE),"},{"line_number":213,"context_line":"    Limit(\"GET\", \"*changes-since*\", \".*changes-since.*\", 3, PER_MINUTE),"},{"line_number":214,"context_line":"    Limit(\"DELETE\", \"*\", \".*\", 100, PER_MINUTE),"},{"line_number":215,"context_line":"    Limit(\"GET\", \"*/os-fping\", \"^/os-fping\", 5, PER_MINUTE),"},{"line_number":216,"context_line":"]"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F9QU%3D","line":215,"in_reply_to":"AAAAMH%2F%2F%2BQU%3D","updated":"2012-11-14 09:19:14.000000000","message":"Mea culpa!\nChanged to 12 requests per hour, i.e. 1 per 5 minutes.\nDone","commit_id":"570f77e9b8ce351e7f38ca143c4ec5248dc7d35b"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"48be0ce5c7a481f2dd22f0be3e0831069f474c86","unresolved":false,"context_lines":[{"line_number":212,"context_line":"    Limit(\"PUT\", \"*\", \".*\", 10, PER_MINUTE),"},{"line_number":213,"context_line":"    Limit(\"GET\", \"*changes-since*\", \".*changes-since.*\", 3, PER_MINUTE),"},{"line_number":214,"context_line":"    Limit(\"DELETE\", \"*\", \".*\", 100, PER_MINUTE),"},{"line_number":215,"context_line":"    Limit(\"GET\", \"*/os-fping\", \"^/os-fping\", 12, PER_HOUR),"},{"line_number":216,"context_line":"]"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMH%2F%2F8z0%3D","line":215,"updated":"2012-11-14 16:52:41.000000000","message":"I have to point out that this is a very different rule from:\n\n    Limit(\"GET\", \"*/os-fping\", \"^/os-fping\", 1, 5 * PER_MINUTE),\n\nThe one you have allows someone to issue 12 fping requests immediately, but then they have to wait an hour before they can issue any more.  In contrast, the one I suggested only allows 1 fping per 5 minutes.\n\nThat said, I think I\u0027m OK with this rate for now…","commit_id":"a220aa15b056914df1b9debc95322d01a0e408e8"}],"nova/tests/policy.json":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"5aeb5fa7e29da81cd715c880e9a04bb8de3f1b4c","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    \"compute_extension:floating_ip_pools\": \"\","},{"line_number":106,"context_line":"    \"compute_extension:floating_ips\": \"\","},{"line_number":107,"context_line":"    \"compute_extension:fping\": \"\","},{"line_number":108,"context_line":"    \"compute_extension:fping:all_tenants\": \"is_admin:True\","},{"line_number":109,"context_line":"    \"compute_extension:hosts\": \"\","},{"line_number":110,"context_line":"    \"compute_extension:hypervisors\": \"\","},{"line_number":111,"context_line":"    \"compute_extension:instance_usage_audit_log\": \"\","}],"source_content_type":"application/json","patch_set":5,"id":"AAAAMH%2F%2F%2FcA%3D","line":108,"updated":"2012-11-12 17:15:19.000000000","message":"For tests, you can set this to \"\".  In fact, I\u0027m surprised the tests passed with this rule in there.\n\n(For clarity, your etc/nova/policy.json looks correct to me.)","commit_id":"2f5151ca694ce3d0e833060a62c1cbf07d604262"},{"author":{"_account_id":1267,"name":"Alexei Ababilov","display_name":"Alexei Ababilov","email":"ilovegnulinux@gmail.com","username":"aababilov"},"change_message_id":"19be1e5ff5e718104e39bc97597950935c398932","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    \"compute_extension:floating_ip_pools\": \"\","},{"line_number":106,"context_line":"    \"compute_extension:floating_ips\": \"\","},{"line_number":107,"context_line":"    \"compute_extension:fping\": \"\","},{"line_number":108,"context_line":"    \"compute_extension:fping:all_tenants\": \"is_admin:True\","},{"line_number":109,"context_line":"    \"compute_extension:hosts\": \"\","},{"line_number":110,"context_line":"    \"compute_extension:hypervisors\": \"\","},{"line_number":111,"context_line":"    \"compute_extension:instance_usage_audit_log\": \"\","}],"source_content_type":"application/json","patch_set":5,"id":"AAAAMH%2F%2F%2Bns%3D","line":108,"in_reply_to":"AAAAMH%2F%2F%2FcA%3D","updated":"2012-11-13 09:52:44.000000000","message":"The thing is that I tested this policy itself. I set is_admin \u003d True in \nnova/tests/api/openstack/compute/contrib/test_fping.py:65 and checked that adminness is necessary for `all_tenants` call indeed.","commit_id":"2f5151ca694ce3d0e833060a62c1cbf07d604262"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"48be0ce5c7a481f2dd22f0be3e0831069f474c86","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    \"compute_extension:floating_ip_pools\": \"\","},{"line_number":106,"context_line":"    \"compute_extension:floating_ips\": \"\","},{"line_number":107,"context_line":"    \"compute_extension:fping\": \"\","},{"line_number":108,"context_line":"    \"compute_extension:fping:all_tenants\": \"is_admin:True\","},{"line_number":109,"context_line":"    \"compute_extension:hosts\": \"\","},{"line_number":110,"context_line":"    \"compute_extension:hypervisors\": \"\","},{"line_number":111,"context_line":"    \"compute_extension:instance_usage_audit_log\": \"\","}],"source_content_type":"application/json","patch_set":6,"id":"AAAAMH%2F%2F%2BQA%3D","line":108,"updated":"2012-11-13 16:34:13.000000000","message":"OK, well, you shouldn\u0027t *need* to test that; the policies stuff is pretty thoroughly tested in the oslo-incubator (formerly openstack-common) tree, and I always highly encourage using unit tests for the bulk of testing, with just a small amount of functional testing.  (Not that most of the nova test suite is actually unit tests *sigh*).  Anyway, no big deal…","commit_id":"570f77e9b8ce351e7f38ca143c4ec5248dc7d35b"}]}
