Sane rest API rate limit defaults

The previous rate limit defaults were unusable in any deployment.
Rate limiting to 10 POSTS per minute and 50 servers per day seems
to low, especially when we can use quotas to actually limit the amount
of resources a user can consume.

Update docstring to explain what the rate limiting is used for.

Fixes bug 1178529

DocImpact changed default values

Change-Id: I8cc93423f76d9b0a5135adf69babc4ff355a0951
This commit is contained in:
Joe Gordon 2013-06-27 10:49:50 -07:00
parent 5073504642
commit 827c2d30b8
14 changed files with 132 additions and 121 deletions

View File

@ -18,23 +18,23 @@
"limit": [ "limit": [
{ {
"next-available": "2012-11-27T17:22:18Z", "next-available": "2012-11-27T17:22:18Z",
"remaining": 10, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 10, "value": 120,
"verb": "POST" "verb": "POST"
}, },
{ {
"next-available": "2012-11-27T17:22:18Z", "next-available": "2012-11-27T17:22:18Z",
"remaining": 10, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 10, "value": 120,
"verb": "PUT" "verb": "PUT"
}, },
{ {
"next-available": "2012-11-27T17:22:18Z", "next-available": "2012-11-27T17:22:18Z",
"remaining": 100, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 100, "value": 120,
"verb": "DELETE" "verb": "DELETE"
} }
], ],
@ -45,9 +45,9 @@
"limit": [ "limit": [
{ {
"next-available": "2012-11-27T17:22:18Z", "next-available": "2012-11-27T17:22:18Z",
"remaining": 50, "remaining": 120,
"unit": "DAY", "unit": "MINUTE",
"value": 50, "value": 120,
"verb": "POST" "verb": "POST"
} }
], ],
@ -58,9 +58,9 @@
"limit": [ "limit": [
{ {
"next-available": "2012-11-27T17:22:18Z", "next-available": "2012-11-27T17:22:18Z",
"remaining": 3, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 3, "value": 120,
"verb": "GET" "verb": "GET"
} }
], ],
@ -72,7 +72,7 @@
{ {
"next-available": "2012-11-27T17:22:18Z", "next-available": "2012-11-27T17:22:18Z",
"remaining": 12, "remaining": 12,
"unit": "HOUR", "unit": "MINUTE",
"value": 12, "value": 12,
"verb": "GET" "verb": "GET"
} }

View File

@ -2,18 +2,18 @@
<limits xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/common/api/v1.0"> <limits xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/common/api/v1.0">
<rates> <rates>
<rate regex=".*" uri="*"> <rate regex=".*" uri="*">
<limit next-available="2012-11-27T17:22:18Z" unit="MINUTE" verb="POST" remaining="10" value="10"/> <limit next-available="2012-11-27T17:22:18Z" unit="MINUTE" verb="POST" remaining="120" value="120"/>
<limit next-available="2012-11-27T17:22:18Z" unit="MINUTE" verb="PUT" remaining="10" value="10"/> <limit next-available="2012-11-27T17:22:18Z" unit="MINUTE" verb="PUT" remaining="120" value="120"/>
<limit next-available="2012-11-27T17:22:18Z" unit="MINUTE" verb="DELETE" remaining="100" value="100"/> <limit next-available="2012-11-27T17:22:18Z" unit="MINUTE" verb="DELETE" remaining="120" value="120"/>
</rate> </rate>
<rate regex="^/servers" uri="*/servers"> <rate regex="^/servers" uri="*/servers">
<limit next-available="2012-11-27T17:22:18Z" unit="DAY" verb="POST" remaining="50" value="50"/> <limit next-available="2012-11-27T17:22:18Z" unit="MINUTE" verb="POST" remaining="120" value="120"/>
</rate> </rate>
<rate regex=".*changes-since.*" uri="*changes-since*"> <rate regex=".*changes-since.*" uri="*changes-since*">
<limit next-available="2012-11-27T17:22:18Z" unit="MINUTE" verb="GET" remaining="3" value="3"/> <limit next-available="2012-11-27T17:22:18Z" unit="MINUTE" verb="GET" remaining="120" value="120"/>
</rate> </rate>
<rate regex="^/os-fping" uri="*/os-fping"> <rate regex="^/os-fping" uri="*/os-fping">
<limit next-available="2012-11-27T17:22:18Z" unit="HOUR" verb="GET" remaining="12" value="12"/> <limit next-available="2012-11-27T17:22:18Z" unit="MINUTE" verb="GET" remaining="12" value="12"/>
</rate> </rate>
</rates> </rates>
<absolute> <absolute>

