moped 2.0.4 → 2.0.5
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/CHANGELOG.md +9 -0
- data/lib/moped/collection.rb +7 -3
- data/lib/moped/errors.rb +1 -1
- data/lib/moped/query.rb +31 -24
- data/lib/moped/read_preference/selectable.rb +2 -35
- data/lib/moped/retryable.rb +46 -0
- data/lib/moped/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7dba3a2f186d5c84ba26637291643efa327c261b
|
4
|
+
data.tar.gz: 54733a6e86b6552dc7e3bf7ea2225d4326833404
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65a84b04bf7da4ca7866ca74653e3024b786333cd41a2f313d5c8a5493d7e2d49b238089e7627e771c04b828e496bbff202d1729cfcc0e109e552c3ec34079f2
|
7
|
+
data.tar.gz: e41dfe9ef081ba6bca54b9cf9c154d9f57788a84066644388f6ba28a8c51c883fa2da0e9a7a0dad03c57708e34f747887e9bb4b99563bf331a6fa448afe92ffe
|
data/CHANGELOG.md
CHANGED
data/lib/moped/collection.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require "moped/query"
|
3
|
+
require "moped/retryable"
|
3
4
|
|
4
5
|
module Moped
|
5
6
|
|
@@ -8,6 +9,7 @@ module Moped
|
|
8
9
|
# @since 1.0.0
|
9
10
|
class Collection
|
10
11
|
include Readable
|
12
|
+
include Retryable
|
11
13
|
|
12
14
|
# @!attribute database
|
13
15
|
# @return [ Database ] The database for the collection.
|
@@ -120,9 +122,11 @@ module Moped
|
|
120
122
|
#
|
121
123
|
# @since 1.0.0
|
122
124
|
def insert(documents, flags = nil)
|
123
|
-
|
124
|
-
|
125
|
-
|
125
|
+
with_retry(cluster) do
|
126
|
+
docs = documents.is_a?(Array) ? documents : [ documents ]
|
127
|
+
cluster.with_primary do |node|
|
128
|
+
node.insert(database.name, name, docs, write_concern, flags: flags || [])
|
129
|
+
end
|
126
130
|
end
|
127
131
|
end
|
128
132
|
|
data/lib/moped/errors.rb
CHANGED
@@ -112,7 +112,7 @@ module Moped
|
|
112
112
|
class PotentialReconfiguration < MongoError
|
113
113
|
|
114
114
|
# Not master error codes.
|
115
|
-
NOT_MASTER = [ 13435, 13436, 10009 ]
|
115
|
+
NOT_MASTER = [ 13435, 13436, 10009, 15986 ]
|
116
116
|
|
117
117
|
# Error codes received around reconfiguration
|
118
118
|
CONNECTION_ERRORS_RECONFIGURATION = [ 15988, 10276, 11600, 9001, 13639, 10009, 11002 ]
|
data/lib/moped/query.rb
CHANGED
@@ -21,6 +21,7 @@ module Moped
|
|
21
21
|
# people.find.count # => 1
|
22
22
|
class Query
|
23
23
|
include Enumerable
|
24
|
+
include Retryable
|
24
25
|
|
25
26
|
# @attribute [r] collection The collection to execute the query on.
|
26
27
|
# @attribute [r] operation The query operation.
|
@@ -321,14 +322,16 @@ module Moped
|
|
321
322
|
#
|
322
323
|
# @since 1.0.0
|
323
324
|
def remove
|
324
|
-
cluster
|
325
|
-
node
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
325
|
+
with_retry(cluster) do
|
326
|
+
cluster.with_primary do |node|
|
327
|
+
node.remove(
|
328
|
+
operation.database,
|
329
|
+
operation.collection,
|
330
|
+
operation.basic_selector,
|
331
|
+
write_concern,
|
332
|
+
flags: [ :remove_first ]
|
333
|
+
)
|
334
|
+
end
|
332
335
|
end
|
333
336
|
end
|
334
337
|
|
@@ -341,13 +344,15 @@ module Moped
|
|
341
344
|
#
|
342
345
|
# @since 1.0.0
|
343
346
|
def remove_all
|
344
|
-
cluster
|
345
|
-
node
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
347
|
+
with_retry(cluster) do
|
348
|
+
cluster.with_primary do |node|
|
349
|
+
node.remove(
|
350
|
+
operation.database,
|
351
|
+
operation.collection,
|
352
|
+
operation.basic_selector,
|
353
|
+
write_concern
|
354
|
+
)
|
355
|
+
end
|
351
356
|
end
|
352
357
|
end
|
353
358
|
|
@@ -423,15 +428,17 @@ module Moped
|
|
423
428
|
#
|
424
429
|
# @since 1.0.0
|
425
430
|
def update(change, flags = nil)
|
426
|
-
cluster
|
427
|
-
node
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
431
|
+
with_retry(cluster) do
|
432
|
+
cluster.with_primary do |node|
|
433
|
+
node.update(
|
434
|
+
operation.database,
|
435
|
+
operation.collection,
|
436
|
+
operation.selector["$query"] || operation.selector,
|
437
|
+
change,
|
438
|
+
write_concern,
|
439
|
+
flags: flags
|
440
|
+
)
|
441
|
+
end
|
435
442
|
end
|
436
443
|
end
|
437
444
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
require "moped/retryable"
|
2
3
|
module Moped
|
3
4
|
module ReadPreference
|
4
5
|
|
@@ -7,6 +8,7 @@ module Moped
|
|
7
8
|
#
|
8
9
|
# @since 2.0.0
|
9
10
|
module Selectable
|
11
|
+
include Retryable
|
10
12
|
|
11
13
|
# @!attribute tags
|
12
14
|
# @return [ Array<Hash> ] The tag sets.
|
@@ -39,41 +41,6 @@ module Moped
|
|
39
41
|
options[:flags] |= [ :slave_ok ]
|
40
42
|
options
|
41
43
|
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
|
-
# Execute the provided block on the cluster and retry if the execution
|
46
|
-
# fails.
|
47
|
-
#
|
48
|
-
# @api private
|
49
|
-
#
|
50
|
-
# @example Execute with retry.
|
51
|
-
# preference.with_retry(cluster) do
|
52
|
-
# cluster.with_primary do |node|
|
53
|
-
# node.refresh
|
54
|
-
# end
|
55
|
-
# end
|
56
|
-
#
|
57
|
-
# @param [ Cluster ] cluster The cluster.
|
58
|
-
# @param [ Integer ] retries The number of times to retry.
|
59
|
-
#
|
60
|
-
# @return [ Object ] The result of the block.
|
61
|
-
#
|
62
|
-
# @since 2.0.0
|
63
|
-
def with_retry(cluster, retries = cluster.max_retries, &block)
|
64
|
-
begin
|
65
|
-
block.call
|
66
|
-
rescue Errors::ConnectionFailure => e
|
67
|
-
if retries > 0
|
68
|
-
Loggable.warn(" MOPED:", "Retrying connection attempt #{retries} more time(s).", "n/a")
|
69
|
-
sleep(cluster.retry_interval)
|
70
|
-
cluster.refresh
|
71
|
-
with_retry(cluster, retries - 1, &block)
|
72
|
-
else
|
73
|
-
raise e
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
44
|
end
|
78
45
|
end
|
79
46
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Moped
|
3
|
+
# Provides the shared behaviour for retry failed operations.
|
4
|
+
#
|
5
|
+
# @since 2.0.0
|
6
|
+
module Retryable
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
# Execute the provided block on the cluster and retry if the execution
|
11
|
+
# fails.
|
12
|
+
#
|
13
|
+
# @api private
|
14
|
+
#
|
15
|
+
# @example Execute with retry.
|
16
|
+
# preference.with_retry(cluster) do
|
17
|
+
# cluster.with_primary do |node|
|
18
|
+
# node.refresh
|
19
|
+
# end
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# @param [ Cluster ] cluster The cluster.
|
23
|
+
# @param [ Integer ] retries The number of times to retry.
|
24
|
+
#
|
25
|
+
# @return [ Object ] The result of the block.
|
26
|
+
#
|
27
|
+
# @since 2.0.0
|
28
|
+
def with_retry(cluster, retries = cluster.max_retries, &block)
|
29
|
+
begin
|
30
|
+
block.call
|
31
|
+
rescue Errors::ConnectionFailure, Errors::PotentialReconfiguration => e
|
32
|
+
raise e if e.is_a?(Errors::PotentialReconfiguration) &&
|
33
|
+
! (e.message.include?("not master") || e.message.include?("Not primary"))
|
34
|
+
|
35
|
+
if retries > 0
|
36
|
+
Loggable.warn(" MOPED:", "Retrying connection attempt #{retries} more time(s).", "n/a")
|
37
|
+
sleep(cluster.retry_interval)
|
38
|
+
cluster.refresh
|
39
|
+
with_retry(cluster, retries - 1, &block)
|
40
|
+
else
|
41
|
+
raise e
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/moped/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moped
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Durran Jordan
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-06-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bson
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
20
|
+
version: 3.0.4
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
27
|
+
version: 3.0.4
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: connection_pool
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,6 +114,7 @@ files:
|
|
114
114
|
- lib/moped/read_preference/secondary_preferred.rb
|
115
115
|
- lib/moped/read_preference/selectable.rb
|
116
116
|
- lib/moped/readable.rb
|
117
|
+
- lib/moped/retryable.rb
|
117
118
|
- lib/moped/session.rb
|
118
119
|
- lib/moped/uri.rb
|
119
120
|
- lib/moped/version.rb
|