tengine_core 0.5.36 → 0.5.37

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.36
1
+ 0.5.37
@@ -70,10 +70,11 @@ class Tengine::Core::Event
70
70
  # @yieldparam [Tengine::Core::Event] event The event in question.
71
71
  # @yieldreturn [Boolean] Return false, and it will just break the execution. Otherwise, it tries to update the event.
72
72
  # @param [Hash] condition Criteria to find a document.
73
- # @param [Numeric] retry_max (3) Maximum number of retry attempts to save the event.
73
+ # @param [Numeric] retry_max (60) Maximum number of retry attempts to save the event.
74
+ # @param [Numeric] wtimeout (10240) Write timeout, ignored for earlier mongodb.
74
75
  # @return [Tengine::Core::Event] The event in question if update succeeded, false if retry_max reached, or nil if the block exited with false.
75
76
  # @raise [Mongo::OperationFailure] Any exceptions that happened inside will be propagated outside.
76
- def self.find_or_create_then_update_with_block condition, retry_max = 3
77
+ def self.find_or_create_then_update_with_block condition, retry_max = 60, wtimeout = 10240
77
78
  # * とある条件を満たすイベントがあれば、それを上書きしたい。
78
79
  # * なければ、新規作成したい。
79
80
  # * でもアトミックにやりたい。
@@ -86,7 +87,7 @@ class Tengine::Core::Event
86
87
  results = nil
87
88
 
88
89
  case collection.driver.db.connection when Mongo::ReplSetConnection then
89
- safemode = { :w => "majority", :wtimeout => 1024, } # mongodb 2.0+, 参加しているレプリカセットの多数派に書き込んだ時点でOK扱い
90
+ safemode = { :w => "majority", :wtimeout => wtimeout, } # mongodb 2.0+, 参加しているレプリカセットの多数派に書き込んだ時点でOK扱い
90
91
  else
91
92
  safemode = true
92
93
  end
@@ -181,7 +181,15 @@ class Tengine::Core::Kernel
181
181
  unless event
182
182
  # Model.exists?だと上手くいかない時があるのでModel.whereを使っています
183
183
  # fire_failed_event(raw_event) if Tengine::Core::Event.exists?(confitions: { key: raw_event.key, sender_name: raw_event.sender_name })
184
- if Tengine::Core::Event.where(:key => raw_event.key, :sender_name => raw_event.sender_name).count > 0
184
+
185
+ begin
186
+ n = Tengine::Core::Event.where(:key => raw_event.key, :sender_name => raw_event.sender_name).count
187
+ rescue Mongo::ConnectionFailure, Mongo::OperationTimeout, Mongo::OperationFailure => e
188
+ Tengine.logger.error("giving up processing an event due to #{e} (#{e.class.name})")
189
+ n = 0
190
+ end
191
+
192
+ if n > 0
185
193
  fire_failed_event(raw_event)
186
194
  headers.ack
187
195
  else
@@ -192,18 +200,24 @@ class Tengine::Core::Kernel
192
200
  end
193
201
  event.kernel = self
194
202
 
195
- ack_policy = ack_policy_for(event)
196
- safety_processing_headers(headers, event, ack_policy) do
197
- ack if ack_policy == :at_first
198
- handlers = find_handlers(event)
199
- safty_handlers(handlers) do
200
- delegate(event, handlers)
201
- ack if all_submitted?
203
+ begin
204
+ ack_policy = ack_policy_for(event)
205
+ safety_processing_headers(headers, event, ack_policy) do
206
+ ack if ack_policy == :at_first
207
+ handlers = find_handlers(event)
208
+ safty_handlers(handlers) do
209
+ delegate(event, handlers)
210
+ ack if all_submitted?
211
+ end
212
+ headers.reject(:requeue => true) unless ack?
202
213
  end
203
- headers.reject(:requeue => true) unless ack?
214
+ close_if_shutting_down
215
+ true
216
+ rescue Mongo::ConnectionFailure, Mongo::OperationTimeout, Mongo::OperationFailure => e
217
+ Tengine.logger.error("giving up processing an event due to #{e} (#{e.class.name})")
218
+ Tengine.logger.info("requeue an event #{raw_event.inspect}")
219
+ headers.reject(:requeue => true)
204
220
  end
205
- close_if_shutting_down
206
- true
207
221
  end
208
222
  end
209
223
 
@@ -15,22 +15,24 @@ if Mongoid::VERSION < "3.0.0"
15
15
  end