View File

@ -23,23 +23,23 @@
"limit": [ "limit": [
{ {
"next-available": "2012-11-27T17:24:52Z", "next-available": "2012-11-27T17:24:52Z",
"remaining": 10, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 10, "value": 120,
"verb": "POST" "verb": "POST"
}, },
{ {
"next-available": "2012-11-27T17:24:52Z", "next-available": "2012-11-27T17:24:52Z",
"remaining": 10, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 10, "value": 120,
"verb": "PUT" "verb": "PUT"
}, },
{ {
"next-available": "2012-11-27T17:24:52Z", "next-available": "2012-11-27T17:24:52Z",
"remaining": 100, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 100, "value": 120,
"verb": "DELETE" "verb": "DELETE"
} }
], ],
@ -50,9 +50,9 @@
"limit": [ "limit": [
{ {
"next-available": "2012-11-27T17:24:52Z", "next-available": "2012-11-27T17:24:52Z",
"remaining": 50, "remaining": 120,
"unit": "DAY", "unit": "MINUTE",
"value": 50, "value": 120,
"verb": "POST" "verb": "POST"
} }
], ],
@ -63,9 +63,9 @@
"limit": [ "limit": [
{ {
"next-available": "2012-11-27T17:24:52Z", "next-available": "2012-11-27T17:24:52Z",
"remaining": 3, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 3, "value": 120,
"verb": "GET" "verb": "GET"
} }
], ],
@ -77,7 +77,7 @@
{ {
"next-available": "2012-11-27T17:24:52Z", "next-available": "2012-11-27T17:24:52Z",
"remaining": 12, "remaining": 12,
"unit": "HOUR", "unit": "MINUTE",
"value": 12, "value": 12,
"verb": "GET" "verb": "GET"
} }

View File

@ -2,18 +2,18 @@
<limits xmlns:os-used-limits="http://docs.openstack.org/compute/ext/used_limits/api/v1.1" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/common/api/v1.0"> <limits xmlns:os-used-limits="http://docs.openstack.org/compute/ext/used_limits/api/v1.1" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/common/api/v1.0">
<rates> <rates>
<rate regex=".*" uri="*"> <rate regex=".*" uri="*">
<limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="POST" remaining="10" value="10"/> <limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="POST" remaining="120" value="120"/>
<limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="PUT" remaining="10" value="10"/> <limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="PUT" remaining="120" value="120"/>
<limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="DELETE" remaining="100" value="100"/> <limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="DELETE" remaining="120" value="120"/>
</rate> </rate>
<rate regex="^/servers" uri="*/servers"> <rate regex="^/servers" uri="*/servers">
<limit next-available="2012-11-27T17:24:53Z" unit="DAY" verb="POST" remaining="50" value="50"/> <limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="POST" remaining="120" value="120"/>
</rate> </rate>
<rate regex=".*changes-since.*" uri="*changes-since*"> <rate regex=".*changes-since.*" uri="*changes-since*">
<limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="GET" remaining="3" value="3"/> <limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="GET" remaining="120" value="120"/>
</rate> </rate>
<rate regex="^/os-fping" uri="*/os-fping"> <rate regex="^/os-fping" uri="*/os-fping">
<limit next-available="2012-11-27T17:24:53Z" unit="HOUR" verb="GET" remaining="12" value="12"/> <limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="GET" remaining="12" value="12"/>
</rate> </rate>
</rates> </rates>
<absolute> <absolute>

View File

@ -23,23 +23,23 @@
"limit": [ "limit": [
{ {
"next-available": "2012-11-27T17:24:52Z", "next-available": "2012-11-27T17:24:52Z",
"remaining": 10, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 10, "value": 120,
"verb": "POST" "verb": "POST"
}, },
{ {
"next-available": "2012-11-27T17:24:52Z", "next-available": "2012-11-27T17:24:52Z",
"remaining": 10, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 10, "value": 120,
"verb": "PUT" "verb": "PUT"
}, },
{ {
"next-available": "2012-11-27T17:24:52Z", "next-available": "2012-11-27T17:24:52Z",
"remaining": 100, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 100, "value": 120,
"verb": "DELETE" "verb": "DELETE"
} }
], ],
@ -50,9 +50,9 @@
"limit": [ "limit": [
{ {
"next-available": "2012-11-27T17:24:52Z", "next-available": "2012-11-27T17:24:52Z",
"remaining": 50, "remaining": 120,
"unit": "DAY", "unit": "MINUTE",
"value": 50, "value": 120,
"verb": "POST" "verb": "POST"
} }
], ],
@ -63,9 +63,9 @@
"limit": [ "limit": [
{ {
"next-available": "2012-11-27T17:24:52Z", "next-available": "2012-11-27T17:24:52Z",
"remaining": 3, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 3, "value": 120,
"verb": "GET" "verb": "GET"
} }
], ],
@ -77,7 +77,7 @@
{ {
"next-available": "2012-11-27T17:24:52Z", "next-available": "2012-11-27T17:24:52Z",
"remaining": 12, "remaining": 12,
"unit": "HOUR", "unit": "MINUTE",
"value": 12, "value": 12,
"verb": "GET" "verb": "GET"
} }

