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
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,252 +0,0 @@
|
|
1
|
-
# Copyright (C) 2014-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
|
-
require 'mongo/bulk_write/insertable'
|
16
|
-
require 'mongo/bulk_write/deletable'
|
17
|
-
require 'mongo/bulk_write/updatable'
|
18
|
-
require 'mongo/bulk_write/replacable'
|
19
|
-
|
20
|
-
module Mongo
|
21
|
-
module BulkWrite
|
22
|
-
|
23
|
-
# Defines shared behaviour between ordered and unordered bulk operations.
|
24
|
-
#
|
25
|
-
# @since 2.0.0
|
26
|
-
module BulkWritable
|
27
|
-
include Insertable
|
28
|
-
include Deletable
|
29
|
-
include Updatable
|
30
|
-
include Replacable
|
31
|
-
extend Forwardable
|
32
|
-
|
33
|
-
# Constant for number removed.
|
34
|
-
#
|
35
|
-
# @since 2.1.0
|
36
|
-
REMOVED_COUNT = 'n_removed'.freeze
|
37
|
-
|
38
|
-
# Constant for number inserted.
|
39
|
-
#
|
40
|
-
# @since 2.1.0
|
41
|
-
INSERTED_COUNT = 'n_inserted'.freeze
|
42
|
-
|
43
|
-
# Constant for inserted ids.
|
44
|
-
#
|
45
|
-
# @since 2.1.0
|
46
|
-
INSERTED_IDS = 'inserted_ids'.freeze
|
47
|
-
|
48
|
-
# Constant for number matched.
|
49
|
-
#
|
50
|
-
# @since 2.1.0
|
51
|
-
MATCHED_COUNT = 'n_matched'.freeze
|
52
|
-
|
53
|
-
# Constant for number modified.
|
54
|
-
#
|
55
|
-
# @since 2.1.0
|
56
|
-
MODIFIED_COUNT = 'n_modified'.freeze
|
57
|
-
|
58
|
-
# Constant for number upserted.
|
59
|
-
#
|
60
|
-
# @since 2.1.0
|
61
|
-
UPSERTED_COUNT = 'n_upserted'.freeze
|
62
|
-
|
63
|
-
# Constant for upserted ids.
|
64
|
-
#
|
65
|
-
# @since 2.1.0
|
66
|
-
UPSERTED_IDS = 'upserted_ids'.freeze
|
67
|
-
|
68
|
-
# Constant for indexes.
|
69
|
-
#
|
70
|
-
# @since 2.1.0
|
71
|
-
INDEXES = 'indexes'.freeze
|
72
|
-
|
73
|
-
# The fields contained in the result document returned from executing the
|
74
|
-
# operations.
|
75
|
-
#
|
76
|
-
# @since 2.0.0.
|
77
|
-
RESULT_FIELDS = [
|
78
|
-
INSERTED_COUNT,
|
79
|
-
REMOVED_COUNT,
|
80
|
-
MODIFIED_COUNT,
|
81
|
-
UPSERTED_COUNT,
|
82
|
-
MATCHED_COUNT
|
83
|
-
].freeze
|
84
|
-
|
85
|
-
# Delegate various methods to the collection.
|
86
|
-
def_delegators :@collection, :database, :cluster, :next_primary
|
87
|
-
|
88
|
-
# Initialize a bulk write object.
|
89
|
-
#
|
90
|
-
# @example Initialize a bulk write object.
|
91
|
-
# Mongo::BulkWrite::OrderedBulkWrite.new(collection, operations, options)
|
92
|
-
# Mongo::BulkWrite::UnorderedBulkWrite.new(collection, operations, options)
|
93
|
-
#
|
94
|
-
# @param [ Mongo::Collection ] collection The collection the operations will
|
95
|
-
# be executed on.
|
96
|
-
# @param [ Array<Hash> ] operations The operations to be executed.
|
97
|
-
# @param [ Hash ] options The options.
|
98
|
-
#
|
99
|
-
# @option options [ Hash ] :write_concern The write concern to use for this
|
100
|
-
# bulk write.
|
101
|
-
#
|
102
|
-
# @since 2.0.0
|
103
|
-
def initialize(collection, operations, options)
|
104
|
-
@collection = collection
|
105
|
-
@operations = operations
|
106
|
-
@options = options
|
107
|
-
end
|
108
|
-
|
109
|
-
# Execute the bulk operations.
|
110
|
-
#
|
111
|
-
# @example Execute the operations.
|
112
|
-
# bulk.execute
|
113
|
-
#
|
114
|
-
# @return [ Hash ] The results from the bulk write.
|
115
|
-
#
|
116
|
-
# @since 2.0.0
|
117
|
-
def execute
|
118
|
-
server = next_primary
|
119
|
-
validate_operations!
|
120
|
-
operation_id = Monitoring.next_operation_id
|
121
|
-
merged_ops.each do |op|
|
122
|
-
validate_type!(op.keys.first)
|
123
|
-
execute_op(op, server, operation_id)
|
124
|
-
end
|
125
|
-
finalize
|
126
|
-
end
|
127
|
-
|
128
|
-
private
|
129
|
-
|
130
|
-
def valid_doc?(doc)
|
131
|
-
doc.respond_to?(:keys) || doc.respond_to?(:document)
|
132
|
-
end
|
133
|
-
|
134
|
-
def write_concern
|
135
|
-
@write_concern ||= @options[:write_concern] ?
|
136
|
-
WriteConcern.get(@options[:write_concern]) :
|
137
|
-
@collection.write_concern
|
138
|
-
end
|
139
|
-
|
140
|
-
def validate_operations!
|
141
|
-
unless @operations && @operations.size > 0
|
142
|
-
raise ArgumentError.new('Operations cannot be empty')
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
def validate_type!(type)
|
147
|
-
unless respond_to?(type, true)
|
148
|
-
raise Error::InvalidBulkOperationType.new(type)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
def max_write_batches(op, server)
|
153
|
-
type = op.keys.first
|
154
|
-
ops = []
|
155
|
-
while op[type].size > server.max_write_batch_size
|
156
|
-
ops << {
|
157
|
-
type => op[type].shift(server.max_write_batch_size),
|
158
|
-
INDEXES => op[INDEXES].shift(server.max_write_batch_size)
|
159
|
-
}
|
160
|
-
end
|
161
|
-
ops << op
|
162
|
-
end
|
163
|
-
|
164
|
-
def split(op, type)
|
165
|
-
n = op[type].size/2
|
166
|
-
[
|
167
|
-
{ type => op[type].shift(n), INDEXES => op[INDEXES].shift(n) },
|
168
|
-
{ type => op[type], INDEXES => op[INDEXES] }
|
169
|
-
]
|
170
|
-
end
|
171
|
-
|
172
|
-
def execute_op(operation, server, operation_id)
|
173
|
-
ops = max_write_batches(operation, server)
|
174
|
-
|
175
|
-
until ops.empty?
|
176
|
-
op = ops.shift
|
177
|
-
type = op.keys.first
|
178
|
-
begin
|
179
|
-
process(send(type, op, server, operation_id), op[INDEXES])
|
180
|
-
rescue Error::MaxBSONSize, Error::MaxMessageSize => ex
|
181
|
-
raise ex if op[type].size < 2
|
182
|
-
ops = split(op, type) + ops
|
183
|
-
end
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
def merge_consecutive_ops(ops)
|
188
|
-
ops.each_with_index.inject([]) do |merged, (op, i)|
|
189
|
-
type = op.keys.first
|
190
|
-
op[INDEXES] ||= [ i ]
|
191
|
-
previous = merged.last
|
192
|
-
if previous && previous.keys.first == type
|
193
|
-
merged[-1].merge!(
|
194
|
-
type => previous[type] << op[type],
|
195
|
-
INDEXES => previous[INDEXES] + op[INDEXES]
|
196
|
-
)
|
197
|
-
merged
|
198
|
-
else
|
199
|
-
merged << { type => [ op[type] ].flatten, INDEXES => op[INDEXES] }
|
200
|
-
end
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
def merge_ops_by_type
|
205
|
-
indexes = {}
|
206
|
-
ops_hash = @operations.each_with_index.inject({}) do |merged, (op, i)|
|
207
|
-
type = op.keys.first
|
208
|
-
merged.merge!(op) { |type, v1, v2| ([v1] << v2).flatten }
|
209
|
-
indexes[type] = (indexes[type] || []).push(i)
|
210
|
-
merged
|
211
|
-
end
|
212
|
-
ops_hash.keys.reduce([]) do |ops_list, type|
|
213
|
-
ops_list << { type => ops_hash[type], INDEXES => indexes[type] }
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
def combine_results(result, indexes)
|
218
|
-
@results ||= {}
|
219
|
-
write_errors = result.aggregate_write_errors(indexes)
|
220
|
-
|
221
|
-
# The Bulk API only returns the first write concern error encountered.
|
222
|
-
@write_concern_errors ||= result.aggregate_write_concern_errors(indexes)
|
223
|
-
|
224
|
-
@results.tap do |results|
|
225
|
-
RESULT_FIELDS.each do |field|
|
226
|
-
results.merge!(
|
227
|
-
field => (results[field] || 0) + result.send(field)
|
228
|
-
) if result.respond_to?(field)
|
229
|
-
end
|
230
|
-
|
231
|
-
if result.respond_to?(INSERTED_IDS)
|
232
|
-
results.merge!(INSERTED_IDS => result.inserted_ids)
|
233
|
-
end
|
234
|
-
|
235
|
-
if result.respond_to?(Operation::Write::BulkUpdate::Result::UPSERTED)
|
236
|
-
results.merge!(UPSERTED_IDS => result.upserted.map{ |doc| doc['_id'] })
|
237
|
-
end
|
238
|
-
|
239
|
-
if write_errors
|
240
|
-
results.merge!(
|
241
|
-
Error::WRITE_ERRORS => ((results[Error::WRITE_ERRORS] || []) << write_errors).flatten
|
242
|
-
)
|
243
|
-
end
|
244
|
-
|
245
|
-
if @write_concern_errors
|
246
|
-
results.merge!(Error::WRITE_CONCERN_ERRORS => @write_concern_errors)
|
247
|
-
end
|
248
|
-
end
|
249
|
-
end
|
250
|
-
end
|
251
|
-
end
|
252
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
# Copyright (C) 2014-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
|
-
module BulkWrite
|
17
|
-
|
18
|
-
# Defines behavior for validating and combining delete bulk write operations.
|
19
|
-
#
|
20
|
-
# @since 2.0.0.
|
21
|
-
module Deletable
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def validate_delete_op!(type, d)
|
26
|
-
raise Error::InvalidBulkOperation.new(type, d) unless valid_doc?(d)
|
27
|
-
end
|
28
|
-
|
29
|
-
def deletes(ops, type)
|
30
|
-
limit = (type == :delete_one) ? 1 : 0
|
31
|
-
ops.collect do |d|
|
32
|
-
validate_delete_op!(type, d)
|
33
|
-
{ q: d, limit: limit }
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def delete(ops, type, server, operation_id)
|
38
|
-
Operation::Write::BulkDelete.new(
|
39
|
-
:deletes => deletes(ops, type),
|
40
|
-
:db_name => database.name,
|
41
|
-
:coll_name => @collection.name,
|
42
|
-
:write_concern => write_concern,
|
43
|
-
:ordered => ordered?,
|
44
|
-
:operation_id => operation_id
|
45
|
-
).execute(server.context)
|
46
|
-
end
|
47
|
-
|
48
|
-
def delete_one(op, server, operation_id)
|
49
|
-
delete(op[:delete_one], __method__, server, operation_id)
|
50
|
-
end
|
51
|
-
|
52
|
-
def delete_many(op, server, operation_id)
|
53
|
-
delete(op[:delete_many], __method__, server, operation_id)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
# Copyright (C) 2014-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
|
-
module BulkWrite
|
17
|
-
|
18
|
-
# Defines behavior for validating and combining insert bulk write operations.
|
19
|
-
#
|
20
|
-
# @since 2.0.0.
|
21
|
-
module Insertable
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def validate_insert_ops!(type, inserts)
|
26
|
-
if inserts.empty?
|
27
|
-
raise Error::InvalidBulkOperation.new(type, inserts)
|
28
|
-
end
|
29
|
-
inserts.each do |i|
|
30
|
-
unless valid_doc?(i)
|
31
|
-
raise Error::InvalidBulkOperation.new(type, i)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def insert_one(op, server, operation_id)
|
37
|
-
validate_insert_ops!(__method__, op[:insert_one])
|
38
|
-
Operation::Write::BulkInsert.new(
|
39
|
-
:documents => op[:insert_one].flatten,
|
40
|
-
:db_name => database.name,
|
41
|
-
:coll_name => @collection.name,
|
42
|
-
:write_concern => write_concern,
|
43
|
-
:ordered => ordered?,
|
44
|
-
:operation_id => operation_id
|
45
|
-
).execute(server.context)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
# Copyright (C) 2014-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
|
-
module BulkWrite
|
17
|
-
|
18
|
-
# Defines behavior for validating and combining replace bulk write operations.
|
19
|
-
#
|
20
|
-
# @since 2.0.0.
|
21
|
-
module Replacable
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def replacement_doc?(doc)
|
26
|
-
doc.respond_to?(:keys) && doc.keys.all?{|key| key !~ /^\$/}
|
27
|
-
end
|
28
|
-
|
29
|
-
def validate_replace_op!(r, type)
|
30
|
-
unless r[:find] && r[:replacement] && replacement_doc?(r[:replacement])
|
31
|
-
raise Error::InvalidBulkOperation.new(type, r)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def replace_ops(ops, type)
|
36
|
-
ops.collect do |r|
|
37
|
-
validate_replace_op!(r, type)
|
38
|
-
{ q: r[:find],
|
39
|
-
u: r[:replacement],
|
40
|
-
multi: false,
|
41
|
-
upsert: r.fetch(:upsert, false)
|
42
|
-
}
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def replace_one(op, server, operation_id)
|
47
|
-
Operation::Write::BulkUpdate.new(
|
48
|
-
:updates => replace_ops(op[:replace_one], __method__),
|
49
|
-
:db_name => database.name,
|
50
|
-
:coll_name => @collection.name,
|
51
|
-
:write_concern => write_concern,
|
52
|
-
:ordered => ordered?,
|
53
|
-
:operation_id => operation_id
|
54
|
-
).execute(server.context)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
# Copyright (C) 2014-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
|
-
module BulkWrite
|
17
|
-
|
18
|
-
# Defines behavior for validating and combining update bulk write operations.
|
19
|
-
#
|
20
|
-
# @since 2.0.0.
|
21
|
-
module Updatable
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def update_doc?(doc)
|
26
|
-
!doc.empty? &&
|
27
|
-
doc.respond_to?(:keys) &&
|
28
|
-
doc.keys.first.to_s =~ /^\$/
|
29
|
-
end
|
30
|
-
|
31
|
-
def validate_update_op!(type, u)
|
32
|
-
unless u[:find] && u[:update] && update_doc?(u[:update])
|
33
|
-
raise Error::InvalidBulkOperation.new(type, u)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def updates(ops, type)
|
38
|
-
multi = type == :update_many
|
39
|
-
ops.collect do |u|
|
40
|
-
validate_update_op!(type, u)
|
41
|
-
{ q: u[:find],
|
42
|
-
u: u[:update],
|
43
|
-
multi: multi,
|
44
|
-
upsert: u.fetch(:upsert, false)
|
45
|
-
}
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def update(ops, type, server, operation_id)
|
50
|
-
Operation::Write::BulkUpdate.new(
|
51
|
-
:updates => updates(ops, type),
|
52
|
-
:db_name => database.name,
|
53
|
-
:coll_name => @collection.name,
|
54
|
-
:write_concern => write_concern,
|
55
|
-
:ordered => ordered?,
|
56
|
-
:operation_id => operation_id
|
57
|
-
).execute(server.context)
|
58
|
-
end
|
59
|
-
|
60
|
-
def update_one(op, server, operation_id)
|
61
|
-
update(op[:update_one], __method__, server, operation_id)
|
62
|
-
end
|
63
|
-
|
64
|
-
def update_many(op, server, operation_id)
|
65
|
-
update(op[:update_many], __method__, server, operation_id)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|