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 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