View File

@ -2,18 +2,18 @@
<limits xmlns:os-used-limits="http://docs.openstack.org/compute/ext/used_limits/api/v1.1" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/common/api/v1.0"> <limits xmlns:os-used-limits="http://docs.openstack.org/compute/ext/used_limits/api/v1.1" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/common/api/v1.0">
<rates> <rates>
<rate regex=".*" uri="*"> <rate regex=".*" uri="*">
<limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="POST" remaining="10" value="10"/> <limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="POST" remaining="120" value="120"/>
<limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="PUT" remaining="10" value="10"/> <limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="PUT" remaining="120" value="120"/>
<limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="DELETE" remaining="100" value="100"/> <limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="DELETE" remaining="120" value="120"/>
</rate> </rate>
<rate regex="^/servers" uri="*/servers"> <rate regex="^/servers" uri="*/servers">
<limit next-available="2012-11-27T17:24:53Z" unit="DAY" verb="POST" remaining="50" value="50"/> <limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="POST" remaining="120" value="120"/>
</rate> </rate>
<rate regex=".*changes-since.*" uri="*changes-since*"> <rate regex=".*changes-since.*" uri="*changes-since*">
<limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="GET" remaining="3" value="3"/> <limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="GET" remaining="120" value="120"/>
</rate> </rate>
<rate regex="^/os-fping" uri="*/os-fping"> <rate regex="^/os-fping" uri="*/os-fping">
<limit next-available="2012-11-27T17:24:53Z" unit="HOUR" verb="GET" remaining="12" value="12"/> <limit next-available="2012-11-27T17:24:53Z" unit="MINUTE" verb="GET" remaining="12" value="12"/>
</rate> </rate>
</rates> </rates>
<absolute> <absolute>

View File

@ -31,7 +31,7 @@ from nova import wsgi
auth_opts = [ auth_opts = [
cfg.BoolOpt('api_rate_limit', cfg.BoolOpt('api_rate_limit',
default=True, default=True,
help='whether to rate limit the api'), help='whether to use per-user rate limiting for the api.'),
cfg.StrOpt('auth_strategy', cfg.StrOpt('auth_strategy',
default='noauth', default='noauth',
help='The strategy to use for auth: noauth or keystone.'), help='The strategy to use for auth: noauth or keystone.'),

View File

@ -15,6 +15,17 @@
""" """
Module dedicated functions/classes dealing with rate limiting requests. Module dedicated functions/classes dealing with rate limiting requests.
This module handles rate liming at a per-user level, so it should not be used
to prevent intentional Denial of Service attacks, as we can assume a DOS can
easily come through multiple user accounts. DOS protection should be done at a
different layer. Instead this module should be used to protect against
unintentional user actions. With that in mind the limits set here should be
high enough as to not rate-limit any intentional actions.
To find good rate-limit values, check how long requests are taking (see logs)
in your environment to assess your capabilities and multiply out to get
figures.
""" """
import collections import collections
@ -210,13 +221,13 @@ class Limit(object):
# a regular-expression to match, value and unit of measure (PER_DAY, etc.) # a regular-expression to match, value and unit of measure (PER_DAY, etc.)
DEFAULT_LIMITS = [ DEFAULT_LIMITS = [
Limit("POST", "*", ".*", 10, utils.TIME_UNITS['MINUTE']), Limit("POST", "*", ".*", 120, utils.TIME_UNITS['MINUTE']),
Limit("POST", "*/servers", "^/servers", 50, utils.TIME_UNITS['DAY']), Limit("POST", "*/servers", "^/servers", 120, utils.TIME_UNITS['MINUTE']),
Limit("PUT", "*", ".*", 10, utils.TIME_UNITS['MINUTE']), Limit("PUT", "*", ".*", 120, utils.TIME_UNITS['MINUTE']),
Limit("GET", "*changes-since*", ".*changes-since.*", 3, Limit("GET", "*changes-since*", ".*changes-since.*", 120,
utils.TIME_UNITS['MINUTE']), utils.TIME_UNITS['MINUTE']),
Limit("DELETE", "*", ".*", 100, utils.TIME_UNITS['MINUTE']), Limit("DELETE", "*", ".*", 120, utils.TIME_UNITS['MINUTE']),
Limit("GET", "*/os-fping", "^/os-fping", 12, utils.TIME_UNITS['HOUR']), Limit("GET", "*/os-fping", "^/os-fping", 12, utils.TIME_UNITS['MINUTE']),
] ]

View File

@ -18,23 +18,23 @@
"limit": [ "limit": [
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 10, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 10, "value": 120,
"verb": "POST" "verb": "POST"
}, },
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 10, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 10, "value": 120,
"verb": "PUT" "verb": "PUT"
}, },
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 100, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 100, "value": 120,
"verb": "DELETE" "verb": "DELETE"
} }
], ],
@ -45,9 +45,9 @@
"limit": [ "limit": [
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 50, "remaining": 120,
"unit": "DAY", "unit": "MINUTE",
"value": 50, "value": 120,
"verb": "POST" "verb": "POST"
} }
], ],
@ -58,9 +58,9 @@
"limit": [ "limit": [
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 3, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 3, "value": 120,
"verb": "GET" "verb": "GET"
} }
], ],
@ -72,7 +72,7 @@
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 12, "remaining": 12,
"unit": "HOUR", "unit": "MINUTE",
"value": 12, "value": 12,
"verb": "GET" "verb": "GET"
} }