16
16
  end
17
17
  end
18
+ end
18
19
 
20
+ module Mongoid::Collections::Retry
19
21
  # https://github.com/mongoid/mongoid/pull/1739
22
+ # Mongoid 2.3.x needs additional fix
20
23
  def retry_on_connection_failure
21
24
  retries = 0
22
25
  begin
23
26
  yield
24
- rescue Mongo::ConnectionFailure, Mongo::OperationTimeout => ex
25
- retries = increase_retry_attempts(retries, ex)
27
+ rescue Mongo::ConnectionFailure, Mongo::OperationTimeout, Mongo::OperationFailure => ex
28
+ raise unless ex.class == Mongo::OperationFailure and ex.message !~ /not master/
29
+
30
+ retries += 1
31
+ raise if retries > Mongoid.max_retries_on_connection_failure
32
+
33
+ Kernel.sleep(0.5)
34
+ log_retry retries
26
35
  retry
27
- rescue Mongo::OperationFailure => ex
28
- if ex.message =~ /not master/
29
- retries = increase_retry_attempts(retries, ex)
30
- retry
31
- else
32
- raise ex
33
- end
34
36
  end
35
37
  end
36
38
  end
@@ -80,7 +80,7 @@ describe Tengine::Core::Mutex do
80
80
  t1 = Time.now
81
81
  block_called.should be_true
82
82
  m.reload.waiters.should be_empty
83
- (t1 - t0).should be_within(0.5).of(0.3 + m.ttl)
83
+ (t1 - t0).should be_within(1.0).of(0.3 + m.ttl)
84
84
  end
85
85
 
86
86
  it "synchronizes #3: with another locker, which is not expiring" do
@@ -106,7 +106,7 @@ describe Tengine::Core::Mutex do
106
106
  t1 = Time.now
107
107
  block_called.should be_true
108
108
  m.reload.waiters.should be_empty
109
- (t1 - t0).should be_within(0.5).of(5 + m.ttl)
109
+ (t1 - t0).should be_within(1.0).of(5 + m.ttl)
110
110
  end
111
111
 
112
112
  it "synchronizes #4: multi-threaded situation" do
@@ -178,7 +178,7 @@ describe Tengine::Core::Mutex do
178
178
  end
179
179
 
180
180
  t1.should_not be_nil
181
- (t1 - t0).should be_within(0.5).of(10 * subject.mutex.ttl)
181
+ (t1 - t0).should be_within(1.0).of(10 * subject.mutex.ttl)
182
182
  end
183
183
  end
184
184
  end
