Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Python API: Fix ratelimit #1924

Merged
merged 1 commit into from
Nov 21, 2019
Merged

Python API: Fix ratelimit #1924

merged 1 commit into from
Nov 21, 2019

Conversation

AymericDu
Copy link
Member

SUMMARY

Fix ratelimit

ISSUE TYPE
  • Bugfix Pull Request
COMPONENT NAME
  • Python API
SDS VERSION
openio 4.8.2.dev6
ADDITIONAL INFORMATION

Before:

loop 1:    run_time = now
loop 1:
loop 1:    run_time' = run_time + time_per_request
loop 1: -> run_time' = now + time_per_request

loop 2:    now' >= now
loop 2:
loop 2: To verify
loop 2:    run_time' - now' > time_per_request
loop 2: -> now + time_per_request - now' > time_per_request
loop 2: -> now - now' > 0
loop 2: -> now > now'
loop 2: => impossible: now' >= now
loop 2: => never sleep
loop 2:
loop 2:    run_time'' = run_time' + time_per_request
loop 2: -> run_time'' = now + time_per_request + time_per_request
loop 2: -> run_time'' = now + (2 * time_per_request)

loop 3:    now'' >= now'
loop 3: -> now'' >= now' >= now
loop 3:
loop 3: To verify
loop 3:    run_time'' - now'' > time_per_request
loop 3: -> now + (2 * time_per_request) - now'' > time_per_request
loop 3: -> now + time_per_request - now'' > 0
loop 3: -> now + time_per_request > now''
loop 3: => possible: now'' >= now' >= now
loop 3: => maybe sleep
loop 3:
loop 3:    run_time''' = run_time'' + time_per_request
loop 3: -> run_time''' = now + (2 * time_per_request) + time_per_request
loop 3: -> run_time''' = now + (3 * time_per_request)

loop 4:    now''' >= now'' + (run_time'' - now'')  # now'' + "sleep time"
loop 4: -> now''' >= run_time''
loop 4:
loop 4: To verify
loop 4:    run_time''' - now''' > time_per_request
loop 4: -> run_time'' + time_per_request - now''' > time_per_request
loop 4: -> run_time'' - now''' > 0 (hors now''' >= run_time'')
loop 4: -> run_time'' > now'''
loop 4: => impossible: now''' >= run_time''
loop 4: => never sleep
loop 4:
loop 4:    run_time'''' = run_time''' + time_per_request

etc.
>>> from oio.common.green import ratelimit, time
>>> items_run_time = 0
>>> while True:
...    items_run_time = ratelimit(items_run_time, 1)
...    print(time.time())
...
1573838622.18
1573838622.18
1573838624.18
1573838624.18
1573838626.18
1573838626.18
1573838628.18
1573838628.18

After:

loop 1:    run_time = now
loop 1:
loop 1:    run_time' = run_time + time_per_request
loop 1: -> run_time' = now + time_per_request

loop 2:    now' >= now
loop 2:
loop 2: To verify
loop 2:    run_time' - now' > 0
loop 2: -> now + time_per_request - now' > 0
loop 2: -> now + time_per_request > now'
loop 2: => possible: now' >= now
loop 2: => maybe sleep
loop 2:
loop 2:    run_time'' = run_time' + time_per_request
loop 2: -> run_time'' = now + time_per_request + time_per_request
loop 2: -> run_time'' = now + (2 * time_per_request)

loop 3:    now'' >= now' + (run_time' - now')  # now' + "sleep time"
loop 3: -> now'' >= run_time'
loop 3: -> now'' >= now + time_per_request
loop 3:
loop 3: To verify
loop 3:    run_time'' - now'' > 0
loop 3: -> now + (2 * time_per_request) > now''
loop 3: => possible: now'' >= now + time_per_request
loop 3: => maybe sleep
loop 3:
loop 3:    run_time''' = run_time'' + time_per_request
loop 3: -> run_time''' = now + (2 * time_per_request) + time_per_request
loop 3: -> run_time''' = now + (3 * time_per_request)

loop 4:    now''' >= now'' + (run_time'' - now'')  # now'' + "sleep time"
loop 4: -> now''' >= run_time''
loop 4: -> now''' >= now + (2 * time_per_request)
loop 4:
loop 4: To verify
loop 4:    run_time''' - now''' > 0
loop 4: -> now + (3 * time_per_request) > now'''
loop 4: => possible: now''' >= now + (2 * time_per_request)
loop 4: => maybe sleep
loop 4:
loop 4:    run_time'''' = run_time''' + time_per_request

etc.
>>> from oio.common.green import ratelimit, time
>>> items_run_time = 0
>>> while True:
...    items_run_time = ratelimit(items_run_time, 1)
...    print(time.time())
...
1573838486.79
1573838487.8
1573838488.8
1573838489.8
1573838490.8
1573838491.8
1573838492.8
1573838493.8