View File

@ -2,18 +2,18 @@
<limits xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/common/api/v1.0"> <limits xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/common/api/v1.0">
<rates> <rates>
<rate regex=".*" uri="*"> <rate regex=".*" uri="*">
<limit next-available="%(timestamp)s" unit="MINUTE" verb="POST" remaining="10" value="10"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="POST" remaining="120" value="120"/>
<limit next-available="%(timestamp)s" unit="MINUTE" verb="PUT" remaining="10" value="10"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="PUT" remaining="120" value="120"/>
<limit next-available="%(timestamp)s" unit="MINUTE" verb="DELETE" remaining="100" value="100"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="DELETE" remaining="120" value="120"/>
</rate> </rate>
<rate regex="^/servers" uri="*/servers"> <rate regex="^/servers" uri="*/servers">
<limit next-available="%(timestamp)s" unit="DAY" verb="POST" remaining="50" value="50"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="POST" remaining="120" value="120"/>
</rate> </rate>
<rate regex=".*changes-since.*" uri="*changes-since*"> <rate regex=".*changes-since.*" uri="*changes-since*">
<limit next-available="%(timestamp)s" unit="MINUTE" verb="GET" remaining="3" value="3"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="GET" remaining="120" value="120"/>
</rate> </rate>
<rate regex="^/os-fping" uri="*/os-fping"> <rate regex="^/os-fping" uri="*/os-fping">
<limit next-available="%(timestamp)s" unit="HOUR" verb="GET" remaining="12" value="12"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="GET" remaining="12" value="12"/>
</rate> </rate>
</rates> </rates>
<absolute> <absolute>

View File

@ -23,23 +23,23 @@
"limit": [ "limit": [
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 10, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 10, "value": 120,
"verb": "POST" "verb": "POST"
}, },
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 10, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 10, "value": 120,
"verb": "PUT" "verb": "PUT"
}, },
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 100, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 100, "value": 120,
"verb": "DELETE" "verb": "DELETE"
} }
], ],
@ -50,9 +50,9 @@
"limit": [ "limit": [
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 50, "remaining": 120,
"unit": "DAY", "unit": "MINUTE",
"value": 50, "value": 120,
"verb": "POST" "verb": "POST"
} }
], ],
@ -63,9 +63,9 @@
"limit": [ "limit": [
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 3, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 3, "value": 120,
"verb": "GET" "verb": "GET"
} }
], ],
@ -77,7 +77,7 @@
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 12, "remaining": 12,
"unit": "HOUR", "unit": "MINUTE",
"value": 12, "value": 12,
"verb": "GET" "verb": "GET"
} }

View File

