async-limiter 1.3.0 → 1.5.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f0332a099a13957c6de625c09512af704eeaa2c513b5460bcf213315e21e120
4
- data.tar.gz: 6c3b884613ff5128c7443bd376ba6885c6d6b408c2be8e5e87a669ae1b232f5e
3
+ metadata.gz: 180ea4ebb784a29df337fe94e8190358482658fd07547ccaeaddc0974b271696
4
+ data.tar.gz: b02a1c5978f4b14e103852bbaa3685d8e1258b6d0190d1bb1e3c157a18b786e9
5
5
  SHA512:
6
- metadata.gz: 87d13bfea8dabd356cf7662dc79011c0e78584fb5f0e917a79669fecc1c1c23851978508eb431cf7dcac55edcabcfc781ddefbc3cc2ea85cf37b0edeffa23757
7
- data.tar.gz: 50789debe4ebef773acbacf47c76ae799ac418fe0ea69695a250fed60027fdc119c0c6c895b205a70edb3c950571a9fc07ea11ba1a0691f50b62f6141d6bd5cb
6
+ metadata.gz: e0cd30fb437861e2077f1d15bd39a2bd9314ac64a7d48d2d303302a2c13c875cae02f042ad0d93531bf125475b62c1cc1b2e532279b044623f0b7b8765732bbb
7
+ data.tar.gz: abd67afa695c11d045f176cf5371046238050f951626cc5bc2f2b10a484ff567cd63e26ceb8b9896fb052b55682081d9bc421e9d6e489cdbc34c68fee38bc922
@@ -30,8 +30,10 @@ module Async
30
30
  end
31
31
  end
32
32
 
33
- def sync(*queue_args, &block)
34
- acquire(*queue_args, &block)
33
+ def sync(*queue_args)
34
+ acquire(*queue_args) do
35
+ yield(@parent || Task.current)
36
+ end
35
37
  end
36
38
 
37
39
  def acquire(*queue_args)
@@ -27,8 +27,10 @@ module Async
27
27
  end
28
28
  end
29
29
 
30
- def sync(*queue_args, &block)
31
- acquire(*queue_args, &block)
30
+ def sync(*queue_args)
31
+ acquire(*queue_args) do
32
+ yield(@parent || Task.current)
33
+ end
32
34
  end
33
35
 
34
36
  def acquire
@@ -1,5 +1,5 @@
1
1
  module Async
2
2
  module Limiter
3
- VERSION = "1.3.0"
3
+ VERSION = "1.5.2"
4
4
  end
5
5
  end
@@ -25,7 +25,7 @@ module Async
25
25
  @lock = lock
26
26
 
27
27
  @waiting = queue
28
- @scheduler_task = nil
28
+ @scheduler = nil
29
29
 
30
30
  @window_frame_start_time = NULL_TIME
31
31
  @window_start_time = NULL_TIME
@@ -56,8 +56,10 @@ module Async
56
56
  end
57
57
  end
58
58
 
59
- def sync(*queue_args, &block)
60
- acquire(*queue_args, &block)
59
+ def sync(*queue_args)
60
+ acquire(*queue_args) do
61
+ yield Task.current
62
+ end
61
63
  end
62
64
 
63
65
  def acquire(*queue_args)
@@ -168,34 +170,38 @@ module Async
168
170
  end
169
171
 
170
172
  def schedule?
171
- @scheduler_task.nil? &&
173
+ @scheduler.nil? &&
172
174
  @waiting.any? &&
173
175
  !limit_blocking?
174
176
  end
175
177
 
176
178
  # Schedule resuming waiting tasks.
177
179
  def schedule(parent: @parent || Task.current)
178
- @scheduler_task ||=
179
- parent.async { |task|
180
- while @waiting.any? && !limit_blocking?
181
- delay = [next_acquire_time - Async::Clock.now, 0].max
182
- task.sleep(delay) if delay.positive?
183
- resume_waiting
184
- end
180
+ return @scheduler if @scheduler
181
+
182
+ parent.async(transient: true) do |task|
183
+ @scheduler = task
184
+ task.annotate("scheduling tasks for #{self.class}.")
185
185
 
186
- @scheduler_task = nil
187
- }
186
+ while @waiting.any? && !limit_blocking?
187
+ delay = [next_acquire_time - Clock.now, 0].max
188
+ task.sleep(delay) if delay.positive?
189
+ resume_waiting
190
+ end
191
+ ensure
192
+ @scheduler = nil
193
+ end
188
194
  end
189
195
 
190
196
  def reschedule?
191
- @scheduler_task &&
197
+ @scheduler &&
192
198
  @waiting.any? &&
193
199
  !limit_blocking?
194
200
  end
195
201
 
196
202
  def reschedule
197
- @scheduler_task.stop
198
- @scheduler_task = nil
203
+ @scheduler.stop
204
+ @scheduler = nil
199
205
 
200
206
  schedule
201
207
  end
@@ -4,14 +4,15 @@ module Async
4
4
  module Limiter
5
5
  class Window
6
6
  class Continuous < Window
7
- def initialize(limit = 1, window: 1, parent: nil, lock: true)
7
+ def initialize(limit = 1, window: 1, parent: nil, lock: true, queue: [])
8
8
  super(
9
9
  limit,
10
10
  type: :sliding, # type doesn't matter, but sliding is less work
11
11
  burstable: false,
12
12
  window: window,
13
13
  parent: parent,
14
- lock: lock
14
+ lock: lock,
15
+ queue: queue
15
16
  )
16
17
  end
17
18
  end
@@ -4,14 +4,15 @@ module Async
4
4
  module Limiter
5
5
  class Window
6
6
  class Fixed < Window
7
- def initialize(limit = 1, window: 1, parent: nil, lock: true)
7
+ def initialize(limit = 1, window: 1, parent: nil, lock: true, queue: [])
8
8
  super(
9
9
  limit,
10
10
  type: :fixed,
11
11
  burstable: true,
12
12
  window: window,
13
13
  parent: parent,
14
- lock: lock
14
+ lock: lock,
15
+ queue: queue
15
16
  )
16
17
  end
17
18
  end
@@ -4,14 +4,15 @@ module Async
4
4
  module Limiter
5
5
  class Window
6
6
  class Sliding < Window
7
- def initialize(limit = 1, window: 1, parent: nil, lock: true)
7
+ def initialize(limit = 1, window: 1, parent: nil, lock: true, queue: [])
8
8
  super(
9
9
  limit,
10
10
  type: :sliding,
11
11
  burstable: true,
12
12
  window: window,
13
13
  parent: parent,
14
- lock: lock
14
+ lock: lock,
15
+ queue: queue
15
16
  )
16
17
  end
17
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-limiter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno Sutic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-11 00:00:00.000000000 Z
11
+ date: 2021-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async
@@ -16,70 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.26'
19
+ version: '1.27'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.26'
26
+ version: '1.27'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: async-rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.14'
33
+ version: '1.15'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.14'
40
+ version: '1.15'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.9'
47
+ version: '3.10'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.9'
54
+ version: '3.10'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rubocop-rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.43'
61
+ version: '2.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.43'
68
+ version: '2.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: standard
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.7'
75
+ version: '0.9'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.7'
82
+ version: '0.9'
83
83
  description:
84
84
  email: code@brunosutic.com
85
85
  executables: []
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
114
  - !ruby/object:Gem::Version
115
115
  version: '0'
116
116
  requirements: []
117
- rubygems_version: 3.2.0.rc.1
117
+ rubygems_version: 3.2.3
118
118
  signing_key:
119
119
  specification_version: 4
120
120
  summary: Async limiters