dp_stm_map 0.0.2
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/.gitignore +18 -0
- data/.rspec +1 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +622 -0
- data/README.md +115 -0
- data/Rakefile +1 -0
- data/bin/dp_map_manager.rb +47 -0
- data/cucumber.yml +2 -0
- data/dp_stm_map.gemspec +29 -0
- data/features/client_reconnect.feature +13 -0
- data/features/persistence.feature +12 -0
- data/features/replication.feature +9 -0
- data/features/running_manager.feature +19 -0
- data/features/step_definitions/client_reconnect_steps.rb +28 -0
- data/features/step_definitions/persistence_steps.rb +49 -0
- data/features/step_definitions/replication_steps.rb +15 -0
- data/features/step_definitions/running_server_steps.rb +10 -0
- data/features/step_definitions/transaction_fail_steps.rb +11 -0
- data/features/support/env.rb +80 -0
- data/features/transaction_fail.feature +7 -0
- data/lib/dp_stm_map/Client.rb +268 -0
- data/lib/dp_stm_map/ClientLocalStore.rb +119 -0
- data/lib/dp_stm_map/InMemoryStmMap.rb +147 -0
- data/lib/dp_stm_map/Manager.rb +370 -0
- data/lib/dp_stm_map/Message.rb +126 -0
- data/lib/dp_stm_map/ObjectStore.rb +99 -0
- data/lib/dp_stm_map/version.rb +16 -0
- data/lib/dp_stm_map.rb +20 -0
- data/server.profile +547 -0
- data/spec/dp_stm_map/ClientLocalStore_spec.rb +78 -0
- data/spec/dp_stm_map/Client_spec.rb +133 -0
- data/spec/dp_stm_map/InMemoryStmMap_spec.rb +10 -0
- data/spec/dp_stm_map/Manager_spec.rb +323 -0
- data/spec/dp_stm_map/Message_spec.rb +21 -0
- data/spec/dp_stm_map/ObjectStore_spec.rb +87 -0
- data/spec/dp_stm_map/StmMap_shared.rb +432 -0
- metadata +235 -0
@@ -0,0 +1,432 @@
|
|
1
|
+
require 'dp_stm_map'
|
2
|
+
require 'timeout'
|
3
|
+
|
4
|
+
# RSpec.configure do |c|
|
5
|
+
# c.around(:each) do |example|
|
6
|
+
# Timeout::timeout(2) {
|
7
|
+
# example.run
|
8
|
+
# }
|
9
|
+
# end
|
10
|
+
# end
|
11
|
+
|
12
|
+
module DpStmMap
|
13
|
+
|
14
|
+
shared_examples_for "StmMap" do
|
15
|
+
|
16
|
+
|
17
|
+
describe :on_atomic do
|
18
|
+
it "should be executed after commiting atomic changes" do
|
19
|
+
executed=false
|
20
|
+
subject.on_atomic do |changes|
|
21
|
+
executed=true
|
22
|
+
|
23
|
+
end
|
24
|
+
subject.atomic do |map|
|
25
|
+
map['x']='y'
|
26
|
+
end
|
27
|
+
executed.should be true
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
context "when listener raises an error" do
|
32
|
+
it "should still commit atomic changes" do
|
33
|
+
subject.on_atomic do
|
34
|
+
raise "listener failed"
|
35
|
+
end
|
36
|
+
subject.atomic do |map|
|
37
|
+
map['x']='y'
|
38
|
+
end
|
39
|
+
|
40
|
+
subject.atomic_read do |map|
|
41
|
+
map['x'].should == 'y'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
it "should execute all listeners" do
|
45
|
+
executed=false
|
46
|
+
subject.on_atomic do
|
47
|
+
raise "listener failed"
|
48
|
+
end
|
49
|
+
subject.on_atomic do |changes|
|
50
|
+
executed=true
|
51
|
+
end
|
52
|
+
subject.atomic do |map|
|
53
|
+
map['x']='y'
|
54
|
+
end
|
55
|
+
executed.should be true
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe :validate_atomic do
|
62
|
+
it "should be executed before commiting atomic changes" do
|
63
|
+
executed=false
|
64
|
+
subject.validate_atomic do |changes|
|
65
|
+
executed=true
|
66
|
+
end
|
67
|
+
subject.atomic do |map|
|
68
|
+
map['x']='y'
|
69
|
+
end
|
70
|
+
executed.should be true
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should roll back transaction when validator raises exception" do
|
74
|
+
subject.validate_atomic do |changes|
|
75
|
+
raise "validation error"
|
76
|
+
end
|
77
|
+
|
78
|
+
expect do
|
79
|
+
subject.atomic do |map|
|
80
|
+
map['x']='y'
|
81
|
+
end
|
82
|
+
end.to raise_error "validation error"
|
83
|
+
|
84
|
+
subject.atomic_read do |map|
|
85
|
+
map.should_not have_key 'x'
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
it "should contain changes of creation of new value" do
|
92
|
+
subject.validate_atomic do |changes|
|
93
|
+
changes.should == {'x' => [nil,'y']}
|
94
|
+
end
|
95
|
+
subject.atomic do |map|
|
96
|
+
map['x']='y'
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should contain change to new value" do
|
101
|
+
subject.atomic do |map|
|
102
|
+
map['x']='y'
|
103
|
+
end
|
104
|
+
subject.validate_atomic do |changes|
|
105
|
+
changes.should == {'x' => ['y','z']}
|
106
|
+
end
|
107
|
+
subject.atomic do |map|
|
108
|
+
map['x']='z'
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should contain deleting existing value" do
|
113
|
+
subject.atomic do |map|
|
114
|
+
map['x']='y'
|
115
|
+
end
|
116
|
+
subject.validate_atomic do |changes|
|
117
|
+
changes.should == {'x' => ['y',nil]}
|
118
|
+
end
|
119
|
+
subject.atomic do |map|
|
120
|
+
map.delete 'x'
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
|
126
|
+
|
127
|
+
describe :atomic_read do
|
128
|
+
it "should return evaluation result" do
|
129
|
+
subject.atomic_read{ |map| "test"}.should == 'test'
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should propagate raised error" do
|
133
|
+
expect{subject.atomic_read{|map| raise "some error"}}.to raise_error "some error"
|
134
|
+
end
|
135
|
+
|
136
|
+
describe :[] do
|
137
|
+
it "should return nil for unset key" do
|
138
|
+
subject.atomic_read do |map|
|
139
|
+
map['x'].should == nil
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should return value for set key" do
|
144
|
+
subject.atomic do |map|
|
145
|
+
map['x']='y'
|
146
|
+
end
|
147
|
+
subject.atomic_read do |map|
|
148
|
+
map['x'].should == 'y'
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
it "should not create new key when looking up unset key" do
|
153
|
+
subject.atomic_read do |map|
|
154
|
+
map['x']
|
155
|
+
map.should_not have_key 'x'
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|
160
|
+
|
161
|
+
|
162
|
+
describe :has_key? do
|
163
|
+
context "when value is previosly set" do
|
164
|
+
before do
|
165
|
+
subject.atomic do |map|
|
166
|
+
map['x']='y'
|
167
|
+
end
|
168
|
+
end
|
169
|
+
it "should return true" do
|
170
|
+
subject.atomic_read do |map|
|
171
|
+
map.has_key?('x').should be_true
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
context "when value is not set" do
|
177
|
+
it "should return true" do
|
178
|
+
subject.atomic_read do |map|
|
179
|
+
map.has_key?('x').should be_false
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
describe :atomic do
|
188
|
+
|
189
|
+
it "should return evaluation result" do
|
190
|
+
subject.atomic{ |map| "test"}.should == 'test'
|
191
|
+
end
|
192
|
+
|
193
|
+
it "should roll back changes when error is raised" do
|
194
|
+
expect{subject.atomic{|map| map['x'] = 'y'; raise "some error"}}.to raise_error "some error"
|
195
|
+
subject.atomic do |map|
|
196
|
+
map.should_not have_key('x')
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
describe :has_key? do
|
201
|
+
context "when value is previosly set" do
|
202
|
+
before do
|
203
|
+
subject.atomic do |map|
|
204
|
+
map['x']='y'
|
205
|
+
end
|
206
|
+
end
|
207
|
+
it "should return true" do
|
208
|
+
subject.atomic do |map|
|
209
|
+
map.has_key?('x').should be_true
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
context "when value is not set" do
|
215
|
+
it "should return true" do
|
216
|
+
subject.atomic do |map|
|
217
|
+
map.has_key?('x').should be_false
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
context "when value is set within transaction" do
|
223
|
+
it "should return true" do
|
224
|
+
subject.atomic do |map|
|
225
|
+
map['x']='y'
|
226
|
+
map.has_key?('x').should be_true
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
context "when value has been deleted within the transaction" do
|
232
|
+
before do
|
233
|
+
subject.atomic do |map|
|
234
|
+
map['x']='y'
|
235
|
+
end
|
236
|
+
end
|
237
|
+
it "should return false" do
|
238
|
+
subject.atomic do |map|
|
239
|
+
map.delete 'x'
|
240
|
+
map.has_key?('x').should be_false
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
|
246
|
+
end
|
247
|
+
|
248
|
+
|
249
|
+
|
250
|
+
describe :delete do
|
251
|
+
|
252
|
+
context "when value does not exist" do
|
253
|
+
it "should make no difference" do
|
254
|
+
subject.atomic do |map|
|
255
|
+
map.delete 'x'
|
256
|
+
map.has_key?('x').should be_false
|
257
|
+
end
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
context "when value exists in the global context" do
|
262
|
+
before do
|
263
|
+
subject.atomic do |map|
|
264
|
+
map['x']='y'
|
265
|
+
end
|
266
|
+
end
|
267
|
+
it "should delete value for the same transaction scope" do
|
268
|
+
subject.atomic do |map|
|
269
|
+
map.delete 'x'
|
270
|
+
map.has_key?('x').should be_false
|
271
|
+
end
|
272
|
+
end
|
273
|
+
it "should delete value for the next transaction scope" do
|
274
|
+
subject.atomic do |map|
|
275
|
+
map.delete 'x'
|
276
|
+
end
|
277
|
+
subject.atomic do |map|
|
278
|
+
map.has_key?('x').should be_false
|
279
|
+
end
|
280
|
+
end
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
describe :[]= do
|
285
|
+
it "should store new value" do
|
286
|
+
subject.atomic do |map|
|
287
|
+
map['x']='y'
|
288
|
+
end
|
289
|
+
subject.atomic_read do |map|
|
290
|
+
map['x'].should == 'y'
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
it "should change existing value" do
|
295
|
+
subject.atomic do |map|
|
296
|
+
map['x']='y'
|
297
|
+
end
|
298
|
+
subject.atomic do |map|
|
299
|
+
map['x']='z'
|
300
|
+
end
|
301
|
+
subject.atomic_read do |map|
|
302
|
+
map['x'].should == 'z'
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
context "when new value is nil" do
|
307
|
+
before do
|
308
|
+
subject.atomic {|map| map['x']='y'}
|
309
|
+
end
|
310
|
+
|
311
|
+
it "should delete the key in the same transaction scope" do
|
312
|
+
subject.atomic do |map|
|
313
|
+
map['x']=nil
|
314
|
+
map.should_not have_key 'x'
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
it "should delete the key in the global scope after transaction" do
|
319
|
+
subject.atomic do |map|
|
320
|
+
map['x']=nil
|
321
|
+
end
|
322
|
+
subject.atomic do |map|
|
323
|
+
map.should_not have_key 'x'
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
end
|
328
|
+
|
329
|
+
|
330
|
+
context "when value has been previosly deleted in the same transaction scope" do
|
331
|
+
it "should store the new value visible within the transaction scope" do
|
332
|
+
subject.atomic do |map|
|
333
|
+
map['x'] = 'y'
|
334
|
+
map.delete 'x'
|
335
|
+
map['x'] = 'z'
|
336
|
+
map['x'].should == 'z'
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
340
|
+
it "should store the new value visible within scope of next transaction" do
|
341
|
+
subject.atomic do |map|
|
342
|
+
map['x'] = 'y'
|
343
|
+
map.delete 'x'
|
344
|
+
map['x'] = 'z'
|
345
|
+
end
|
346
|
+
subject.atomic do |map|
|
347
|
+
map['x'].should == 'z'
|
348
|
+
end
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
|
353
|
+
end
|
354
|
+
|
355
|
+
describe :[] do
|
356
|
+
|
357
|
+
|
358
|
+
it "should record reading values" do
|
359
|
+
subject.atomic do |map|
|
360
|
+
map['x']='y'
|
361
|
+
end
|
362
|
+
|
363
|
+
subject.validate_atomic do |changes|
|
364
|
+
changes.should == {'x' => ['y','y']}
|
365
|
+
end
|
366
|
+
|
367
|
+
subject.atomic do |map|
|
368
|
+
map['x']
|
369
|
+
end
|
370
|
+
|
371
|
+
end
|
372
|
+
|
373
|
+
it "should record changing values" do
|
374
|
+
subject.atomic do |map|
|
375
|
+
map['x']='y'
|
376
|
+
end
|
377
|
+
|
378
|
+
subject.validate_atomic do |changes|
|
379
|
+
changes.should == {'x' => ['y','z']}
|
380
|
+
end
|
381
|
+
|
382
|
+
subject.atomic do |map|
|
383
|
+
map['x']='z'
|
384
|
+
end
|
385
|
+
|
386
|
+
end
|
387
|
+
|
388
|
+
it "should return nil for unset key" do
|
389
|
+
subject.atomic do |map|
|
390
|
+
map['x'].should == nil
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
394
|
+
it "should not create new key when looking up unset key" do
|
395
|
+
subject.atomic do |map|
|
396
|
+
map['x']
|
397
|
+
map.should_not have_key 'x'
|
398
|
+
end
|
399
|
+
end
|
400
|
+
|
401
|
+
context "when value is not set in local atomic context" do
|
402
|
+
before do
|
403
|
+
subject.atomic do |map|
|
404
|
+
map['x']='y'
|
405
|
+
end
|
406
|
+
end
|
407
|
+
it "should return value from global state" do
|
408
|
+
subject.atomic do |map|
|
409
|
+
map['x'].should == 'y'
|
410
|
+
end
|
411
|
+
end
|
412
|
+
end
|
413
|
+
|
414
|
+
context "when value is set in local atomic context" do
|
415
|
+
it "should return value from the local state" do
|
416
|
+
subject.atomic do |map|
|
417
|
+
map['x']= 'z'
|
418
|
+
map['x'].should == 'z'
|
419
|
+
end
|
420
|
+
end
|
421
|
+
end
|
422
|
+
|
423
|
+
|
424
|
+
end
|
425
|
+
|
426
|
+
end
|
427
|
+
|
428
|
+
|
429
|
+
|
430
|
+
end
|
431
|
+
|
432
|
+
end
|
metadata
ADDED
@@ -0,0 +1,235 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dp_stm_map
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Dragan Milic
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-04-29 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.3'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.3'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: autotest
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: cucumber
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: aruba
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: threadsafe-lru
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: xray
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
description: distributed and persistent software transaction memory map
|
143
|
+
email:
|
144
|
+
- dragan@netice9.com
|
145
|
+
executables:
|
146
|
+
- dp_map_manager.rb
|
147
|
+
extensions: []
|
148
|
+
extra_rdoc_files: []
|
149
|
+
files:
|
150
|
+
- .gitignore
|
151
|
+
- .rspec
|
152
|
+
- Gemfile
|
153
|
+
- LICENSE.txt
|
154
|
+
- README.md
|
155
|
+
- Rakefile
|
156
|
+
- bin/dp_map_manager.rb
|
157
|
+
- cucumber.yml
|
158
|
+
- dp_stm_map.gemspec
|
159
|
+
- features/client_reconnect.feature
|
160
|
+
- features/persistence.feature
|
161
|
+
- features/replication.feature
|
162
|
+
- features/running_manager.feature
|
163
|
+
- features/step_definitions/client_reconnect_steps.rb
|
164
|
+
- features/step_definitions/persistence_steps.rb
|
165
|
+
- features/step_definitions/replication_steps.rb
|
166
|
+
- features/step_definitions/running_server_steps.rb
|
167
|
+
- features/step_definitions/transaction_fail_steps.rb
|
168
|
+
- features/support/env.rb
|
169
|
+
- features/transaction_fail.feature
|
170
|
+
- lib/dp_stm_map.rb
|
171
|
+
- lib/dp_stm_map/Client.rb
|
172
|
+
- lib/dp_stm_map/ClientLocalStore.rb
|
173
|
+
- lib/dp_stm_map/InMemoryStmMap.rb
|
174
|
+
- lib/dp_stm_map/Manager.rb
|
175
|
+
- lib/dp_stm_map/Message.rb
|
176
|
+
- lib/dp_stm_map/ObjectStore.rb
|
177
|
+
- lib/dp_stm_map/version.rb
|
178
|
+
- server.profile
|
179
|
+
- spec/dp_stm_map/ClientLocalStore_spec.rb
|
180
|
+
- spec/dp_stm_map/Client_spec.rb
|
181
|
+
- spec/dp_stm_map/InMemoryStmMap_spec.rb
|
182
|
+
- spec/dp_stm_map/Manager_spec.rb
|
183
|
+
- spec/dp_stm_map/Message_spec.rb
|
184
|
+
- spec/dp_stm_map/ObjectStore_spec.rb
|
185
|
+
- spec/dp_stm_map/StmMap_shared.rb
|
186
|
+
homepage: ''
|
187
|
+
licenses:
|
188
|
+
- GPLv3
|
189
|
+
post_install_message:
|
190
|
+
rdoc_options: []
|
191
|
+
require_paths:
|
192
|
+
- lib
|
193
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
194
|
+
none: false
|
195
|
+
requirements:
|
196
|
+
- - ! '>='
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: '0'
|
199
|
+
segments:
|
200
|
+
- 0
|
201
|
+
hash: 1329683666885119216
|
202
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
|
+
none: false
|
204
|
+
requirements:
|
205
|
+
- - ! '>='
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: '0'
|
208
|
+
segments:
|
209
|
+
- 0
|
210
|
+
hash: 1329683666885119216
|
211
|
+
requirements: []
|
212
|
+
rubyforge_project:
|
213
|
+
rubygems_version: 1.8.25
|
214
|
+
signing_key:
|
215
|
+
specification_version: 3
|
216
|
+
summary: distributed and persistent software transaction memory map
|
217
|
+
test_files:
|
218
|
+
- features/client_reconnect.feature
|
219
|
+
- features/persistence.feature
|
220
|
+
- features/replication.feature
|
221
|
+
- features/running_manager.feature
|
222
|
+
- features/step_definitions/client_reconnect_steps.rb
|
223
|
+
- features/step_definitions/persistence_steps.rb
|
224
|
+
- features/step_definitions/replication_steps.rb
|
225
|
+
- features/step_definitions/running_server_steps.rb
|
226
|
+
- features/step_definitions/transaction_fail_steps.rb
|
227
|
+
- features/support/env.rb
|
228
|
+
- features/transaction_fail.feature
|
229
|
+
- spec/dp_stm_map/ClientLocalStore_spec.rb
|
230
|
+
- spec/dp_stm_map/Client_spec.rb
|
231
|
+
- spec/dp_stm_map/InMemoryStmMap_spec.rb
|
232
|
+
- spec/dp_stm_map/Manager_spec.rb
|
233
|
+
- spec/dp_stm_map/Message_spec.rb
|
234
|
+
- spec/dp_stm_map/ObjectStore_spec.rb
|
235
|
+
- spec/dp_stm_map/StmMap_shared.rb
|