Before:
```
loop 1:    run_time = now
loop 1:
loop 1:    run_time' = run_time + time_per_request
loop 1: -> run_time' = now + time_per_request

loop 2:    now' >= now
loop 2:
loop 2: To verify
loop 2:    run_time' - now' > time_per_request
loop 2: -> now + time_per_request - now' > time_per_request
loop 2: -> now - now' > 0
loop 2: -> now > now'
loop 2: => impossible: now' >= now
loop 2: => never sleep
loop 2:
loop 2:    run_time'' = run_time' + time_per_request
loop 2: -> run_time'' = now + time_per_request + time_per_request
loop 2: -> run_time'' = now + (2 * time_per_request)

loop 3:    now'' >= now'
loop 3: -> now'' >= now' >= now
loop 3:
loop 3: To verify
loop 3:    run_time'' - now'' > time_per_request
loop 3: -> now + (2 * time_per_request) - now'' > time_per_request
loop 3: -> now + time_per_request - now'' > 0
loop 3: -> now + time_per_request > now''
loop 3: => possible: now'' >= now' >= now
loop 3: => maybe sleep
loop 3:
loop 3:    run_time''' = run_time'' + time_per_request
loop 3: -> run_time''' = now + (2 * time_per_request) + time_per_request
loop 3: -> run_time''' = now + (3 * time_per_request)

loop 4:    now''' >= now'' + (run_time'' - now'')  # now'' + "sleep time"
loop 4: -> now''' >= run_time''
loop 4:
loop 4: To verify
loop 4:    run_time''' - now''' > time_per_request
loop 4: -> run_time'' + time_per_request - now''' > time_per_request
loop 4: -> run_time'' - now''' > 0 (hors now''' >= run_time'')
loop 4: -> run_time'' > now'''
loop 4: => impossible: now''' >= run_time''
loop 4: => never sleep
loop 4:
loop 4:    run_time'''' = run_time''' + time_per_request

etc.
```
```
>>> from oio.common.green import ratelimit, time
>>> items_run_time = 0
>>> while True:
...    items_run_time = ratelimit(items_run_time, 1)
...    print(time.time())
...
1573838622.18
1573838622.18
1573838624.18
1573838624.18
1573838626.18
1573838626.18
1573838628.18
1573838628.18
```

After:
```
loop 1:    run_time = now
loop 1:
loop 1:    run_time' = run_time + time_per_request
loop 1: -> run_time' = now + time_per_request

loop 2:    now' >= now
loop 2:
loop 2: To verify
loop 2:    run_time' - now' > 0
loop 2: -> now + time_per_request - now' > 0
loop 2: -> now + time_per_request > now'
loop 2: => possible: now' >= now
loop 2: => maybe sleep
loop 2:
loop 2:    run_time'' = run_time' + time_per_request
loop 2: -> run_time'' = now + time_per_request + time_per_request
loop 2: -> run_time'' = now + (2 * time_per_request)

loop 3:    now'' >= now' + (run_time' - now')  # now' + "sleep time"
loop 3: -> now'' >= run_time'
loop 3: -> now'' >= now + time_per_request
loop 3:
loop 3: To verify
loop 3:    run_time'' - now'' > 0
loop 3: -> now + (2 * time_per_request) > now''
loop 3: => possible: now'' >= now + time_per_request
loop 3: => maybe sleep
loop 3:
loop 3:    run_time''' = run_time'' + time_per_request
loop 3: -> run_time''' = now + (2 * time_per_request) + time_per_request
loop 3: -> run_time''' = now + (3 * time_per_request)

loop 4:    now''' >= now'' + (run_time'' - now'')  # now'' + "sleep time"
loop 4: -> now''' >= run_time''
loop 4: -> now''' >= now + (2 * time_per_request)
loop 4:
loop 4: To verify
loop 4:    run_time''' - now''' > 0
loop 4: -> now + (3 * time_per_request) > now'''
loop 4: => possible: now''' >= now + (2 * time_per_request)
loop 4: => maybe sleep
loop 4:
loop 4:    run_time'''' = run_time''' + time_per_request

etc.
```
```
>>> from oio.common.green import ratelimit, time
>>> items_run_time = 0
>>> while True:
...    items_run_time = ratelimit(items_run_time, 1)
...    print(time.time())
...
1573838486.79
1573838487.8
1573838488.8
1573838489.8
1573838490.8
1573838491.8
1573838492.8
1573838493.8
```
@codecov-io
Copy link

codecov-io commented Nov 15, 2019

Codecov Report

Merging #1924 into 4.x will decrease coverage by 0.03%.
The diff coverage is 100%.

Impacted file tree graph

@@            Coverage Diff             @@
##              4.x    #1924      +/-   ##
==========================================
- Coverage   80.63%   80.61%   -0.02%     
==========================================
  Files         374      375       +1     
  Lines       70448    70492      +44     
  Branches     7020     7023       +3     
==========================================
+ Hits        56801    56818      +17     
- Misses      13525    13540      +15     
- Partials      122      134      +12
Impacted Files Coverage Δ
oio/common/green.py 95.75% <100%> (ø) ⬆️
tests/functional/rdir/test_indexer.py 84.95% <0%> (-7.52%) ⬇️
meta2v2/meta2_filters_check.c 70.5% <0%> (-3.27%) ⬇️
metautils/lib/utils_hashstr.c 79.63% <0%> (-1.85%) ⬇️
meta1v2/meta1_server.c 69.92% <0%> (-1.62%) ⬇️
metautils/lib/utils_addr_info.c 57.34% <0%> (-1.33%) ⬇️
resolver/hc_resolver.c 91.62% <0%> (-1.24%) ⬇️
meta1v2/meta1_prefixes.c 78.87% <0%> (-1.03%) ⬇️
meta1v2/meta1_backend_internals.c 74.79% <0%> (-0.84%) ⬇️
tests/functional/audit/test_audit_storage.py 87% <0%> (-0.81%) ⬇️
... and 27 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f57feb0...2284e3f. Read the comment docs.

@fvennetier fvennetier merged commit ce8307f into open-io:4.x Nov 21, 2019
@AymericDu AymericDu deleted the fix-ratelimit branch November 26, 2019 14:34
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants