ccp 0.3.2 → 0.3.3
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.
- data/lib/ccp/kvs/tch.rb +3 -1
- data/lib/ccp/kvs/tokyo.rb +4 -1
- data/lib/ccp/kvs/tokyo/base.rb +4 -0
- data/lib/ccp/kvs/tokyo/cabinet.rb +40 -8
- data/lib/ccp/kvs/tokyo/state_machine.rb +34 -2
- data/lib/ccp/version.rb +1 -1
- data/spec/kvs/tokyo/cabinet_spec.rb +57 -0
- metadata +4 -4
data/lib/ccp/kvs/tch.rb
CHANGED
@@ -7,8 +7,10 @@ module Ccp
|
|
7
7
|
def set(k,v) ; W{ super }; end
|
8
8
|
def del(k) ; W{ super }; end
|
9
9
|
def count ; R{ super }; end
|
10
|
-
def keys ; R{ super }; end
|
11
10
|
def read! ; R{ super }; end
|
11
|
+
def keys ; R{ super }; end
|
12
|
+
def first_key; R{ super }; end
|
13
|
+
def first ; R{ super }; end
|
12
14
|
end
|
13
15
|
end
|
14
16
|
end
|
data/lib/ccp/kvs/tokyo.rb
CHANGED
data/lib/ccp/kvs/tokyo/base.rb
CHANGED
@@ -52,37 +52,69 @@ module Ccp
|
|
52
52
|
return @db.rnum
|
53
53
|
end
|
54
54
|
|
55
|
+
######################################################################
|
56
|
+
### bulk operations (not DRY but fast)
|
57
|
+
|
58
|
+
def read!
|
59
|
+
tryR("read!")
|
60
|
+
hash = {}
|
61
|
+
@db.iterinit or tokyo_error!("read!: ")
|
62
|
+
while k = @db.iternext
|
63
|
+
v = @db.get(k) or tokyo_error!("get(%s): " % k)
|
64
|
+
hash[k] = decode(v)
|
65
|
+
end
|
66
|
+
return hash
|
67
|
+
end
|
68
|
+
|
55
69
|
######################################################################
|
56
70
|
### iterator
|
57
71
|
|
58
72
|
def each(&block)
|
59
|
-
|
60
|
-
block.call(get(key))
|
61
|
-
end
|
73
|
+
each_pair(&block)
|
62
74
|
end
|
63
75
|
|
64
76
|
def each_pair(&block)
|
65
|
-
|
77
|
+
each_key do |key|
|
66
78
|
block.call(key, get(key))
|
67
79
|
end
|
68
80
|
end
|
69
81
|
|
70
|
-
def
|
71
|
-
tryR("
|
72
|
-
@db.iterinit
|
82
|
+
def each_key(&block)
|
83
|
+
tryR("each_key")
|
84
|
+
@db.iterinit or tokyo_error!("each_key: ")
|
73
85
|
while key = @db.iternext
|
74
86
|
block.call(key)
|
75
87
|
end
|
76
88
|
end
|
77
89
|
|
90
|
+
def each_keys(&block)
|
91
|
+
STDERR.puts "DEPRECATION WARNING: #{self.class}#each_keys is deprecated and will be removed in 0.4.0, use each_key instead"
|
92
|
+
each_key(&block)
|
93
|
+
end
|
94
|
+
|
78
95
|
def keys
|
79
96
|
array = []
|
80
|
-
|
97
|
+
each_key do |key|
|
81
98
|
array << key
|
82
99
|
end
|
83
100
|
return array
|
84
101
|
end
|
85
102
|
|
103
|
+
def first_key
|
104
|
+
tryR("first_key")
|
105
|
+
@db.iterinit or tokyo_error!("first_key: ")
|
106
|
+
return @db.iternext
|
107
|
+
end
|
108
|
+
|
109
|
+
def first
|
110
|
+
key = first_key
|
111
|
+
if key
|
112
|
+
return [key, get(key)]
|
113
|
+
else
|
114
|
+
return nil
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
86
118
|
end
|
87
119
|
end
|
88
120
|
end
|
@@ -15,9 +15,41 @@ module Ccp
|
|
15
15
|
@state || CLOSED
|
16
16
|
end
|
17
17
|
|
18
|
+
def locker_info
|
19
|
+
pretty = proc{|c| Array(c).find{|i| i !~ %r{/ruby/[^/]+/gems/}} || c}
|
20
|
+
|
21
|
+
if CONNECTIONS[@source]
|
22
|
+
return pretty[CONNECTIONS[@source]]
|
23
|
+
end
|
24
|
+
|
25
|
+
target = File.basename(@source)
|
26
|
+
CONNECTIONS.each_pair do |file, reason|
|
27
|
+
return pretty[reason] if File.basename(file) == target
|
28
|
+
end
|
29
|
+
|
30
|
+
if CONNECTIONS.any?
|
31
|
+
return CONNECTIONS.inspect
|
32
|
+
else
|
33
|
+
return 'no brockers. maybe locked by other systems?'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
18
37
|
def open(mode)
|
19
38
|
Pathname(@source.to_s).parent.mkpath
|
20
|
-
|
39
|
+
|
40
|
+
# open and mark filename for threading error
|
41
|
+
if @db.open(@source.to_s, mode)
|
42
|
+
CONNECTIONS[@db.path.to_s] = (caller rescue "???")
|
43
|
+
elsif threading_error?
|
44
|
+
raise Tokyo::Locked, "%s is locked by %s" % [@source, locker_info]
|
45
|
+
else
|
46
|
+
tokyo_error!("%s#open(%s,%s): " % [self.class, @source, mode])
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def __close__
|
51
|
+
@db.close
|
52
|
+
CONNECTIONS[@db.path] = nil
|
21
53
|
end
|
22
54
|
|
23
55
|
def close
|
@@ -28,7 +60,7 @@ module Ccp
|
|
28
60
|
case state
|
29
61
|
when CLOSED ; # NOP
|
30
62
|
when READABLE,
|
31
|
-
WRITABLE ;
|
63
|
+
WRITABLE ; __close__; @state = CLOSED
|
32
64
|
else ; raise "unknown state: #{state}"
|
33
65
|
end
|
34
66
|
end
|
data/lib/ccp/version.rb
CHANGED
@@ -205,6 +205,35 @@ describe Ccp::Kvs::Tokyo::Cabinet do
|
|
205
205
|
end
|
206
206
|
end
|
207
207
|
|
208
|
+
######################################################################
|
209
|
+
### read!
|
210
|
+
|
211
|
+
describe "#read!" do
|
212
|
+
specify do
|
213
|
+
put(:foo, 1)
|
214
|
+
put(:bar, 2)
|
215
|
+
|
216
|
+
kvs.R!
|
217
|
+
kvs.read!.should == {"foo" => "1", "bar" => "2"}
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
######################################################################
|
222
|
+
### each
|
223
|
+
|
224
|
+
describe "#each" do
|
225
|
+
specify do
|
226
|
+
put(:foo, 1)
|
227
|
+
put(:bar, 2)
|
228
|
+
|
229
|
+
kvs.R!
|
230
|
+
|
231
|
+
hash = {}
|
232
|
+
kvs.each{|k,v| hash[k] = v}
|
233
|
+
hash.should == {"foo" => "1", "bar" => "2"}
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
208
237
|
######################################################################
|
209
238
|
### keys
|
210
239
|
|
@@ -218,4 +247,32 @@ describe Ccp::Kvs::Tokyo::Cabinet do
|
|
218
247
|
kvs.keys.sort.should == %w( bar baz foo )
|
219
248
|
end
|
220
249
|
end
|
250
|
+
|
251
|
+
######################################################################
|
252
|
+
### first
|
253
|
+
|
254
|
+
describe "#first" do
|
255
|
+
specify do
|
256
|
+
put(:foo, 1)
|
257
|
+
put(:bar, 2)
|
258
|
+
|
259
|
+
kvs.R!
|
260
|
+
first = kvs.first
|
261
|
+
first.should be_kind_of(Array)
|
262
|
+
first.size.should == 2
|
263
|
+
first[0].should =~ /^(foo|bar)$/
|
264
|
+
first[1].should =~ /^(1|2)$/
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
describe "#first_key" do
|
269
|
+
specify do
|
270
|
+
put(:foo, 1)
|
271
|
+
put(:bar, 2)
|
272
|
+
|
273
|
+
kvs.R!
|
274
|
+
kvs.first_key.should =~ /^(foo|bar)$/
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
221
278
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ccp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 3
|
10
|
+
version: 0.3.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- maiha
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2013-08-
|
18
|
+
date: 2013-08-30 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: activesupport
|