data/tengine_core.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "tengine_core"
8
- s.version = "0.5.36"
8
+ s.version = "0.5.37"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["taigou", "totty", "g-morita", "shyouhei", "akm", "hiroshinakao"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tengine_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.36
4
+ version: 0.5.37
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -18,7 +18,7 @@ date: 2012-02-22 00:00:00.000000000Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: activesupport
21
- requirement: &70364269012360 !ruby/object:Gem::Requirement
21
+ requirement: &70303062943180 !ruby/object:Gem::Requirement
22
22
  none: false
23
23
  requirements:
24
24
  - - ~>
@@ -26,10 +26,10 @@ dependencies:
26
26
  version: 3.1.0
27
27
  type: :runtime
28
28
  prerelease: false
29
- version_requirements: *70364269012360
29
+ version_requirements: *70303062943180
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: activemodel
32
- requirement: &70364269011880 !ruby/object:Gem::Requirement
32
+ requirement: &70303062942700 !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
35
  - - ~>
@@ -37,10 +37,10 @@ dependencies:
37
37
  version: 3.1.0
38
38
  type: :runtime
39
39
  prerelease: false
40
- version_requirements: *70364269011880
40
+ version_requirements: *70303062942700
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: selectable_attr
43
- requirement: &70364269011400 !ruby/object:Gem::Requirement
43
+ requirement: &70303062942220 !ruby/object:Gem::Requirement
44
44
  none: false
45
45
  requirements:
46
46
  - - ~>
@@ -48,10 +48,10 @@ dependencies:
48
48
  version: 0.3.15
49
49
  type: :runtime
50
50
  prerelease: false
51
- version_requirements: *70364269011400
51
+ version_requirements: *70303062942220
52
52
  - !ruby/object:Gem::Dependency
53
53
  name: bson
54
- requirement: &70364269005160 !ruby/object:Gem::Requirement
54
+ requirement: &70303062941740 !ruby/object:Gem::Requirement
55
55
  none: false
56
56
  requirements:
57
57
  - - ~>
@@ -59,10 +59,10 @@ dependencies:
59
59
  version: 1.5.2
60
60
  type: :runtime
61
61
  prerelease: false
62
- version_requirements: *70364269005160
62
+ version_requirements: *70303062941740
63
63
  - !ruby/object:Gem::Dependency
64
64
  name: bson_ext
65
- requirement: &70364269004560 !ruby/object:Gem::Requirement
65
+ requirement: &70303062941260 !ruby/object:Gem::Requirement
66
66
  none: false
67
67
  requirements:
68
68
  - - ~>
@@ -70,10 +70,10 @@ dependencies:
70
70
  version: 1.5.2
71
71
  type: :runtime
72
72
  prerelease: false
73
- version_requirements: *70364269004560
73
+ version_requirements: *70303062941260
74
74
  - !ruby/object:Gem::Dependency
75
75
  name: mongo
76
- requirement: &70364269003980 !ruby/object:Gem::Requirement
76
+ requirement: &70303062940780 !ruby/object:Gem::Requirement
77
77
  none: false
78
78
  requirements:
79
79
  - - ~>
@@ -81,10 +81,10 @@ dependencies:
81
81
  version: 1.5.2
82
82
  type: :runtime
83
83
  prerelease: false
84
- version_requirements: *70364269003980
84
+ version_requirements: *70303062940780
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: mongoid
87
- requirement: &70364269003460 !ruby/object:Gem::Requirement
87
+ requirement: &70303062940300 !ruby/object:Gem::Requirement
88
88
  none: false
89
89
  requirements:
90
90
  - - ~>
@@ -92,10 +92,10 @@ dependencies:
92
92
  version: 2.3.3
93
93
  type: :runtime
94
94
  prerelease: false
95
- version_requirements: *70364269003460
95
+ version_requirements: *70303062940300
96
96
  - !ruby/object:Gem::Dependency
97
97
  name: tengine_support
98
- requirement: &70364269002860 !ruby/object:Gem::Requirement
98
+ requirement: &70303062939820 !ruby/object:Gem::Requirement
99
99
  none: false
100
100
  requirements:
101
101
  - - ~>
@@ -103,10 +103,10 @@ dependencies:
103
103
  version: 0.3.12
104
104
  type: :runtime
105
105
  prerelease: false
106
- version_requirements: *70364269002860
106
+ version_requirements: *70303062939820
107
107
  - !ruby/object:Gem::Dependency
108
108
  name: tengine_event
109
- requirement: &70364269002200 !ruby/object:Gem::Requirement
109
+ requirement: &70303062939340 !ruby/object:Gem::Requirement
110
110
  none: false
111
111
  requirements:
112
112
  - - ~>
@@ -114,10 +114,10 @@ dependencies:
114
114
  version: 0.4.0
115
115
  type: :runtime
116
116
  prerelease: false
117
- version_requirements: *70364269002200
117
+ version_requirements: *70303062939340
118
118
  - !ruby/object:Gem::Dependency
119
119
  name: daemons
120
- requirement: &70364269001540 !ruby/object:Gem::Requirement
120
+ requirement: &70303062955240 !ruby/object:Gem::Requirement
121
121
  none: false
122
122
  requirements:
123
123
  - - ~>
@@ -125,10 +125,10 @@ dependencies:
125
125
  version: 1.1.4
126
126
  type: :runtime
127
127
  prerelease: false
128
- version_requirements: *70364269001540
128
+ version_requirements: *70303062955240
129
129
  - !ruby/object:Gem::Dependency
130
130
  name: rspec
131
- requirement: &70364269000960 !ruby/object:Gem::Requirement
131
+ requirement: &70303062954760 !ruby/object:Gem::Requirement
132
132
  none: false
133
133
  requirements:
134
134
  - - ~>
@@ -136,10 +136,10 @@ dependencies:
136
136
  version: 2.6.0
137
137
  type: :development
138
138
  prerelease: false
139
- version_requirements: *70364269000960
139
+ version_requirements: *70303062954760
140
140
  - !ruby/object:Gem::Dependency
141
141
  name: factory_girl
142
- requirement: &70364269000440 !ruby/object:Gem::Requirement
142
+ requirement: &70303062954280 !ruby/object:Gem::Requirement
143
143
  none: false
144
144
  requirements:
145
145
  - - ~>
@@ -147,10 +147,10 @@ dependencies:
147
147
  version: 2.1.2
148
148
  type: :development
149
149
  prerelease: false
150
- version_requirements: *70364269000440
150
+ version_requirements: *70303062954280
151
151
  - !ruby/object:Gem::Dependency
152
152
  name: yard
153
- requirement: &70364268999840 !ruby/object:Gem::Requirement
153
+ requirement: &70303062953800 !ruby/object:Gem::Requirement
154
154
  none: false
155
155
  requirements:
156
156
  - - ~>
@@ -158,10 +158,10 @@ dependencies:
158
158
  version: 0.7.2
159
159
  type: :development
160
160
  prerelease: false
161
- version_requirements: *70364268999840
161
+ version_requirements: *70303062953800
162
162
  - !ruby/object:Gem::Dependency
163
163
  name: bundler
164
- requirement: &70364268999260 !ruby/object:Gem::Requirement
164
+ requirement: &70303062953320 !ruby/object:Gem::Requirement
165
165
  none: false
166
166
  requirements:
167
167
  - - ~>
@@ -169,10 +169,10 @@ dependencies:
169
169
  version: 1.0.18
170
170
  type: :development
171
171
  prerelease: false
172
- version_requirements: *70364268999260
172
+ version_requirements: *70303062953320
173
173
  - !ruby/object:Gem::Dependency
174
174
  name: jeweler
175
- requirement: &70364268998660 !ruby/object:Gem::Requirement
175
+ requirement: &70303062952840 !ruby/object:Gem::Requirement
176
176
  none: false
177
177
  requirements:
178
178
  - - ~>
@@ -180,10 +180,10 @@ dependencies:
180
180
  version: 1.6.4
181
181
  type: :development
182
182
  prerelease: false
183
- version_requirements: *70364268998660
183
+ version_requirements: *70303062952840
184
184
  - !ruby/object:Gem::Dependency
185
185
  name: simplecov
186
- requirement: &70364268998100 !ruby/object:Gem::Requirement
186
+ requirement: &70303062952360 !ruby/object:Gem::Requirement
187
187
  none: false
188
188
  requirements:
189
189
  - - ~>
@@ -191,10 +191,10 @@ dependencies:
191
191
  version: 0.5.3
192
192
  type: :development
193
193
  prerelease: false
194
- version_requirements: *70364268998100
194
+ version_requirements: *70303062952360
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: ZenTest
197
- requirement: &70364268997540 !ruby/object:Gem::Requirement
197
+ requirement: &70303062951880 !ruby/object:Gem::Requirement
198
198
  none: false
199
199
  requirements:
200
200
  - - ~>
@@ -202,10 +202,10 @@ dependencies:
202
202
  version: 4.6.2
203
203
  type: :development
204
204
  prerelease: false
205
- version_requirements: *70364268997540
205
+ version_requirements: *70303062951880
206
206
  - !ruby/object:Gem::Dependency
207
207
  name: rdiscount
208
- requirement: &70364268989600 !ruby/object:Gem::Requirement
208
+ requirement: &70303062951400 !ruby/object:Gem::Requirement
209
209
  none: false
210
210
  requirements:
211
211
  - - ! '>='
@@ -213,10 +213,10 @@ dependencies:
213
213
  version: '0'
214
214
  type: :development
215
215
  prerelease: false
216
- version_requirements: *70364268989600
216
+ version_requirements: *70303062951400
217
217
  - !ruby/object:Gem::Dependency
218
218
  name: kramdown
219
- requirement: &70364268989000 !ruby/object:Gem::Requirement
219
+ requirement: &70303062950920 !ruby/object:Gem::Requirement
220
220
  none: false
221
221
  requirements:
222
222
  - - ! '>='
@@ -224,7 +224,7 @@ dependencies:
224
224
  version: '0'
225
225
  type: :development
226
226
  prerelease: false
227
- version_requirements: *70364268989000
227
+ version_requirements: *70303062950920
228
228
  description: tengine_core is a framework/engine to support distributed processing
229
229
  email: tengine@nautilus-technologies.com
230
230
  executables:
@@ -418,4 +418,3 @@ signing_key:
418
418
  specification_version: 3
419
419
  summary: tengine_core is a framework/engine to support distributed processing
420
420
  test_files: []
421
- has_rdoc: