euston-eventstore 1.2.0-java → 1.2.1-java
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/euston-eventstore.gemspec +3 -2
- data/lib/euston-eventstore.rb +1 -0
- data/lib/euston-eventstore/persistence/mongodb/mongo_concurrency_detection.rb +31 -0
- data/lib/euston-eventstore/persistence/mongodb/mongo_persistence_engine.rb +10 -8
- data/lib/euston-eventstore/version.rb +1 -1
- metadata +21 -20
data/euston-eventstore.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'euston-eventstore'
|
3
|
-
s.version = '1.2.
|
4
|
-
s.date = '2011-10-
|
3
|
+
s.version = '1.2.1'
|
4
|
+
s.date = '2011-10-13'
|
5
5
|
s.platform = RUBY_PLATFORM.to_s == 'java' ? 'java' : Gem::Platform::RUBY
|
6
6
|
s.authors = ['Lee Henson', 'Guy Boertje']
|
7
7
|
s.email = ['lee.m.henson@gmail.com', 'guyboertje@gmail.com']
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
lib/euston-eventstore/persistence/mongodb/mongo_command_message.rb
|
28
28
|
lib/euston-eventstore/persistence/mongodb/mongo_commit.rb
|
29
29
|
lib/euston-eventstore/persistence/mongodb/mongo_commit_id.rb
|
30
|
+
lib/euston-eventstore/persistence/mongodb/mongo_concurrency_detection.rb
|
30
31
|
lib/euston-eventstore/persistence/mongodb/mongo_config.rb
|
31
32
|
lib/euston-eventstore/persistence/mongodb/mongo_event_message.rb
|
32
33
|
lib/euston-eventstore/persistence/mongodb/mongo_persistence_engine.rb
|
data/lib/euston-eventstore.rb
CHANGED
@@ -17,6 +17,7 @@ require 'euston-eventstore/dispatcher/synchronous_dispatcher'
|
|
17
17
|
require 'euston-eventstore/persistence/stream_head'
|
18
18
|
require 'euston-eventstore/persistence/mongodb/mongo_commit'
|
19
19
|
require 'euston-eventstore/persistence/mongodb/mongo_commit_id'
|
20
|
+
require 'euston-eventstore/persistence/mongodb/mongo_concurrency_detection'
|
20
21
|
require 'euston-eventstore/persistence/mongodb/mongo_config'
|
21
22
|
require 'euston-eventstore/persistence/mongodb/mongo_command_message'
|
22
23
|
require 'euston-eventstore/persistence/mongodb/mongo_event_message'
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Euston
|
2
|
+
module EventStore
|
3
|
+
module Persistence
|
4
|
+
module Mongodb
|
5
|
+
module MongoConcurrencyDetection
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
module InstanceMethods
|
9
|
+
def mongo_error_types_for_current_ruby_platform
|
10
|
+
errors = [ Mongo::OperationFailure ]
|
11
|
+
errors << NativeException if RUBY_PLATFORM.to_s == 'java'
|
12
|
+
errors
|
13
|
+
end
|
14
|
+
|
15
|
+
def detect_mongo_concurrency opts = {}, &block
|
16
|
+
begin
|
17
|
+
yield
|
18
|
+
rescue *mongo_error_types_for_current_ruby_platform => e
|
19
|
+
if e.message.include? "E11000"
|
20
|
+
opts.fetch(:on_e11000_error, ->(ex) { raise ConcurrencyError }).call e
|
21
|
+
else
|
22
|
+
opts.fetch(:on_other_error, ->(ex) { raise ex }).call e
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -3,6 +3,8 @@ module Euston
|
|
3
3
|
module Persistence
|
4
4
|
module Mongodb
|
5
5
|
class MongoPersistenceEngine
|
6
|
+
include MongoConcurrencyDetection
|
7
|
+
|
6
8
|
def initialize(store)
|
7
9
|
@store = store
|
8
10
|
|
@@ -42,18 +44,18 @@ module Euston
|
|
42
44
|
try_mongo do
|
43
45
|
commit = attempt.to_mongo_commit
|
44
46
|
|
45
|
-
|
46
|
-
persisted_commits.insert commit
|
47
|
-
|
48
|
-
update_stream_head_async attempt.stream_id, attempt.stream_revision, attempt.events.length
|
49
|
-
rescue Mongo::OperationFailure, NativeException => e
|
50
|
-
raise(Euston::EventStore::StorageError, e.message, e.backtrace) unless e.message.include? CONCURRENCY_EXCEPTION
|
51
|
-
|
47
|
+
on_e11000_error = ->(e) do
|
52
48
|
committed = persisted_commits.find_one(attempt.to_id_query)
|
53
|
-
|
54
49
|
raise Euston::EventStore::DuplicateCommitError if !committed.nil? && committed['commit_id'] == attempt.commit_id
|
55
50
|
raise Euston::EventStore::ConcurrencyError
|
56
51
|
end
|
52
|
+
|
53
|
+
on_other_error = ->(e) { raise EventStore::StorageError, e.message, e.backtrace }
|
54
|
+
|
55
|
+
detect_mongo_concurrency :on_e11000_error => on_e11000_error, :on_other_error => on_other_error do
|
56
|
+
persisted_commits.insert commit
|
57
|
+
update_stream_head_async attempt.stream_id, attempt.stream_revision, attempt.events.length
|
58
|
+
end
|
57
59
|
end
|
58
60
|
end
|
59
61
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: euston-eventstore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.2.
|
5
|
+
version: 1.2.1
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- Lee Henson
|
@@ -10,106 +10,106 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-10-
|
13
|
+
date: 2011-10-13 00:00:00.000000000 +01:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|
18
|
-
version_requirements: &
|
18
|
+
version_requirements: &2218 !ruby/object:Gem::Requirement
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 3.0.9
|
23
23
|
none: false
|
24
|
-
requirement: *
|
24
|
+
requirement: *2218
|
25
25
|
prerelease: false
|
26
26
|
type: :runtime
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: euston
|
29
|
-
version_requirements: &
|
29
|
+
version_requirements: &2236 !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 1.2.0
|
34
34
|
none: false
|
35
|
-
requirement: *
|
35
|
+
requirement: *2236
|
36
36
|
prerelease: false
|
37
37
|
type: :runtime
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: hash-keys
|
40
|
-
version_requirements: &
|
40
|
+
version_requirements: &2252 !ruby/object:Gem::Requirement
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
43
43
|
- !ruby/object:Gem::Version
|
44
44
|
version: 1.0.0
|
45
45
|
none: false
|
46
|
-
requirement: *
|
46
|
+
requirement: *2252
|
47
47
|
prerelease: false
|
48
48
|
type: :runtime
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: json-jruby
|
51
|
-
version_requirements: &
|
51
|
+
version_requirements: &2268 !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - ~>
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: 1.5.0
|
56
56
|
none: false
|
57
|
-
requirement: *
|
57
|
+
requirement: *2268
|
58
58
|
prerelease: false
|
59
59
|
type: :runtime
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: jmongo
|
62
|
-
version_requirements: &
|
62
|
+
version_requirements: &2284 !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
64
|
- - ~>
|
65
65
|
- !ruby/object:Gem::Version
|
66
66
|
version: 1.1.1
|
67
67
|
none: false
|
68
|
-
requirement: *
|
68
|
+
requirement: *2284
|
69
69
|
prerelease: false
|
70
70
|
type: :runtime
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: awesome_print
|
73
|
-
version_requirements: &
|
73
|
+
version_requirements: &2300 !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
75
|
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: 0.4.0
|
78
78
|
none: false
|
79
|
-
requirement: *
|
79
|
+
requirement: *2300
|
80
80
|
prerelease: false
|
81
81
|
type: :development
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: fuubar
|
84
|
-
version_requirements: &
|
84
|
+
version_requirements: &2318 !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
86
|
- - ~>
|
87
87
|
- !ruby/object:Gem::Version
|
88
88
|
version: 0.0.0
|
89
89
|
none: false
|
90
|
-
requirement: *
|
90
|
+
requirement: *2318
|
91
91
|
prerelease: false
|
92
92
|
type: :development
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: rake
|
95
|
-
version_requirements: &
|
95
|
+
version_requirements: &2334 !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
97
|
- - ~>
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: 0.9.2
|
100
100
|
none: false
|
101
|
-
requirement: *
|
101
|
+
requirement: *2334
|
102
102
|
prerelease: false
|
103
103
|
type: :development
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: rspec
|
106
|
-
version_requirements: &
|
106
|
+
version_requirements: &2350 !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 2.6.0
|
111
111
|
none: false
|
112
|
-
requirement: *
|
112
|
+
requirement: *2350
|
113
113
|
prerelease: false
|
114
114
|
type: :development
|
115
115
|
description: Ruby port for Jonathan Oliver's EventStore. See https://github.com/joliver/EventStore for details.
|
@@ -137,6 +137,7 @@ files:
|
|
137
137
|
- lib/euston-eventstore/persistence/mongodb/mongo_command_message.rb
|
138
138
|
- lib/euston-eventstore/persistence/mongodb/mongo_commit.rb
|
139
139
|
- lib/euston-eventstore/persistence/mongodb/mongo_commit_id.rb
|
140
|
+
- lib/euston-eventstore/persistence/mongodb/mongo_concurrency_detection.rb
|
140
141
|
- lib/euston-eventstore/persistence/mongodb/mongo_config.rb
|
141
142
|
- lib/euston-eventstore/persistence/mongodb/mongo_event_message.rb
|
142
143
|
- lib/euston-eventstore/persistence/mongodb/mongo_persistence_engine.rb
|