beetle 0.3.4 → 0.3.5

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
  SHA1:
3
- metadata.gz: aa1aeb6c9cc3af6c5918a5b329e5203ed11cf5af
4
- data.tar.gz: 1355e82b1f4f96ccc27efb8c600805b3e8d51a74
3
+ metadata.gz: 1506f684cf433c4d71f7ad9019de4fe82167e2f8
4
+ data.tar.gz: d09515d78afb673636622a21128b41fbdc3dc19b
5
5
  SHA512:
6
- metadata.gz: 88f407ac509eaa3b28f8f8e81735ee4de0ff3a531552001cfb75e9a1a67f3d9c25ec325cd6d08709151cc634b1189c60220e8df7a816207c49888e1efd76266f
7
- data.tar.gz: 8d688ac133f73f3d48ec4b7cdf75023d94a92c61f3491dfa9346555b3da5a5e731277dee7c2bd73534e59f0efd20fe27d302ff895729ff32adffeb973cbb5a0f
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
 
@@ -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 form the message deduplication store (defaults to <tt>3.days</tt>)
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 + @config.gc_threshold
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 + @config.gc_threshold
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
- # keys has future expiry date
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
@@ -1,3 +1,3 @@
1
1
  module Beetle
2
- VERSION = "0.3.4"
2
+ VERSION = "0.3.5"
3
3
  end
@@ -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 doesn not exist" do
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
@@ -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(0)
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+1)
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(0)
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+1)
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(0)
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-1)
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
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-16 00:00:00.000000000 Z
15
+ date: 2013-12-17 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: uuid4r