beetle 0.3.4 → 0.3.5
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/lib/beetle/commands/garbage_collect_deduplication_store.rb +6 -4
- data/lib/beetle/configuration.rb +1 -1
- data/lib/beetle/deduplication_store.rb +3 -3
- data/lib/beetle/version.rb +1 -1
- data/test/beetle/deduplication_store_test.rb +27 -1
- data/test/beetle/message_test.rb +6 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1506f684cf433c4d71f7ad9019de4fe82167e2f8
|
4
|
+
data.tar.gz: d09515d78afb673636622a21128b41fbdc3dc19b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8f92c92c3de8485554ef577c97df0991493e145a6db5ceef11c55ada11166909e4cceb640119ed5f69ee49e40ffe5f260a12aca0efd02bd926c4c8bf7cdaf71
|
7
|
+
data.tar.gz: cd65e07319e8a84848d2f2ac32e5ef73585573f473bd7798f08ec18919ada22f34feacc5a53fcfeb7f7ef088281b2360da700905ee56d64d5a7f26bb18de4b29
|
@@ -20,12 +20,13 @@ module Beetle
|
|
20
20
|
opts.banner = "Usage: beetle garbage_collect_deduplication_store [options]"
|
21
21
|
opts.separator ""
|
22
22
|
|
23
|
-
opts.on("--redis-servers LIST", Array, "Required (e.g. 192.168.0.1:6379,192.168.0.2:6379)") do |val|
|
24
|
-
Beetle.config.redis_servers = val.join(",")
|
25
|
-
end
|
26
|
-
|
27
23
|
opts.on("--config-file PATH", String, "Path to an external yaml config file") do |val|
|
28
24
|
Beetle.config.config_file = val
|
25
|
+
Beetle.config.log_file = STDOUT
|
26
|
+
end
|
27
|
+
|
28
|
+
opts.on("--redis-servers LIST", Array, "Comma separted list of redis server:port specs used for GC") do |val|
|
29
|
+
Beetle.config.redis_servers = val.join(",")
|
29
30
|
end
|
30
31
|
|
31
32
|
opts.on("--redis-db N", Integer, "Redis database used for GC") do |val|
|
@@ -33,6 +34,7 @@ module Beetle
|
|
33
34
|
end
|
34
35
|
|
35
36
|
opts.on("-v", "--verbose") do |val|
|
37
|
+
Beetle.config.log_file = STDOUT
|
36
38
|
Beetle.config.logger.level = Logger::DEBUG
|
37
39
|
end
|
38
40
|
|
data/lib/beetle/configuration.rb
CHANGED
@@ -8,7 +8,7 @@ module Beetle
|
|
8
8
|
attr_accessor :logger
|
9
9
|
# defaults to <tt>STDOUT</tt>
|
10
10
|
attr_accessor :log_file
|
11
|
-
# number of seconds after which keys are removed
|
11
|
+
# number of seconds after which keys are removed from the message deduplication store (defaults to <tt>1.hour</tt>)
|
12
12
|
attr_accessor :gc_threshold
|
13
13
|
# the redis server to use for deduplication
|
14
14
|
# either a string like <tt>"localhost:6379"</tt> (default) or a file that contains the string.
|
@@ -74,7 +74,7 @@ module Beetle
|
|
74
74
|
# garbage collect keys in Redis (always assume the worst!)
|
75
75
|
def garbage_collect_keys(now = Time.now.to_i)
|
76
76
|
keys = redis.keys("msgid:*:expires")
|
77
|
-
threshold = now
|
77
|
+
threshold = now - @config.gc_threshold
|
78
78
|
keys.each do |key|
|
79
79
|
gc_key(key, threshold)
|
80
80
|
end
|
@@ -82,7 +82,7 @@ module Beetle
|
|
82
82
|
|
83
83
|
# garbage collect keys from a given file
|
84
84
|
def garbage_collect_keys_from_file(file_name, now = Time.now.to_i)
|
85
|
-
threshold = now
|
85
|
+
threshold = now - @config.gc_threshold
|
86
86
|
expired = total = 0
|
87
87
|
File.foreach(file_name) do |line|
|
88
88
|
line.chomp!
|
@@ -104,7 +104,7 @@ module Beetle
|
|
104
104
|
redis.del(*keys(msg_id))
|
105
105
|
return true
|
106
106
|
else
|
107
|
-
#
|
107
|
+
# key has future expiry date
|
108
108
|
# puts "#{msg_id} expires on #{Time.at(expires_at.to_i)}"
|
109
109
|
return false
|
110
110
|
end
|
data/lib/beetle/version.rb
CHANGED
@@ -114,11 +114,13 @@ module Beetle
|
|
114
114
|
class GarbageCollectionTest < Test::Unit::TestCase
|
115
115
|
def setup
|
116
116
|
@store = DeduplicationStore.new
|
117
|
+
Beetle.config.stubs(:gc_threshold).returns(10)
|
117
118
|
end
|
118
119
|
|
119
|
-
test "never tries to delete message keys when expire key
|
120
|
+
test "never tries to delete message keys when expire key does not exist" do
|
120
121
|
key = "foo"
|
121
122
|
@store.redis.del key
|
123
|
+
@store.redis.expects(:del).never
|
122
124
|
assert !@store.gc_key(key, 0)
|
123
125
|
end
|
124
126
|
|
@@ -132,5 +134,29 @@ module Beetle
|
|
132
134
|
@store.logger.expects(:error)
|
133
135
|
@store.garbage_collect_keys_using_master_and_slave
|
134
136
|
end
|
137
|
+
|
138
|
+
test "garbage collects a key when it has expired" do
|
139
|
+
key = "foo"
|
140
|
+
t = Time.now.to_i
|
141
|
+
@store.redis.set(key, t)
|
142
|
+
@store.redis.expects(:del)
|
143
|
+
assert @store.gc_key(key, t+1)
|
144
|
+
end
|
145
|
+
|
146
|
+
test "does not garbage collect a key when it has not expired" do
|
147
|
+
key = "foo"
|
148
|
+
t = Time.now.to_i
|
149
|
+
@store.redis.set(key, t)
|
150
|
+
@store.redis.expects(:del).never
|
151
|
+
assert !@store.gc_key(key, t)
|
152
|
+
end
|
153
|
+
|
154
|
+
test "correctly sets threshold for garbage collection" do
|
155
|
+
t = Time.now.to_i
|
156
|
+
@store.redis.expects(:keys).returns(["foo"])
|
157
|
+
@store.expects(:gc_key).with("foo", t-10)
|
158
|
+
@store.garbage_collect_keys
|
159
|
+
end
|
160
|
+
|
135
161
|
end
|
136
162
|
end
|
data/test/beetle/message_test.rb
CHANGED
@@ -84,33 +84,33 @@ module Beetle
|
|
84
84
|
end
|
85
85
|
|
86
86
|
test "should be able to garbage collect expired keys" do
|
87
|
-
Beetle.config.expects(:gc_threshold).returns(
|
87
|
+
Beetle.config.expects(:gc_threshold).returns(10)
|
88
88
|
header = header_with_params({:ttl => 0})
|
89
89
|
message = Message.new("somequeue", header, 'foo', :store => @store)
|
90
90
|
assert !message.key_exists?
|
91
91
|
assert message.key_exists?
|
92
92
|
@store.redis.expects(:del).with(*@store.keys(message.msg_id))
|
93
|
-
@store.garbage_collect_keys(Time.now.to_i+
|
93
|
+
@store.garbage_collect_keys(Time.now.to_i+11)
|
94
94
|
end
|
95
95
|
|
96
96
|
test "should be able to garbage collect expired keys using master and slave" do
|
97
|
-
Beetle.config.expects(:gc_threshold).returns(
|
97
|
+
Beetle.config.expects(:gc_threshold).returns(10)
|
98
98
|
header = header_with_params({:ttl => 0})
|
99
99
|
message = Message.new("somequeue", header, 'foo', :store => @store)
|
100
100
|
assert !message.key_exists?
|
101
101
|
assert message.key_exists?
|
102
102
|
@store.redis.expects(:del).with(*@store.keys(message.msg_id))
|
103
|
-
@store.garbage_collect_keys_using_master_and_slave(Time.now.to_i+
|
103
|
+
@store.garbage_collect_keys_using_master_and_slave(Time.now.to_i+11)
|
104
104
|
end
|
105
105
|
|
106
106
|
test "should not garbage collect not yet expired keys" do
|
107
|
-
Beetle.config.expects(:gc_threshold).returns(
|
107
|
+
Beetle.config.expects(:gc_threshold).returns(10)
|
108
108
|
header = header_with_params({:ttl => 0})
|
109
109
|
message = Message.new("somequeue", header, 'foo', :store => @store)
|
110
110
|
assert !message.key_exists?
|
111
111
|
assert message.key_exists?
|
112
112
|
@store.redis.expects(:del).never
|
113
|
-
@store.garbage_collect_keys(Time.now.to_i
|
113
|
+
@store.garbage_collect_keys(Time.now.to_i)
|
114
114
|
end
|
115
115
|
|
116
116
|
test "successful processing of a non redundant message should delete all keys from the database" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beetle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Kaes
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2013-12-
|
15
|
+
date: 2013-12-17 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: uuid4r
|