mongo 2.1.0.beta → 2.1.0.rc0
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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/Rakefile +2 -2
- data/lib/mongo.rb +2 -3
- data/lib/mongo/address.rb +7 -5
- data/lib/mongo/address/unix.rb +2 -2
- data/lib/mongo/auth/ldap/conversation.rb +6 -2
- data/lib/mongo/auth/scram/conversation.rb +8 -2
- data/lib/mongo/auth/user/view.rb +21 -0
- data/lib/mongo/bulk_write.rb +155 -23
- data/lib/mongo/bulk_write/combineable.rb +51 -0
- data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
- data/lib/mongo/bulk_write/result.rb +61 -8
- data/lib/mongo/bulk_write/result_combiner.rb +117 -0
- data/lib/mongo/bulk_write/transformable.rb +117 -0
- data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
- data/lib/mongo/bulk_write/validatable.rb +62 -0
- data/lib/mongo/client.rb +7 -3
- data/lib/mongo/cluster.rb +3 -3
- data/lib/mongo/cluster/topology/replica_set.rb +8 -6
- data/lib/mongo/cluster/topology/unknown.rb +5 -2
- data/lib/mongo/collection.rb +75 -4
- data/lib/mongo/collection/view.rb +1 -2
- data/lib/mongo/collection/view/aggregation.rb +13 -8
- data/lib/mongo/collection/view/immutable.rb +6 -6
- data/lib/mongo/collection/view/iterable.rb +13 -4
- data/lib/mongo/collection/view/map_reduce.rb +22 -17
- data/lib/mongo/collection/view/readable.rb +121 -70
- data/lib/mongo/cursor.rb +5 -1
- data/lib/mongo/database.rb +3 -3
- data/lib/mongo/database/view.rb +1 -1
- data/lib/mongo/error.rb +7 -0
- data/lib/mongo/{bulk_write/unordered_bulk_write.rb → error/closed_stream.rb} +12 -21
- data/lib/mongo/{bulk_write/ordered_bulk_write.rb → error/extra_file_chunk.rb} +13 -27
- data/lib/mongo/error/file_not_found.rb +37 -0
- data/lib/mongo/error/invalid_file.rb +2 -2
- data/lib/mongo/error/invalid_file_revision.rb +37 -0
- data/lib/mongo/error/invalid_uri.rb +5 -4
- data/lib/mongo/error/missing_file_chunk.rb +38 -0
- data/lib/mongo/error/operation_failure.rb +1 -1
- data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
- data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
- data/lib/mongo/grid.rb +2 -1
- data/lib/mongo/grid/file.rb +12 -9
- data/lib/mongo/grid/file/chunk.rb +6 -6
- data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
- data/lib/mongo/grid/fs_bucket.rb +441 -0
- data/lib/mongo/grid/stream.rb +64 -0
- data/lib/mongo/grid/stream/read.rb +208 -0
- data/lib/mongo/grid/stream/write.rb +187 -0
- data/lib/mongo/index/view.rb +1 -1
- data/lib/mongo/loggable.rb +34 -57
- data/lib/mongo/logger.rb +16 -78
- data/lib/mongo/monitoring.rb +1 -5
- data/lib/mongo/monitoring/command_log_subscriber.rb +35 -17
- data/lib/mongo/monitoring/event/command_succeeded.rb +20 -1
- data/lib/mongo/monitoring/publishable.rb +22 -12
- data/lib/mongo/operation.rb +3 -6
- data/lib/mongo/operation/commands.rb +24 -0
- data/lib/mongo/operation/{aggregate.rb → commands/aggregate.rb} +3 -41
- data/lib/mongo/operation/{aggregate → commands/aggregate}/result.rb +0 -0
- data/lib/mongo/operation/commands/collections_info.rb +66 -0
- data/lib/mongo/operation/{command.rb → commands/command.rb} +2 -18
- data/lib/mongo/operation/commands/indexes.rb +70 -0
- data/lib/mongo/operation/commands/list_collections.rb +54 -0
- data/lib/mongo/operation/commands/list_collections/result.rb +112 -0
- data/lib/mongo/operation/commands/list_indexes.rb +56 -0
- data/lib/mongo/operation/commands/list_indexes/result.rb +115 -0
- data/lib/mongo/operation/{map_reduce.rb → commands/map_reduce.rb} +3 -41
- data/lib/mongo/operation/{map_reduce → commands/map_reduce}/result.rb +0 -0
- data/lib/mongo/operation/{parallel_scan.rb → commands/parallel_scan.rb} +3 -23
- data/lib/mongo/operation/{parallel_scan → commands/parallel_scan}/result.rb +0 -0
- data/lib/mongo/operation/commands/user_query.rb +69 -0
- data/lib/mongo/operation/commands/users_info.rb +53 -0
- data/lib/mongo/operation/commands/users_info/result.rb +36 -0
- data/lib/mongo/operation/executable.rb +4 -68
- data/lib/mongo/operation/kill_cursors.rb +3 -3
- data/lib/mongo/operation/read.rb +0 -4
- data/lib/mongo/operation/read/get_more.rb +2 -22
- data/lib/mongo/operation/read/query.rb +2 -21
- data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
- data/lib/mongo/operation/specifiable.rb +24 -0
- data/lib/mongo/operation/write.rb +2 -0
- data/lib/mongo/operation/write/bulk.rb +6 -3
- data/lib/mongo/operation/write/bulk/bulkable.rb +82 -0
- data/lib/mongo/operation/write/bulk/delete.rb +71 -0
- data/lib/mongo/operation/write/bulk/delete/result.rb +74 -0
- data/lib/mongo/operation/write/bulk/insert.rb +96 -0
- data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
- data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
- data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
- data/lib/mongo/operation/write/bulk/update.rb +81 -0
- data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
- data/lib/mongo/operation/write/command/create_index.rb +0 -1
- data/lib/mongo/operation/write/command/create_user.rb +0 -1
- data/lib/mongo/operation/write/command/delete.rb +0 -1
- data/lib/mongo/operation/write/command/drop_index.rb +0 -1
- data/lib/mongo/operation/write/command/insert.rb +0 -1
- data/lib/mongo/operation/write/command/remove_user.rb +0 -1
- data/lib/mongo/operation/write/command/update.rb +0 -1
- data/lib/mongo/operation/write/command/update_user.rb +0 -1
- data/lib/mongo/operation/write/command/writable.rb +13 -18
- data/lib/mongo/operation/write/create_index.rb +4 -27
- data/lib/mongo/operation/write/create_user.rb +4 -30
- data/lib/mongo/operation/write/delete.rb +5 -28
- data/lib/mongo/operation/write/drop_index.rb +3 -3
- data/lib/mongo/operation/write/gle.rb +48 -0
- data/lib/mongo/operation/write/idable.rb +5 -0
- data/lib/mongo/operation/write/insert.rb +2 -24
- data/lib/mongo/operation/write/remove_user.rb +4 -27
- data/lib/mongo/operation/write/update.rb +4 -32
- data/lib/mongo/operation/write/update_user.rb +4 -30
- data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
- data/lib/mongo/options/mapper.rb +4 -2
- data/lib/mongo/protocol/delete.rb +68 -3
- data/lib/mongo/protocol/get_more.rb +54 -2
- data/lib/mongo/protocol/insert.rb +59 -1
- data/lib/mongo/protocol/kill_cursors.rb +53 -4
- data/lib/mongo/protocol/message.rb +12 -12
- data/lib/mongo/protocol/query.rb +139 -65
- data/lib/mongo/protocol/reply.rb +69 -1
- data/lib/mongo/protocol/update.rb +70 -1
- data/lib/mongo/server/connection.rb +11 -3
- data/lib/mongo/server/description.rb +29 -0
- data/lib/mongo/server/description/features.rb +2 -1
- data/lib/mongo/server/monitor.rb +2 -2
- data/lib/mongo/server_selector.rb +14 -10
- data/lib/mongo/server_selector/selectable.rb +24 -22
- data/lib/mongo/socket.rb +6 -3
- data/lib/mongo/socket/tcp.rb +2 -2
- data/lib/mongo/socket/unix.rb +5 -8
- data/lib/mongo/uri.rb +243 -139
- data/lib/mongo/version.rb +1 -1
- data/spec/mongo/address/unix_spec.rb +1 -1
- data/spec/mongo/address_spec.rb +25 -0
- data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
- data/spec/mongo/auth/user/view_spec.rb +26 -1
- data/spec/mongo/bulk_write/ordered_combiner_spec.rb +271 -0
- data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
- data/spec/mongo/bulk_write_spec.rb +332 -166
- data/spec/mongo/client_spec.rb +25 -0
- data/spec/mongo/cluster/topology/replica_set_spec.rb +2 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +65 -0
- data/spec/mongo/collection/view/immutable_spec.rb +103 -0
- data/spec/mongo/collection/view/map_reduce_spec.rb +98 -3
- data/spec/mongo/collection/view/readable_spec.rb +17 -30
- data/spec/mongo/collection/view_spec.rb +233 -7
- data/spec/mongo/collection_spec.rb +360 -18
- data/spec/mongo/command_monitoring_spec.rb +51 -0
- data/spec/mongo/connection_string_spec.rb +137 -0
- data/spec/mongo/database_spec.rb +27 -11
- data/spec/mongo/grid/file/chunk_spec.rb +5 -5
- data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
- data/spec/mongo/grid/file_spec.rb +8 -8
- data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
- data/spec/mongo/grid/stream/read_spec.rb +275 -0
- data/spec/mongo/grid/stream/write_spec.rb +440 -0
- data/spec/mongo/grid/stream_spec.rb +48 -0
- data/spec/mongo/gridfs_spec.rb +50 -0
- data/spec/mongo/logger_spec.rb +0 -40
- data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
- data/spec/mongo/operation/{aggregate_spec.rb → commands/aggregate_spec.rb} +0 -42
- data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
- data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +0 -0
- data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
- data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +0 -18
- data/spec/mongo/operation/kill_cursors_spec.rb +1 -1
- data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
- data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +1 -12
- data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +1 -12
- data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +1 -12
- data/spec/mongo/operation/write/insert_spec.rb +0 -11
- data/spec/mongo/protocol/kill_cursors_spec.rb +5 -3
- data/spec/mongo/server/description_spec.rb +42 -0
- data/spec/mongo/server/monitor_spec.rb +21 -0
- data/spec/mongo/server_discovery_and_monitoring_spec.rb +1 -0
- data/spec/mongo/server_selection_spec.rb +3 -3
- data/spec/mongo/server_selector/nearest_spec.rb +34 -27
- data/spec/mongo/server_selector/primary_preferred_spec.rb +31 -30
- data/spec/mongo/server_selector/primary_spec.rb +14 -13
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +27 -26
- data/spec/mongo/server_selector/secondary_spec.rb +23 -22
- data/spec/mongo/server_selector_spec.rb +87 -24
- data/spec/mongo/socket/unix_spec.rb +52 -0
- data/spec/mongo/uri_spec.rb +251 -39
- data/spec/spec_helper.rb +11 -4
- data/spec/support/authorization.rb +4 -5
- data/spec/support/command_monitoring.rb +365 -0
- data/spec/support/command_monitoring/bulkWrite.yml +73 -0
- data/spec/support/command_monitoring/command.yml +42 -0
- data/spec/support/command_monitoring/deleteMany.yml +55 -0
- data/spec/support/command_monitoring/deleteOne.yml +55 -0
- data/spec/support/command_monitoring/find.yml +219 -0
- data/spec/support/command_monitoring/insertMany.yml +81 -0
- data/spec/support/command_monitoring/insertOne.yml +51 -0
- data/spec/support/command_monitoring/updateMany.yml +67 -0
- data/spec/support/command_monitoring/updateOne.yml +95 -0
- data/spec/support/connection_string.rb +228 -0
- data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
- data/spec/support/connection_string_tests/valid-auth.yml +256 -0
- data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
- data/spec/support/connection_string_tests/valid-options.yml +30 -0
- data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
- data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
- data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
- data/spec/support/crud.rb +3 -1
- data/spec/support/crud/read.rb +14 -10
- data/spec/support/crud/write.rb +36 -9
- data/spec/support/gridfs.rb +637 -0
- data/spec/support/gridfs_tests/delete.yml +157 -0
- data/spec/support/gridfs_tests/download.yml +210 -0
- data/spec/support/gridfs_tests/download_by_name.yml +113 -0
- data/spec/support/gridfs_tests/upload.yml +158 -0
- data/spec/support/sdam/rs/equal_electionids.yml +1 -2
- data/spec/support/sdam/rs/new_primary_new_electionid.yml +0 -3
- data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
- data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
- data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
- data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
- data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
- data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
- data/spec/support/sdam/single/not_ok_response.yml +0 -1
- data/spec/support/server_discovery_and_monitoring.rb +3 -1
- data/spec/support/server_selection.rb +3 -1
- data/spec/support/shared/bulk_write.rb +192 -0
- data/spec/support/shared/server_selector.rb +21 -12
- metadata +147 -57
- metadata.gz.sig +0 -0
- data/lib/mongo/bulk_write/bulk_writable.rb +0 -252
- data/lib/mongo/bulk_write/deletable.rb +0 -57
- data/lib/mongo/bulk_write/insertable.rb +0 -49
- data/lib/mongo/bulk_write/replacable.rb +0 -58
- data/lib/mongo/bulk_write/updatable.rb +0 -69
- data/lib/mongo/grid/fs.rb +0 -146
- data/lib/mongo/operation/list_collections/result.rb +0 -114
- data/lib/mongo/operation/list_indexes/result.rb +0 -118
- data/lib/mongo/operation/read/collections_info.rb +0 -68
- data/lib/mongo/operation/read/indexes.rb +0 -69
- data/lib/mongo/operation/read/list_collections.rb +0 -76
- data/lib/mongo/operation/read/list_indexes.rb +0 -78
- data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
- data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
- data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
- data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
- data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
- data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
- data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -174
- data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
- data/spec/mongo/grid/fs_spec.rb +0 -160
- data/spec/mongo/loggable_spec.rb +0 -63
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a265ed462b59e6b5130e74d96dcd8fd03bd1cf8
|
4
|
+
data.tar.gz: df80f1545fc13f8cbbbaa41b7b2994a396eea58d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8fda95db660cc8690ebb838e7bc037614b34c67e03cb8a397dc9c467acbc27d2b8b39ff9af9ec396a03d86ab4e818dd4f3a333744e2727b7e0612d7e7069f30
|
7
|
+
data.tar.gz: 5845e5ca349dea175a1001e696d0df2600578cb7163bd236eefa4700f9492ee247feccbd46f9c2ef5e1400e31050629738820c824da69fe25f70dff4f86b7465
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/Rakefile
CHANGED
@@ -29,8 +29,8 @@ namespace :spec do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
task :release => :spec do
|
32
|
-
system "git tag -a #{Mongo::VERSION} -m 'Tagging release: #{Mongo::VERSION}'"
|
33
|
-
system "git push --tags"
|
32
|
+
#system "git tag -a #{Mongo::VERSION} -m 'Tagging release: #{Mongo::VERSION}'"
|
33
|
+
#system "git push --tags"
|
34
34
|
system "gem build mongo.gemspec"
|
35
35
|
system "gem push mongo-#{Mongo::VERSION}.gem"
|
36
36
|
system "rm mongo-#{Mongo::VERSION}.gem"
|
data/lib/mongo.rb
CHANGED
@@ -15,14 +15,14 @@
|
|
15
15
|
require 'forwardable'
|
16
16
|
require 'bson'
|
17
17
|
require 'openssl'
|
18
|
-
require 'mongo/monitoring'
|
19
18
|
require 'mongo/loggable'
|
19
|
+
require 'mongo/monitoring'
|
20
20
|
require 'mongo/logger'
|
21
|
+
require 'mongo/operation'
|
21
22
|
require 'mongo/error'
|
22
23
|
require 'mongo/event'
|
23
24
|
require 'mongo/address'
|
24
25
|
require 'mongo/auth'
|
25
|
-
require 'mongo/bulk_write'
|
26
26
|
require 'mongo/client'
|
27
27
|
require 'mongo/cluster'
|
28
28
|
require 'mongo/collection'
|
@@ -31,7 +31,6 @@ require 'mongo/database'
|
|
31
31
|
require 'mongo/dbref'
|
32
32
|
require 'mongo/grid'
|
33
33
|
require 'mongo/index'
|
34
|
-
require 'mongo/operation'
|
35
34
|
require 'mongo/options'
|
36
35
|
require 'mongo/protocol'
|
37
36
|
require 'mongo/server'
|
data/lib/mongo/address.rb
CHANGED
@@ -144,14 +144,16 @@ module Mongo
|
|
144
144
|
private
|
145
145
|
|
146
146
|
def initialize_resolver!(timeout, ssl_options)
|
147
|
+
return Unix.new(seed.downcase) if seed.downcase =~ Unix::MATCH
|
148
|
+
|
147
149
|
family = (host == 'localhost') ? ::Socket::AF_INET : ::Socket::AF_UNSPEC
|
148
150
|
error = nil
|
149
|
-
::Socket.getaddrinfo(host, nil, family, ::Socket::SOCK_STREAM).
|
151
|
+
::Socket.getaddrinfo(host, nil, family, ::Socket::SOCK_STREAM).each do |info|
|
150
152
|
begin
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
rescue IOError, SystemCallError => e
|
153
|
+
res = FAMILY_MAP[info[4]].new(info[3], port, host)
|
154
|
+
res.socket(timeout, ssl_options).connect!.close
|
155
|
+
return res
|
156
|
+
rescue IOError, SystemCallError, Error::SocketError => e
|
155
157
|
error = e
|
156
158
|
end
|
157
159
|
end
|
data/lib/mongo/address/unix.rb
CHANGED
@@ -60,7 +60,7 @@ module Mongo
|
|
60
60
|
# Get a socket for the provided address type, given the options.
|
61
61
|
#
|
62
62
|
# @example Get a Unix socket.
|
63
|
-
#
|
63
|
+
# address.socket(5)
|
64
64
|
#
|
65
65
|
# @param [ Float ] timeout The socket timeout.
|
66
66
|
# @param [ Hash ] ssl_options SSL options - ignored.
|
@@ -69,7 +69,7 @@ module Mongo
|
|
69
69
|
#
|
70
70
|
# @since 2.0.0
|
71
71
|
def socket(timeout, ssl_options = {})
|
72
|
-
Socket::Unix.new(host, timeout
|
72
|
+
Socket::Unix.new(host, timeout)
|
73
73
|
end
|
74
74
|
end
|
75
75
|
end
|
@@ -25,7 +25,7 @@ module Mongo
|
|
25
25
|
# The login message.
|
26
26
|
#
|
27
27
|
# @since 2.0.0
|
28
|
-
LOGIN = {
|
28
|
+
LOGIN = { saslStart: 1, autoAuthorize: 1 }.freeze
|
29
29
|
|
30
30
|
# @return [ Protocol::Reply ] reply The current reply in the
|
31
31
|
# conversation.
|
@@ -63,7 +63,7 @@ module Mongo
|
|
63
63
|
Protocol::Query.new(
|
64
64
|
Auth::EXTERNAL,
|
65
65
|
Database::COMMAND,
|
66
|
-
LOGIN.merge(
|
66
|
+
LOGIN.merge(payload: payload, mechanism: LDAP::MECHANISM),
|
67
67
|
limit: -1
|
68
68
|
)
|
69
69
|
end
|
@@ -82,6 +82,10 @@ module Mongo
|
|
82
82
|
|
83
83
|
private
|
84
84
|
|
85
|
+
def payload
|
86
|
+
BSON::Binary.new("\x00#{user.name}\x00#{user.password}")
|
87
|
+
end
|
88
|
+
|
85
89
|
def validate!(reply)
|
86
90
|
raise Unauthorized.new(user) if reply.documents[0]['ok'] != 1
|
87
91
|
@reply = reply
|
@@ -417,7 +417,7 @@ module Mongo
|
|
417
417
|
#
|
418
418
|
# @since 2.0.0
|
419
419
|
def without_proof
|
420
|
-
@
|
420
|
+
@without_proof ||= "c=biws,r=#{rnonce}"
|
421
421
|
end
|
422
422
|
|
423
423
|
# XOR operation for two strings.
|
@@ -429,9 +429,15 @@ module Mongo
|
|
429
429
|
first.bytes.zip(second.bytes).map{ |(a,b)| (a ^ b).chr }.join('')
|
430
430
|
end
|
431
431
|
|
432
|
+
def compare_digest(a, b)
|
433
|
+
check = a.bytesize ^ b.bytesize
|
434
|
+
a.bytes.zip(b.bytes){ |x, y| check |= x ^ y.to_i }
|
435
|
+
check == 0
|
436
|
+
end
|
437
|
+
|
432
438
|
def validate_final_message!(reply)
|
433
439
|
validate!(reply)
|
434
|
-
unless verifier
|
440
|
+
unless compare_digest(verifier, server_signature)
|
435
441
|
raise Error::InvalidSignature.new(verifier, server_signature)
|
436
442
|
end
|
437
443
|
end
|
data/lib/mongo/auth/user/view.rb
CHANGED
@@ -95,8 +95,29 @@ module Mongo
|
|
95
95
|
).execute(next_primary.context)
|
96
96
|
end
|
97
97
|
|
98
|
+
# Get info for a particular user in the database.
|
99
|
+
#
|
100
|
+
# @example Get a particular user's info.
|
101
|
+
# view.info('emily')
|
102
|
+
#
|
103
|
+
# @param [ String ] name The user name.
|
104
|
+
#
|
105
|
+
# @return [ Hash ] A document containing information on a particular user.
|
106
|
+
#
|
107
|
+
# @since 2.1.0
|
108
|
+
def info(name)
|
109
|
+
user_query(name).documents
|
110
|
+
end
|
111
|
+
|
98
112
|
private
|
99
113
|
|
114
|
+
def user_query(name)
|
115
|
+
Operation::UserQuery.new(
|
116
|
+
user_name: name,
|
117
|
+
db_name: database.name
|
118
|
+
).execute(next_primary.context)
|
119
|
+
end
|
120
|
+
|
100
121
|
def generate(user, options)
|
101
122
|
user.is_a?(String) ? Auth::User.new({ user: user }.merge(options)) : user
|
102
123
|
end
|
data/lib/mongo/bulk_write.rb
CHANGED
@@ -12,42 +12,174 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
-
require 'mongo/bulk_write/bulk_writable'
|
16
|
-
require 'mongo/bulk_write/ordered_bulk_write'
|
17
|
-
require 'mongo/bulk_write/unordered_bulk_write'
|
18
15
|
require 'mongo/bulk_write/result'
|
16
|
+
require 'mongo/bulk_write/transformable'
|
17
|
+
require 'mongo/bulk_write/validatable'
|
18
|
+
require 'mongo/bulk_write/combineable'
|
19
|
+
require 'mongo/bulk_write/ordered_combiner'
|
20
|
+
require 'mongo/bulk_write/unordered_combiner'
|
21
|
+
require 'mongo/bulk_write/result_combiner'
|
19
22
|
|
20
23
|
module Mongo
|
21
|
-
|
22
|
-
extend
|
24
|
+
class BulkWrite
|
25
|
+
extend Forwardable
|
23
26
|
|
24
|
-
#
|
27
|
+
# @return [ Mongo::Collection ] collection The collection.
|
28
|
+
attr_reader :collection
|
29
|
+
|
30
|
+
# @return [ Array<Hash, BSON::Document> ] requests The requests.
|
31
|
+
attr_reader :requests
|
32
|
+
|
33
|
+
# @return [ Hash, BSON::Document ] options The options.
|
34
|
+
attr_reader :options
|
35
|
+
|
36
|
+
# Delegate various methods to the collection.
|
37
|
+
def_delegators :@collection, :database, :cluster, :next_primary
|
38
|
+
|
39
|
+
# Execute the bulk write operation.
|
40
|
+
#
|
41
|
+
# @example Execute the bulk write.
|
42
|
+
# bulk_write.execute
|
43
|
+
#
|
44
|
+
# @return [ Mongo::BulkWrite::Result ] The result.
|
45
|
+
#
|
46
|
+
# @since 2.1.0
|
47
|
+
def execute
|
48
|
+
server = next_primary
|
49
|
+
operation_id = Monitoring.next_operation_id
|
50
|
+
result_combiner = ResultCombiner.new
|
51
|
+
operations.each do |operation|
|
52
|
+
execute_operation(
|
53
|
+
operation.keys.first,
|
54
|
+
operation.values.first,
|
55
|
+
server,
|
56
|
+
operation_id,
|
57
|
+
result_combiner
|
58
|
+
)
|
59
|
+
end
|
60
|
+
result_combiner.result
|
61
|
+
end
|
62
|
+
|
63
|
+
# Create the new bulk write operation.
|
25
64
|
#
|
26
|
-
# @
|
27
|
-
# Mongo::BulkWrite.get(collection, operations, ordered: true)
|
65
|
+
# @api private
|
28
66
|
#
|
29
|
-
# @
|
30
|
-
#
|
67
|
+
# @example Create an ordered bulk write.
|
68
|
+
# Mongo::BulkWrite.new(collection, [{ insert_one: { _id: 1 }}])
|
31
69
|
#
|
32
|
-
# @
|
70
|
+
# @example Create an unordered bulk write.
|
71
|
+
# Mongo::BulkWrite.new(collection, [{ insert_one: { _id: 1 }}], ordered: false)
|
33
72
|
#
|
34
|
-
# @
|
73
|
+
# @example Create an ordered mixed bulk write.
|
74
|
+
# Mongo::BulkWrite.new(
|
75
|
+
# collection,
|
76
|
+
# [
|
77
|
+
# { insert_one: { _id: 1 }},
|
78
|
+
# { update_one: { filter: { _id: 0 }, update: { '$set' => { name: 'test' }}}},
|
79
|
+
# { delete_one: { filter: { _id: 2 }}}
|
80
|
+
# ]
|
81
|
+
# )
|
82
|
+
#
|
83
|
+
# @param [ Mongo::Collection ] collection The collection.
|
84
|
+
# @param [ Array<Hash, BSON::Document> ] requests The requests.
|
85
|
+
# @param [ Hash, BSON::Document ] options The options.
|
86
|
+
#
|
87
|
+
# @since 2.1.0
|
88
|
+
def initialize(collection, requests, options = {})
|
89
|
+
@collection = collection
|
90
|
+
@requests = requests
|
91
|
+
@options = options || {}
|
92
|
+
end
|
93
|
+
|
94
|
+
# Is the bulk write ordered?
|
95
|
+
#
|
96
|
+
# @api private
|
97
|
+
#
|
98
|
+
# @example Is the bulk write ordered?
|
99
|
+
# bulk_write.ordered?
|
100
|
+
#
|
101
|
+
# @return [ true, false ] If the bulk write is ordered.
|
102
|
+
#
|
103
|
+
# @since 2.1.0
|
104
|
+
def ordered?
|
105
|
+
@ordered ||= options.fetch(:ordered, true)
|
106
|
+
end
|
107
|
+
|
108
|
+
# Get the write concern for the bulk write.
|
35
109
|
#
|
36
|
-
# @
|
37
|
-
# should be executed in order.
|
38
|
-
# @option options [ Hash ] :write_concern The write concern options.
|
39
|
-
# Can be :w => Integer, :fsync => Boolean, :j => Boolean.
|
110
|
+
# @api private
|
40
111
|
#
|
41
|
-
# @
|
42
|
-
#
|
112
|
+
# @example Get the write concern.
|
113
|
+
# bulk_write.write_concern
|
43
114
|
#
|
44
|
-
# @
|
45
|
-
|
46
|
-
|
47
|
-
|
115
|
+
# @return [ WriteConcern ] The write concern.
|
116
|
+
#
|
117
|
+
# @since 2.1.0
|
118
|
+
def write_concern
|
119
|
+
@write_concern ||= options[:write_concern] ?
|
120
|
+
WriteConcern.get(options[:write_concern]) : collection.write_concern
|
121
|
+
end
|
122
|
+
|
123
|
+
private
|
124
|
+
|
125
|
+
def base_spec(operation_id)
|
126
|
+
{
|
127
|
+
:db_name => database.name,
|
128
|
+
:coll_name => collection.name,
|
129
|
+
:write_concern => write_concern,
|
130
|
+
:ordered => ordered?,
|
131
|
+
:operation_id => operation_id
|
132
|
+
}
|
133
|
+
end
|
134
|
+
|
135
|
+
def execute_operation(name, values, server, operation_id, combiner)
|
136
|
+
begin
|
137
|
+
if values.size > server.max_write_batch_size
|
138
|
+
split_execute(name, values, server, operation_id, combiner)
|
139
|
+
else
|
140
|
+
combiner.combine!(send(name, values, server, operation_id), values.size)
|
141
|
+
end
|
142
|
+
rescue Error::MaxBSONSize, Error::MaxMessageSize => e
|
143
|
+
split_execute(name, values, server, operation_id, combiner)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def operations
|
148
|
+
if ordered?
|
149
|
+
OrderedCombiner.new(requests).combine
|
48
150
|
else
|
49
|
-
|
151
|
+
UnorderedCombiner.new(requests).combine
|
50
152
|
end
|
51
153
|
end
|
154
|
+
|
155
|
+
def split_execute(name, values, server, operation_id, combiner)
|
156
|
+
execute_operation(name, values.shift(values.size / 2), server, operation_id, combiner)
|
157
|
+
execute_operation(name, values, server, operation_id, combiner)
|
158
|
+
end
|
159
|
+
|
160
|
+
def delete(documents, server, operation_id)
|
161
|
+
Operation::Write::Bulk::Delete.new(
|
162
|
+
base_spec(operation_id).merge(:deletes => documents)
|
163
|
+
).execute(server.context)
|
164
|
+
end
|
165
|
+
|
166
|
+
alias :delete_one :delete
|
167
|
+
alias :delete_many :delete
|
168
|
+
|
169
|
+
def insert_one(documents, server, operation_id)
|
170
|
+
Operation::Write::Bulk::Insert.new(
|
171
|
+
base_spec(operation_id).merge(:documents => documents)
|
172
|
+
).execute(server.context)
|
173
|
+
end
|
174
|
+
|
175
|
+
def update(documents, server, operation_id)
|
176
|
+
Operation::Write::Bulk::Update.new(
|
177
|
+
base_spec(operation_id).merge(:updates => documents)
|
178
|
+
).execute(server.context)
|
179
|
+
end
|
180
|
+
|
181
|
+
alias :replace_one :update
|
182
|
+
alias :update_one :update
|
183
|
+
alias :update_many :update
|
52
184
|
end
|
53
185
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class BulkWrite
|
17
|
+
|
18
|
+
# Defines behaviour around combiners
|
19
|
+
#
|
20
|
+
# @api private
|
21
|
+
#
|
22
|
+
# @since 2.1.0
|
23
|
+
module Combineable
|
24
|
+
|
25
|
+
# @return [ Array<Hash, BSON::Document> ] requests The provided requests.
|
26
|
+
attr_reader :requests
|
27
|
+
|
28
|
+
# Create the ordered combiner.
|
29
|
+
#
|
30
|
+
# @api private
|
31
|
+
#
|
32
|
+
# @example Create the ordered combiner.
|
33
|
+
# OrderedCombiner.new([{ insert_one: { _id: 0 }}])
|
34
|
+
#
|
35
|
+
# @param [ Array<Hash, BSON::Document> ] requests The bulk requests.
|
36
|
+
#
|
37
|
+
# @since 2.1.0
|
38
|
+
def initialize(requests)
|
39
|
+
@requests = requests
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def combine_requests(ops)
|
45
|
+
requests.reduce(ops) do |operations, request|
|
46
|
+
add(operations, request.keys.first, request.values.first)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# Copyright (C) 2015 MongoDB, Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module Mongo
|
16
|
+
class BulkWrite
|
17
|
+
|
18
|
+
# Combines groups of bulk write operations in order.
|
19
|
+
#
|
20
|
+
# @api private
|
21
|
+
#
|
22
|
+
# @since 2.1.0
|
23
|
+
class OrderedCombiner
|
24
|
+
include Transformable
|
25
|
+
include Validatable
|
26
|
+
include Combineable
|
27
|
+
|
28
|
+
# Combine the requests in order.
|
29
|
+
#
|
30
|
+
# @api private
|
31
|
+
#
|
32
|
+
# @example Combine the requests.
|
33
|
+
# combiner.combine
|
34
|
+
#
|
35
|
+
# @return [ Array<Hash> ] The combined requests.
|
36
|
+
#
|
37
|
+
# @since 2.1.0
|
38
|
+
def combine
|
39
|
+
combine_requests([])
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def add(operations, name, document)
|
45
|
+
operations.push({ name => []}) if next_group?(name, operations)
|
46
|
+
operations[-1][name].push(transform(name, document))
|
47
|
+
operations
|
48
|
+
end
|
49
|
+
|
50
|
+
def next_group?(name, operations)
|
51
|
+
!operations[-1] || !operations[-1].key?(name)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|