disk_store 0.2.2 → 0.3.0
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/Gemfile.lock +5 -1
- data/disk_store.gemspec +1 -0
- data/lib/disk_store/reaper.rb +14 -29
- data/lib/disk_store/version.rb +1 -1
- data/spec/reaper_spec.rb +3 -7
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a169969f0a6815116676b69bccfada6d9c021c00
|
4
|
+
data.tar.gz: 4047279dfc9bc369a3012e495b73a5d22e5e4f59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bfbbe98e30b10f1790fc29d4136df196063eccacbf7d47dd2f28bca6e62e130c88136d79f41ceb9b2d33e341b91e5a4852803f5155ec3789ca342846fcdcbf79
|
7
|
+
data.tar.gz: d9d4184f527e83e14102b6347bb40906047581f84497bdc21533246c9aefeb8b9fd8e53ed4228874057cd521925630b8c40ba98199a6bd59d8d85fc864f23d9b
|
data/Gemfile.lock
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
disk_store (0.
|
4
|
+
disk_store (0.3.0)
|
5
|
+
celluloid
|
5
6
|
rake
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: https://rubygems.org/
|
9
10
|
specs:
|
11
|
+
celluloid (0.15.2)
|
12
|
+
timers (~> 1.1.0)
|
10
13
|
diff-lcs (1.2.5)
|
11
14
|
rake (10.3.2)
|
12
15
|
rspec (2.14.1)
|
@@ -17,6 +20,7 @@ GEM
|
|
17
20
|
rspec-expectations (2.14.5)
|
18
21
|
diff-lcs (>= 1.1.3, < 2.0)
|
19
22
|
rspec-mocks (2.14.6)
|
23
|
+
timers (1.1.0)
|
20
24
|
|
21
25
|
PLATFORMS
|
22
26
|
ruby
|
data/disk_store.gemspec
CHANGED
data/lib/disk_store/reaper.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
|
+
require 'celluloid'
|
2
|
+
|
1
3
|
Dir[File.join(File.dirname(__FILE__), "eviction_strategies", "*.rb")].each { |f| require f }
|
2
4
|
|
3
5
|
class DiskStore
|
4
6
|
class Reaper
|
7
|
+
include Celluloid
|
8
|
+
|
5
9
|
DEFAULT_OPTS = {
|
6
10
|
cache_size: 1073741824, # 1 gigabyte
|
7
11
|
reaper_interval: 10, # seconds,
|
@@ -12,27 +16,18 @@ class DiskStore
|
|
12
16
|
|
13
17
|
# Spawn exactly 1 reaper for each cache path
|
14
18
|
def self.spawn_for(path, opts = {})
|
15
|
-
return
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
@reapers[path] = reaper
|
21
|
-
reaper
|
22
|
-
end
|
23
|
-
|
24
|
-
# Mostly useful for testing purposes
|
25
|
-
def self.kill_all!
|
26
|
-
@reapers.each { |path, reaper| reaper.thread.kill }
|
27
|
-
@reapers = {}
|
19
|
+
return Celluloid::Actor[path] if !Celluloid::Actor[path].nil?
|
20
|
+
|
21
|
+
Reaper.supervise_as(path, path, opts)
|
22
|
+
Celluloid::Actor[path].async.start!
|
23
|
+
Celluloid::Actor[path]
|
28
24
|
end
|
29
25
|
|
30
|
-
attr_reader :path
|
26
|
+
attr_reader :path
|
31
27
|
|
32
28
|
def initialize(path, opts = {})
|
33
29
|
@path = path
|
34
30
|
@options = DEFAULT_OPTS.merge(opts)
|
35
|
-
@thread = nil
|
36
31
|
|
37
32
|
set_eviction_strategy(@options[:eviction_strategy])
|
38
33
|
end
|
@@ -42,23 +37,13 @@ class DiskStore
|
|
42
37
|
self.class.send :prepend, DiskStore::Reaper.const_get(strategy)
|
43
38
|
end
|
44
39
|
|
45
|
-
def
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
wait_for_next
|
50
|
-
end
|
40
|
+
def start!
|
41
|
+
loop do
|
42
|
+
perform_sweep! if needs_eviction?
|
43
|
+
wait_for_next
|
51
44
|
end
|
52
45
|
end
|
53
46
|
|
54
|
-
def alive?
|
55
|
-
@thread && @thread.alive?
|
56
|
-
end
|
57
|
-
|
58
|
-
def running?
|
59
|
-
@thread && !@thread.stop?
|
60
|
-
end
|
61
|
-
|
62
47
|
private
|
63
48
|
|
64
49
|
def perform_sweep!
|
data/lib/disk_store/version.rb
CHANGED
data/spec/reaper_spec.rb
CHANGED
@@ -6,6 +6,9 @@ describe DiskStore::Reaper do
|
|
6
6
|
let(:key) { "doge" }
|
7
7
|
|
8
8
|
before(:each) do
|
9
|
+
@reaper = nil
|
10
|
+
DiskStore::Reaper.stub(:spawn_for) { |path, opts| @reaper ||= DiskStore::Reaper.new(path, opts) }
|
11
|
+
|
9
12
|
file.write file_contents
|
10
13
|
file.flush
|
11
14
|
file.rewind
|
@@ -18,10 +21,6 @@ describe DiskStore::Reaper do
|
|
18
21
|
end
|
19
22
|
end
|
20
23
|
|
21
|
-
after(:each) do
|
22
|
-
DiskStore::Reaper.kill_all!
|
23
|
-
end
|
24
|
-
|
25
24
|
it 'is spawned with a new cache' do
|
26
25
|
cache = DiskStore.new(@tmpdir)
|
27
26
|
expect(cache.reaper).to_not be_nil
|
@@ -85,9 +84,6 @@ describe DiskStore::Reaper do
|
|
85
84
|
let (:reaper) { cache.reaper }
|
86
85
|
|
87
86
|
before(:each) do
|
88
|
-
# Kill the thread so we can test without it getting
|
89
|
-
# in the way
|
90
|
-
reaper.thread.kill
|
91
87
|
cache.write key, file
|
92
88
|
|
93
89
|
file2.write file2_contents
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: disk_store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kelly Sutton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: celluloid
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rspec
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|