@ -2,18 +2,18 @@
<limits xmlns:os-used-limits="http://docs.openstack.org/compute/ext/used_limits/api/v1.1" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/common/api/v1.0"> <limits xmlns:os-used-limits="http://docs.openstack.org/compute/ext/used_limits/api/v1.1" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/common/api/v1.0">
<rates> <rates>
<rate regex=".*" uri="*"> <rate regex=".*" uri="*">
<limit next-available="%(timestamp)s" unit="MINUTE" verb="POST" remaining="10" value="10"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="POST" remaining="120" value="120"/>
<limit next-available="%(timestamp)s" unit="MINUTE" verb="PUT" remaining="10" value="10"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="PUT" remaining="120" value="120"/>
<limit next-available="%(timestamp)s" unit="MINUTE" verb="DELETE" remaining="100" value="100"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="DELETE" remaining="120" value="120"/>
</rate> </rate>
<rate regex="^/servers" uri="*/servers"> <rate regex="^/servers" uri="*/servers">
<limit next-available="%(timestamp)s" unit="DAY" verb="POST" remaining="50" value="50"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="POST" remaining="120" value="120"/>
</rate> </rate>
<rate regex=".*changes-since.*" uri="*changes-since*"> <rate regex=".*changes-since.*" uri="*changes-since*">
<limit next-available="%(timestamp)s" unit="MINUTE" verb="GET" remaining="3" value="3"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="GET" remaining="120" value="120"/>
</rate> </rate>
<rate regex="^/os-fping" uri="*/os-fping"> <rate regex="^/os-fping" uri="*/os-fping">
<limit next-available="%(timestamp)s" unit="HOUR" verb="GET" remaining="12" value="12"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="GET" remaining="12" value="12"/>
</rate> </rate>
</rates> </rates>
<absolute> <absolute>

View File

@ -23,23 +23,23 @@
"limit": [ "limit": [
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 10, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 10, "value": 120,
"verb": "POST" "verb": "POST"
}, },
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 10, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 10, "value": 120,
"verb": "PUT" "verb": "PUT"
}, },
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 100, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 100, "value": 120,
"verb": "DELETE" "verb": "DELETE"
} }
], ],
@ -50,9 +50,9 @@
"limit": [ "limit": [
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 50, "remaining": 120,
"unit": "DAY", "unit": "MINUTE",
"value": 50, "value": 120,
"verb": "POST" "verb": "POST"
} }
], ],
@ -63,9 +63,9 @@
"limit": [ "limit": [
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 3, "remaining": 120,
"unit": "MINUTE", "unit": "MINUTE",
"value": 3, "value": 120,
"verb": "GET" "verb": "GET"
} }
], ],
@ -77,7 +77,7 @@
{ {
"next-available": "%(timestamp)s", "next-available": "%(timestamp)s",
"remaining": 12, "remaining": 12,
"unit": "HOUR", "unit": "MINUTE",
"value": 12, "value": 12,
"verb": "GET" "verb": "GET"
} }

View File

@ -2,18 +2,18 @@
<limits xmlns:os-used-limits="http://docs.openstack.org/compute/ext/used_limits/api/v1.1" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/common/api/v1.0"> <limits xmlns:os-used-limits="http://docs.openstack.org/compute/ext/used_limits/api/v1.1" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/common/api/v1.0">
<rates> <rates>
<rate regex=".*" uri="*"> <rate regex=".*" uri="*">
<limit next-available="%(timestamp)s" unit="MINUTE" verb="POST" remaining="10" value="10"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="POST" remaining="120" value="120"/>
<limit next-available="%(timestamp)s" unit="MINUTE" verb="PUT" remaining="10" value="10"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="PUT" remaining="120" value="120"/>
<limit next-available="%(timestamp)s" unit="MINUTE" verb="DELETE" remaining="100" value="100"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="DELETE" remaining="120" value="120"/>
</rate> </rate>
<rate regex="^/servers" uri="*/servers"> <rate regex="^/servers" uri="*/servers">
<limit next-available="%(timestamp)s" unit="DAY" verb="POST" remaining="50" value="50"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="POST" remaining="120" value="120"/>
</rate> </rate>
<rate regex=".*changes-since.*" uri="*changes-since*"> <rate regex=".*changes-since.*" uri="*changes-since*">
<limit next-available="%(timestamp)s" unit="MINUTE" verb="GET" remaining="3" value="3"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="GET" remaining="120" value="120"/>
</rate> </rate>
<rate regex="^/os-fping" uri="*/os-fping"> <rate regex="^/os-fping" uri="*/os-fping">
<limit next-available="%(timestamp)s" unit="HOUR" verb="GET" remaining="12" value="12"/> <limit next-available="%(timestamp)s" unit="MINUTE" verb="GET" remaining="12" value="12"/>
</rate> </rate>
</rates> </rates>
<absolute> <absolute>