sidekiq-debouncer 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +11 -2
- data/lib/sidekiq/debouncer/middleware/client.rb +10 -4
- data/lib/sidekiq/debouncer/middleware/server.rb +2 -9
- data/lib/sidekiq/debouncer/version.rb +1 -1
- data/sidekiq-debouncer.gemspec +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bab3413954e727ee13bc4d216f13621d1337df24f1ed970ecf146fae30501ef6
|
4
|
+
data.tar.gz: 883a815a2bb23e08abb175bf04f0231e028684d174c3d60bef6cc1450294764d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 254b6d10c2cf611d91e6971f9e21cc76964600ab951f718c88aa0d7eacb38fe3fccc4bd4f0e0f971d33e829e5a6ce0997d5c1a7a9886bc95e503a554b57e0241
|
7
|
+
data.tar.gz: 8d5877eec61fb2dbac4305db1815afc320306e0c1af78a872468a5a2218dd48f4b9f8a954e323e59aa3d088b783ae61cc14140a987c3f0785c80a3621c0dcbf7
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## Unreleased
|
2
|
+
|
3
|
+
## [2.0.2] - 2023-03-13
|
4
|
+
- support Sidekiq::Testing
|
5
|
+
|
6
|
+
## [2.0.1] - 2023-03-04
|
7
|
+
- don't remove debounce key in redis to avoid invalid debouncing
|
8
|
+
|
1
9
|
## [2.0.0] - 2023-02-28
|
2
10
|
Complete rewrite of the library:
|
3
11
|
- Instead of iterating through whole schedule set, sidekiq-debouncer will now cache debounce key in redis with a reference to the job.
|
data/README.md
CHANGED
@@ -88,8 +88,8 @@ Keep in mind that the result of the debounce method will be converted to string,
|
|
88
88
|
|
89
89
|
In the application, call `MyWorker.perform_async(...)` as usual. Everytime you call this function, `MyWorker`'s execution will be postponed by 5 minutes. After that time `MyWorker` will receive a method call `perform` with an array of arguments that were provided to the `MyWorker.perform_async(...)` calls.
|
90
90
|
|
91
|
-
To avoid keeping leftover keys in redis
|
92
|
-
It's
|
91
|
+
To avoid keeping leftover keys in redis, all additional keys are created with TTL.
|
92
|
+
It's 24 hours by default and should be ok in most of the cases. If you are debouncing your jobs in higher interval than that, you can overwrite this setting:
|
93
93
|
|
94
94
|
```ruby
|
95
95
|
Sidekiq.configure_client do |config|
|
@@ -103,6 +103,15 @@ end
|
|
103
103
|
|
104
104
|
In order to test the behavior of `sidekiq-debouncer` it is necessary to disable testing mode. It is the limitation of internal implementation.
|
105
105
|
|
106
|
+
Sidekiq::Debouncer will not debounce the jobs in testing mode, instead they'll be executed like normal jobs (pushed to fake queue or executed inline depending on settings).
|
107
|
+
Server middleware needs to be added to `Sidekiq::Testing` chain:
|
108
|
+
|
109
|
+
```ruby
|
110
|
+
Sidekiq::Testing.server_middleware do |chain|
|
111
|
+
chain.add Sidekiq::Debouncer::Middleware::Server
|
112
|
+
end
|
113
|
+
```
|
114
|
+
|
106
115
|
## License
|
107
116
|
|
108
117
|
MIT Licensed. See LICENSE.txt for details.
|
@@ -17,7 +17,7 @@ module Sidekiq
|
|
17
17
|
REDIS_ERROR_CLASS = defined?(RedisClient::CommandError) ? RedisClient::CommandError : Redis::CommandError
|
18
18
|
|
19
19
|
def initialize(options = {})
|
20
|
-
@debounce_key_ttl = options.fetch(:ttl, 60 * 60 * 24
|
20
|
+
@debounce_key_ttl = options.fetch(:ttl, 60 * 60 * 24) # 24 hours by default
|
21
21
|
end
|
22
22
|
|
23
23
|
def call(worker_class, job, _queue, _redis_pool)
|
@@ -28,9 +28,6 @@ module Sidekiq
|
|
28
28
|
return job if !klass.get_sidekiq_options["debounce"] || job["debounce_key"]
|
29
29
|
|
30
30
|
debounce(klass, job)
|
31
|
-
|
32
|
-
# prevent normal sidekiq flow
|
33
|
-
false
|
34
31
|
end
|
35
32
|
|
36
33
|
private
|
@@ -46,9 +43,14 @@ module Sidekiq
|
|
46
43
|
job["args"] = [job["args"]]
|
47
44
|
job.delete("debounce")
|
48
45
|
|
46
|
+
return job if testing?
|
47
|
+
|
49
48
|
redis do |connection|
|
50
49
|
redis_debounce(connection, keys: ["schedule", key], argv: [Sidekiq.dump_json(job), time, @debounce_key_ttl])
|
51
50
|
end
|
51
|
+
|
52
|
+
# prevent normal sidekiq flow
|
53
|
+
false
|
52
54
|
end
|
53
55
|
|
54
56
|
def debounce_key(klass, job, options)
|
@@ -79,6 +81,10 @@ module Sidekiq
|
|
79
81
|
retry
|
80
82
|
end
|
81
83
|
end
|
84
|
+
|
85
|
+
def testing?
|
86
|
+
defined?(Sidekiq::Testing) && Sidekiq::Testing.enabled?
|
87
|
+
end
|
82
88
|
end
|
83
89
|
end
|
84
90
|
end
|
@@ -3,20 +3,13 @@
|
|
3
3
|
module Sidekiq
|
4
4
|
module Debouncer
|
5
5
|
module Middleware
|
6
|
-
#
|
6
|
+
# wrap args into array because sidekiq uses splat while calling perform
|
7
7
|
class Server
|
8
8
|
include Sidekiq::ServerMiddleware
|
9
9
|
|
10
10
|
def call(_worker, job, _queue)
|
11
11
|
if job.key?("debounce_key")
|
12
|
-
|
13
|
-
unless job.key?("failed_at")
|
14
|
-
redis do |connection|
|
15
|
-
connection.call("DEL", job["debounce_key"])
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
job["args"] = [job["args"]] # wrap args into array because sidekiq uses splat while calling perform
|
12
|
+
job["args"] = [job["args"]]
|
20
13
|
end
|
21
14
|
|
22
15
|
yield
|
data/sidekiq-debouncer.gemspec
CHANGED
@@ -12,6 +12,7 @@ Gem::Specification.new do |gem|
|
|
12
12
|
gem.email = ["sebcioz@gmail.com", "kukicola@gmail.com"]
|
13
13
|
gem.summary = "Sidekiq extension that adds the ability to debounce job execution"
|
14
14
|
gem.description = <<~DESCRIPTION
|
15
|
+
Sidekiq extension that adds the ability to debounce job execution.
|
15
16
|
Worker will postpone its execution after `wait time` have elapsed since the last time it was invoked.
|
16
17
|
Useful for implementing behavior that should only happen after the input has stopped arriving.
|
17
18
|
DESCRIPTION
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-debouncer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Zuchmański
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
12
|
+
date: 2023-03-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sidekiq
|
@@ -102,6 +102,7 @@ dependencies:
|
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: 1.24.3
|
104
104
|
description: |
|
105
|
+
Sidekiq extension that adds the ability to debounce job execution.
|
105
106
|
Worker will postpone its execution after `wait time` have elapsed since the last time it was invoked.
|
106
107
|
Useful for implementing behavior that should only happen after the input has stopped arriving.
|
107
108
|
email:
|