mongo 1.10.0.rc1 → 1.10.0
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/README.md +5 -0
- data/VERSION +1 -1
- data/lib/mongo.rb +1 -0
- data/lib/mongo/bulk_write_collection_view.rb +12 -12
- data/lib/mongo/collection.rb +3 -2
- data/lib/mongo/collection_writer.rb +20 -5
- data/lib/mongo/connection/pool_manager.rb +41 -5
- data/lib/mongo/connection/socket/ssl_socket.rb +5 -1
- data/lib/mongo/cursor.rb +3 -3
- data/lib/mongo/db.rb +1 -1
- data/lib/mongo/exception.rb +3 -0
- data/lib/mongo/functional/authentication.rb +1 -1
- data/lib/mongo/functional/sasl_java.rb +1 -1
- data/lib/mongo/functional/uri_parser.rb +4 -6
- data/lib/mongo/functional/write_concern.rb +4 -7
- data/lib/mongo/gridfs/grid.rb +3 -3
- data/lib/mongo/gridfs/grid_file_system.rb +1 -1
- data/lib/mongo/gridfs/grid_io.rb +4 -6
- data/lib/mongo/mongo_client.rb +19 -11
- data/lib/mongo/mongo_replica_set_client.rb +1 -1
- data/lib/mongo/mongo_sharded_client.rb +2 -2
- data/lib/mongo/networking.rb +13 -9
- data/test/functional/client_test.rb +14 -0
- data/test/functional/collection_test.rb +70 -100
- data/test/functional/grid_io_test.rb +2 -2
- data/test/functional/grid_test.rb +1 -1
- data/test/replica_set/insert_test.rb +15 -1
- data/test/replica_set/replication_ack_test.rb +11 -5
- data/test/shared/ssl_shared.rb +44 -4
- data/test/unit/pool_manager_test.rb +31 -0
- metadata +6 -6
- metadata.gz.sig +0 -0
| @@ -60,7 +60,7 @@ module Mongo | |
| 60 60 | 
             
                # @option opts [String] :content_type ('binary/octet-stream') If no content type is specified,
         | 
| 61 61 | 
             
                #   the content type will may be inferred from the filename extension if the mime-types gem can be
         | 
| 62 62 | 
             
                #   loaded. Otherwise, the content type 'binary/octet-stream' will be used.
         | 
| 63 | 
            -
                # @option opts [Integer] ( | 
| 63 | 
            +
                # @option opts [Integer] (261120) :chunk_size size of file chunks in bytes.
         | 
| 64 64 | 
             
                # @option opts [Boolean] :delete_old (false) ensure that old versions of the file are deleted. This option
         | 
| 65 65 | 
             
                #  only work in 'w' mode. Certain precautions must be taken when deleting GridFS files. See the notes under
         | 
| 66 66 | 
             
                #  GridFileSystem#delete.
         | 
    
        data/lib/mongo/gridfs/grid_io.rb
    CHANGED
    
    | @@ -21,7 +21,7 @@ module Mongo | |
| 21 21 | 
             
              class GridIO
         | 
| 22 22 | 
             
                include Mongo::WriteConcern
         | 
| 23 23 |  | 
| 24 | 
            -
                DEFAULT_CHUNK_SIZE   =  | 
| 24 | 
            +
                DEFAULT_CHUNK_SIZE   = 255 * 1024
         | 
| 25 25 | 
             
                DEFAULT_CONTENT_TYPE = 'binary/octet-stream'
         | 
| 26 26 | 
             
                PROTECTED_ATTRS      = [:files_id, :file_length, :client_md5, :server_md5]
         | 
| 27 27 |  | 
| @@ -39,7 +39,7 @@ module Mongo | |
| 39 39 | 
             
                # @option opts [Hash] :query a query selector used when opening the file in 'r' mode.
         | 
| 40 40 | 
             
                # @option opts [Hash] :query_opts any query options to be used when opening the file in 'r' mode.
         | 
| 41 41 | 
             
                # @option opts [String] :fs_name the file system prefix.
         | 
| 42 | 
            -
                # @option opts [Integer] ( | 
| 42 | 
            +
                # @option opts [Integer] (261120) :chunk_size size of file chunks in bytes.
         | 
| 43 43 | 
             
                # @option opts [Hash] :metadata ({}) any additional data to store with the file.
         | 
| 44 44 | 
             
                # @option opts [ObjectId] :_id (ObjectId) a unique id for
         | 
| 45 45 | 
             
                #   the file to be use in lieu of an automatically generated one.
         | 
| @@ -106,11 +106,9 @@ module Mongo | |
| 106 106 |  | 
| 107 107 | 
             
                # Write the given string (binary) data to the file.
         | 
| 108 108 | 
             
                #
         | 
| 109 | 
            -
                # @param [String]  | 
| 110 | 
            -
                #   the data to write
         | 
| 109 | 
            +
                # @param [String] io the data to write.
         | 
| 111 110 | 
             
                #
         | 
| 112 | 
            -
                # @return [Integer]
         | 
| 113 | 
            -
                #   the number of bytes written.
         | 
| 111 | 
            +
                # @return [Integer] the number of bytes written.
         | 
| 114 112 | 
             
                def write(io)
         | 
| 115 113 | 
             
                  raise GridError, "file not opened for write" unless @mode[0] == ?w
         | 
| 116 114 | 
             
                  if io.is_a? String
         | 
    
        data/lib/mongo/mongo_client.rb
    CHANGED
    
    | @@ -43,7 +43,7 @@ module Mongo | |
| 43 43 | 
             
                DEFAULT_DB_NAME      = 'test'
         | 
| 44 44 | 
             
                GENERIC_OPTS         = [:auths, :logger, :connect, :db_name]
         | 
| 45 45 | 
             
                TIMEOUT_OPTS         = [:timeout, :op_timeout, :connect_timeout]
         | 
| 46 | 
            -
                SSL_OPTS             = [:ssl, :ssl_key, :ssl_cert, :ssl_verify, :ssl_ca_cert]
         | 
| 46 | 
            +
                SSL_OPTS             = [:ssl, :ssl_key, :ssl_cert, :ssl_verify, :ssl_ca_cert, :ssl_key_pass_phrase]
         | 
| 47 47 | 
             
                POOL_OPTS            = [:pool_size, :pool_timeout]
         | 
| 48 48 | 
             
                READ_PREFERENCE_OPTS = [:read, :tag_sets, :secondary_acceptable_latency_ms]
         | 
| 49 49 | 
             
                WRITE_CONCERN_OPTS   = [:w, :j, :fsync, :wtimeout]
         | 
| @@ -90,14 +90,14 @@ module Mongo | |
| 90 90 | 
             
                #  @param [Integer] port specify a port number here if only one host is being specified.
         | 
| 91 91 | 
             
                #  @param [Hash] opts hash of optional settings and configuration values.
         | 
| 92 92 | 
             
                #
         | 
| 93 | 
            -
                # | 
| 93 | 
            +
                #  @option opts [String, Integer, Symbol] :w (1) Set default number of nodes to which a write
         | 
| 94 94 | 
             
                #   should be acknowledged.
         | 
| 95 | 
            -
                # | 
| 96 | 
            -
                # | 
| 95 | 
            +
                #  @option opts [Integer] :wtimeout (nil) Set replica set acknowledgement timeout.
         | 
| 96 | 
            +
                #  @option opts [Boolean] :j (false) If true, block until write operations have been committed
         | 
| 97 97 | 
             
                #   to the journal. Cannot be used in combination with 'fsync'. Prior to MongoDB 2.6 this option was
         | 
| 98 98 | 
             
                #   ignored if the server was running without journaling. Starting with MongoDB 2.6, write operations will
         | 
| 99 99 | 
             
                #   fail with an exception if this option is used when the server is running without journaling.
         | 
| 100 | 
            -
                # | 
| 100 | 
            +
                #  @option opts [Boolean] :fsync (false) If true, and the server is running without journaling, blocks until
         | 
| 101 101 | 
             
                #   the server has synced all data files to disk. If the server is running with journaling, this acts the same as
         | 
| 102 102 | 
             
                #   the 'j' option, blocking until write operations have been committed to the journal.
         | 
| 103 103 | 
             
                #   Cannot be used in combination with 'j'.
         | 
| @@ -111,7 +111,7 @@ module Mongo | |
| 111 111 | 
             
                #  @option opts [String] :ssl_cert (nil) The certificate file used to identify the local connection against MongoDB.
         | 
| 112 112 | 
             
                #  @option opts [String] :ssl_key (nil) The private keyfile used to identify the local connection against MongoDB.
         | 
| 113 113 | 
             
                #    Note that even if the key is stored in the same file as the certificate, both need to be explicitly specified.
         | 
| 114 | 
            -
                # | 
| 114 | 
            +
                #  @option opts [String] :ssl_key_pass_phrase (nil) A passphrase for the private key.
         | 
| 115 115 | 
             
                #  @option opts [Boolean] :ssl_verify (nil) Specifies whether or not peer certification validation should occur.
         | 
| 116 116 | 
             
                #  @option opts [String] :ssl_ca_cert (nil) The ca_certs file contains a set of concatenated "certification authority"
         | 
| 117 117 | 
             
                #    certificates, which are used to validate certificates passed from the other end of the connection.
         | 
| @@ -216,7 +216,7 @@ module Mongo | |
| 216 216 | 
             
                # @param uri [String]
         | 
| 217 217 | 
             
                #   A string of the format mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/database]
         | 
| 218 218 | 
             
                #
         | 
| 219 | 
            -
                # @param  | 
| 219 | 
            +
                # @param [Hash] extra_opts Any of the options available for MongoClient.new
         | 
| 220 220 | 
             
                #
         | 
| 221 221 | 
             
                # @return [Mongo::MongoClient, Mongo::MongoReplicaSetClient]
         | 
| 222 222 | 
             
                def self.from_uri(uri = ENV['MONGODB_URI'], extra_opts={})
         | 
| @@ -594,10 +594,11 @@ module Mongo | |
| 594 594 | 
             
                  @socket_opts = {}
         | 
| 595 595 | 
             
                  if @ssl
         | 
| 596 596 | 
             
                    # construct ssl socket opts
         | 
| 597 | 
            -
                    @socket_opts[:key] | 
| 598 | 
            -
                    @socket_opts[:cert] | 
| 599 | 
            -
                    @socket_opts[:verify] | 
| 600 | 
            -
                    @socket_opts[:ca_cert] | 
| 597 | 
            +
                    @socket_opts[:key]             = opts.delete(:ssl_key)
         | 
| 598 | 
            +
                    @socket_opts[:cert]            = opts.delete(:ssl_cert)
         | 
| 599 | 
            +
                    @socket_opts[:verify]          = opts.delete(:ssl_verify)
         | 
| 600 | 
            +
                    @socket_opts[:ca_cert]         = opts.delete(:ssl_ca_cert)
         | 
| 601 | 
            +
                    @socket_opts[:key_pass_phrase] = opts.delete(:ssl_key_pass_phrase)
         | 
| 601 602 |  | 
| 602 603 | 
             
                    # verify peer requires ca_cert, raise if only one is present
         | 
| 603 604 | 
             
                    if @socket_opts[:verify] && !@socket_opts[:ca_cert]
         | 
| @@ -606,6 +607,13 @@ module Mongo | |
| 606 607 | 
             
                        ':ssl_ca_cert in order to perform server validation.'
         | 
| 607 608 | 
             
                    end
         | 
| 608 609 |  | 
| 610 | 
            +
                    # if we have a keyfile passphrase but no key file, raise
         | 
| 611 | 
            +
                    if @socket_opts[:key_pass_phrase] && !@socket_opts[:key]
         | 
| 612 | 
            +
                      raise MongoArgumentError,
         | 
| 613 | 
            +
                        'If :ssl_key_pass_phrase has been specified, then you must include ' +
         | 
| 614 | 
            +
                        ':ssl_key, the passphrase-protected keyfile.'
         | 
| 615 | 
            +
                    end
         | 
| 616 | 
            +
             | 
| 609 617 | 
             
                    @socket_class = Mongo::SSLSocket
         | 
| 610 618 | 
             
                  elsif @unix
         | 
| 611 619 | 
             
                    @socket_class = Mongo::UNIXSocket
         | 
| @@ -92,7 +92,7 @@ module Mongo | |
| 92 92 | 
             
                #   @option opts [String] :ssl_cert (nil) The certificate file used to identify the local connection against MongoDB.
         | 
| 93 93 | 
             
                #   @option opts [String] :ssl_key (nil) The private keyfile used to identify the local connection against MongoDB.
         | 
| 94 94 | 
             
                #     Note that even if the key is stored in the same file as the certificate, both need to be explicitly specified.
         | 
| 95 | 
            -
                # | 
| 95 | 
            +
                #   @option opts [String] :ssl_key_pass_phrase (nil) A passphrase for the private key.
         | 
| 96 96 | 
             
                #   @option opts [Boolean] :ssl_verify (nil) Specifies whether or not peer certification validation should occur.
         | 
| 97 97 | 
             
                #   @option opts [String] :ssl_ca_cert (nil) The ca_certs file contains a set of concatenated "certification authority"
         | 
| 98 98 | 
             
                #     certificates, which are used to validate certificates passed from the other end of the connection.
         | 
| @@ -148,10 +148,10 @@ module Mongo | |
| 148 148 | 
             
                # @param uri [ String ]  string of the format:
         | 
| 149 149 | 
             
                #   mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/database]
         | 
| 150 150 | 
             
                #
         | 
| 151 | 
            -
                # @param  | 
| 151 | 
            +
                # @param options [ Hash ] Any of the options available for MongoShardedClient.new
         | 
| 152 152 | 
             
                #
         | 
| 153 153 | 
             
                # @return [ Mongo::MongoShardedClient ] The sharded client.
         | 
| 154 | 
            -
                def self.from_uri(uri, options | 
| 154 | 
            +
                def self.from_uri(uri, options={})
         | 
| 155 155 | 
             
                  uri ||= ENV['MONGODB_URI']
         | 
| 156 156 | 
             
                  URIParser.new(uri).connection(options, false, true)
         | 
| 157 157 | 
             
                end
         | 
    
        data/lib/mongo/networking.rb
    CHANGED
    
    | @@ -67,8 +67,8 @@ module Mongo | |
| 67 67 | 
             
                # @param [Integer] operation a MongoDB opcode.
         | 
| 68 68 | 
             
                # @param [BSON::ByteBuffer] message a message to send to the database.
         | 
| 69 69 | 
             
                # @param [String] db_name the name of the database. used on call to get_last_error.
         | 
| 70 | 
            -
                # @param [ | 
| 71 | 
            -
                # | 
| 70 | 
            +
                # @param [String] log_message this is currently a no-op and will be removed.
         | 
| 71 | 
            +
                # @param [Hash] write_concern write concern.
         | 
| 72 72 | 
             
                #
         | 
| 73 73 | 
             
                # @see DB#get_last_error for valid last error params.
         | 
| 74 74 | 
             
                #
         | 
| @@ -95,18 +95,20 @@ module Mongo | |
| 95 95 | 
             
                    raise ex
         | 
| 96 96 | 
             
                  end
         | 
| 97 97 |  | 
| 98 | 
            -
                  if num_received == 1 | 
| 99 | 
            -
                     | 
| 98 | 
            +
                  if num_received == 1
         | 
| 99 | 
            +
                    error = docs[0]['err'] || docs[0]['errmsg']
         | 
| 100 | 
            +
                    if error && error.include?("not master")
         | 
| 100 101 | 
             
                      close
         | 
| 101 102 | 
             
                      raise ConnectionFailure.new(docs[0]['code'].to_s + ': ' + error, docs[0]['code'], docs[0])
         | 
| 102 | 
            -
                     | 
| 103 | 
            +
                    elsif (note = docs[0]['jnote'] || docs[0]['wnote']) # assignment
         | 
| 104 | 
            +
                      code = docs[0]['code'] || Mongo::ErrorCode::BAD_VALUE # as of server version 2.5.5
         | 
| 105 | 
            +
                      raise WriteConcernError.new(code.to_s + ': ' + note, code, docs[0])
         | 
| 106 | 
            +
                    elsif error
         | 
| 103 107 | 
             
                      code = docs[0]['code'] || Mongo::ErrorCode::UNKNOWN_ERROR
         | 
| 104 108 | 
             
                      error = "wtimeout" if error == "timeout"
         | 
| 109 | 
            +
                      raise WriteConcernError.new(code.to_s + ': ' + error, code, docs[0]) if error == "wtimeout"
         | 
| 105 110 | 
             
                      raise OperationFailure.new(code.to_s + ': ' + error, code, docs[0])
         | 
| 106 111 | 
             
                    end
         | 
| 107 | 
            -
                  elsif num_received == 1 && (note = docs[0]['jnote'] || docs[0]['wnote']) # assignment
         | 
| 108 | 
            -
                    code = docs[0]['code'] || Mongo::ErrorCode::BAD_VALUE # as of server version 2.5.5
         | 
| 109 | 
            -
                    raise OperationFailure.new(code.to_s + ': ' + note, code, docs[0])
         | 
| 110 112 | 
             
                  end
         | 
| 111 113 |  | 
| 112 114 | 
             
                  docs[0]
         | 
| @@ -120,8 +122,10 @@ module Mongo | |
| 120 122 | 
             
                # @param [Socket] socket a socket to use in lieu of checking out a new one.
         | 
| 121 123 | 
             
                # @param [Boolean] command (false) indicate whether this is a command. If this is a command,
         | 
| 122 124 | 
             
                #   the message will be sent to the primary node.
         | 
| 123 | 
            -
                # @param [ | 
| 125 | 
            +
                # @param [Symbol] read the read preference.
         | 
| 126 | 
            +
                # @param [Boolean] exhaust (false) indicate whether the cursor should be exhausted. Set
         | 
| 124 127 | 
             
                #   this to true only when the OP_QUERY_EXHAUST flag is set.
         | 
| 128 | 
            +
                # @param [Boolean] compile_regex whether BSON regex objects should be compiled into Ruby regexes.
         | 
| 125 129 | 
             
                #
         | 
| 126 130 | 
             
                # @return [Array]
         | 
| 127 131 | 
             
                #   An array whose indexes include [0] documents returned, [1] number of document received,
         | 
| @@ -144,6 +144,20 @@ class ClientTest < Test::Unit::TestCase | |
| 144 144 | 
             
                assert_equal db.name, MongoClient::DEFAULT_DB_NAME
         | 
| 145 145 | 
             
              end
         | 
| 146 146 |  | 
| 147 | 
            +
              def test_from_uri_write_concern
         | 
| 148 | 
            +
                con = MongoClient.from_uri("mongodb://#{host_port}")
         | 
| 149 | 
            +
                db = con.db
         | 
| 150 | 
            +
                coll = db.collection('from-uri-test')
         | 
| 151 | 
            +
                assert_equal BSON::ObjectId, coll.insert({'a' => 1}).class
         | 
| 152 | 
            +
                [con, db, coll].each do |component|
         | 
| 153 | 
            +
                  component.write_concern.each do |key,value|
         | 
| 154 | 
            +
                    assert_not_nil(value, "component #{component.class.inspect} should not have write concern #{key.inspect} field with nil value")
         | 
| 155 | 
            +
                  end
         | 
| 156 | 
            +
                end
         | 
| 157 | 
            +
                assert_equal({:w => 1}, con.write_concern, "write concern should not have extra pairs that were not specified by the user")
         | 
| 158 | 
            +
                assert_equal({:w => 1}, db.write_concern, "write concern should not have extra pairs that were not specified by the user")
         | 
| 159 | 
            +
                assert_equal({:w => 1}, coll.write_concern, "write concern should not have extra pairs that were not specified by the user")
         | 
| 160 | 
            +
              end
         | 
| 147 161 |  | 
| 148 162 | 
             
              def test_server_version
         | 
| 149 163 | 
             
                assert_match(/\d\.\d+(\.\d+)?/, @client.server_version.to_s)
         | 
| @@ -102,12 +102,10 @@ class CollectionTest < Test::Unit::TestCase | |
| 102 102 | 
             
                  @@test.drop
         | 
| 103 103 | 
             
                  @@test.insert([{ :a => 1 }, { :a => 1 }])
         | 
| 104 104 |  | 
| 105 | 
            -
                  command =  | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
                    :ordered => false
         | 
| 110 | 
            -
                  }
         | 
| 105 | 
            +
                  command = BSON::OrderedHash['delete', @@test.name,
         | 
| 106 | 
            +
                                              :deletes, [{ :q => { :a => 1 }, :limit => 1 }],
         | 
| 107 | 
            +
                                              :writeConcern, { :w => 1 },
         | 
| 108 | 
            +
                                              :ordered, false]
         | 
| 111 109 |  | 
| 112 110 | 
             
                  result = @@db.command(command)
         | 
| 113 111 | 
             
                  assert_equal 1, result['n']
         | 
| @@ -119,12 +117,10 @@ class CollectionTest < Test::Unit::TestCase | |
| 119 117 | 
             
                  @@test.drop
         | 
| 120 118 | 
             
                  @@test.insert([{ :a => 1 }, { :a => 1 }])
         | 
| 121 119 |  | 
| 122 | 
            -
                  command =  | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
                    :ordered => true
         | 
| 127 | 
            -
                  }
         | 
| 120 | 
            +
                  command = BSON::OrderedHash['delete', @@test.name,
         | 
| 121 | 
            +
                                              :deletes, [{ :q => { :a => 1 }, :limit => 0 }],
         | 
| 122 | 
            +
                                              :writeConcern, { :w => 1 },
         | 
| 123 | 
            +
                                              :ordered, true]
         | 
| 128 124 |  | 
| 129 125 | 
             
                  result = @@db.command(command)
         | 
| 130 126 | 
             
                  assert_equal 2, result['n']
         | 
| @@ -136,12 +132,10 @@ class CollectionTest < Test::Unit::TestCase | |
| 136 132 | 
             
                  @@test.drop
         | 
| 137 133 | 
             
                  @@test.insert([{ :a => 1 }, { :a => 1 }])
         | 
| 138 134 |  | 
| 139 | 
            -
                  command =  | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
                    :ordered => false
         | 
| 144 | 
            -
                  }
         | 
| 135 | 
            +
                  command = BSON::OrderedHash['delete', @@test.name,
         | 
| 136 | 
            +
                                              :deletes, [{ :q => { :a => 1 }, :limit => 0 }],
         | 
| 137 | 
            +
                                              :writeConcern, { :w => 1 },
         | 
| 138 | 
            +
                                              :ordered, false]
         | 
| 145 139 |  | 
| 146 140 | 
             
                  result = @@db.command(command)
         | 
| 147 141 | 
             
                  assert_equal 2, result['n']
         | 
| @@ -153,11 +147,9 @@ class CollectionTest < Test::Unit::TestCase | |
| 153 147 | 
             
                  @@test.drop
         | 
| 154 148 | 
             
                  @@test.insert([{ :a => 1 }, { :a => 1 }])
         | 
| 155 149 |  | 
| 156 | 
            -
                  command =  | 
| 157 | 
            -
             | 
| 158 | 
            -
             | 
| 159 | 
            -
                    :ordered => false
         | 
| 160 | 
            -
                  }
         | 
| 150 | 
            +
                  command = BSON::OrderedHash['delete', @@test.name,
         | 
| 151 | 
            +
                                              :deletes, [{ :q => { :a => 1 }, :limit => 0 }],
         | 
| 152 | 
            +
                                              :ordered, false]
         | 
| 161 153 |  | 
| 162 154 | 
             
                  result = @@db.command(command)
         | 
| 163 155 | 
             
                  assert_equal 2, result['n']
         | 
| @@ -169,12 +161,10 @@ class CollectionTest < Test::Unit::TestCase | |
| 169 161 | 
             
                  @@test.drop
         | 
| 170 162 | 
             
                  @@test.insert([{ :a => 1 }, { :a => 1 }])
         | 
| 171 163 |  | 
| 172 | 
            -
                  command =  | 
| 173 | 
            -
             | 
| 174 | 
            -
             | 
| 175 | 
            -
             | 
| 176 | 
            -
                    :ordered => false
         | 
| 177 | 
            -
                  }
         | 
| 164 | 
            +
                  command = BSON::OrderedHash['delete', @@test.name,
         | 
| 165 | 
            +
                                              :deletes, [{ :q => { '$set' => { :a => 1 }}, :limit => 0 }],
         | 
| 166 | 
            +
                                              :writeConcern, { :w => 1 },
         | 
| 167 | 
            +
                                              :ordered, false]
         | 
| 178 168 |  | 
| 179 169 | 
             
                  assert_raise Mongo::OperationFailure do
         | 
| 180 170 | 
             
                    @@db.command(command)
         | 
| @@ -184,12 +174,10 @@ class CollectionTest < Test::Unit::TestCase | |
| 184 174 | 
             
                def test_single_insert_write_command
         | 
| 185 175 | 
             
                  @@test.drop
         | 
| 186 176 |  | 
| 187 | 
            -
                  command =  | 
| 188 | 
            -
             | 
| 189 | 
            -
             | 
| 190 | 
            -
             | 
| 191 | 
            -
                    :ordered => false
         | 
| 192 | 
            -
                  }
         | 
| 177 | 
            +
                  command = BSON::OrderedHash['insert', @@test.name,
         | 
| 178 | 
            +
                                              :documents, [{ :a => 1 }],
         | 
| 179 | 
            +
                                              :writeConcern, { :w => 1 },
         | 
| 180 | 
            +
                                              :ordered, false]
         | 
| 193 181 |  | 
| 194 182 | 
             
                  result = @@db.command(command)
         | 
| 195 183 | 
             
                  assert_equal 1, result['ok']
         | 
| @@ -199,12 +187,10 @@ class CollectionTest < Test::Unit::TestCase | |
| 199 187 | 
             
                def test_multi_ordered_insert_write_command
         | 
| 200 188 | 
             
                  @@test.drop
         | 
| 201 189 |  | 
| 202 | 
            -
                  command =  | 
| 203 | 
            -
             | 
| 204 | 
            -
             | 
| 205 | 
            -
             | 
| 206 | 
            -
                    :ordered => true
         | 
| 207 | 
            -
                  }
         | 
| 190 | 
            +
                  command = BSON::OrderedHash['insert', @@test.name,
         | 
| 191 | 
            +
                                              :documents, [{ :a => 1 }, { :a => 2 }],
         | 
| 192 | 
            +
                                              :writeConcern, { :w => 1 },
         | 
| 193 | 
            +
                                              :ordered, true]
         | 
| 208 194 |  | 
| 209 195 | 
             
                  result = @@db.command(command)
         | 
| 210 196 | 
             
                  assert_equal 1, result['ok']
         | 
| @@ -214,12 +200,10 @@ class CollectionTest < Test::Unit::TestCase | |
| 214 200 | 
             
                def test_multi_unordered_insert_write_command
         | 
| 215 201 | 
             
                  @@test.drop
         | 
| 216 202 |  | 
| 217 | 
            -
                  command =  | 
| 218 | 
            -
             | 
| 219 | 
            -
             | 
| 220 | 
            -
             | 
| 221 | 
            -
                    :ordered => false
         | 
| 222 | 
            -
                  }
         | 
| 203 | 
            +
                  command = BSON::OrderedHash['insert', @@test.name,
         | 
| 204 | 
            +
                                              :documents, [{ :a => 1 }, { :a => 2 }],
         | 
| 205 | 
            +
                                              :writeConcern, { :w => 1 },
         | 
| 206 | 
            +
                                              :ordered, false]
         | 
| 223 207 |  | 
| 224 208 | 
             
                  result = @@db.command(command)
         | 
| 225 209 | 
             
                  assert_equal 1, result['ok']
         | 
| @@ -229,11 +213,9 @@ class CollectionTest < Test::Unit::TestCase | |
| 229 213 | 
             
                def test_insert_write_command_with_no_concern
         | 
| 230 214 | 
             
                  @@test.drop
         | 
| 231 215 |  | 
| 232 | 
            -
                  command =  | 
| 233 | 
            -
             | 
| 234 | 
            -
             | 
| 235 | 
            -
                    :ordered => false
         | 
| 236 | 
            -
                  }
         | 
| 216 | 
            +
                  command = BSON::OrderedHash['insert', @@test.name,
         | 
| 217 | 
            +
                                              :documents, [{ :a => 1 }, { :a => 2 }],
         | 
| 218 | 
            +
                                              :ordered, false]
         | 
| 237 219 |  | 
| 238 220 | 
             
                  result = @@db.command(command)
         | 
| 239 221 | 
             
                  assert_equal 1, result['ok']
         | 
| @@ -242,14 +224,12 @@ class CollectionTest < Test::Unit::TestCase | |
| 242 224 |  | 
| 243 225 | 
             
                def test_insert_write_command_with_error
         | 
| 244 226 | 
             
                  @@test.drop
         | 
| 245 | 
            -
                  @@test.ensure_index( | 
| 227 | 
            +
                  @@test.ensure_index([[:a, 1]], { :unique => true })
         | 
| 246 228 |  | 
| 247 | 
            -
                  command =  | 
| 248 | 
            -
             | 
| 249 | 
            -
             | 
| 250 | 
            -
             | 
| 251 | 
            -
                    :ordered => false
         | 
| 252 | 
            -
                  }
         | 
| 229 | 
            +
                  command = BSON::OrderedHash['insert', @@test.name,
         | 
| 230 | 
            +
                                              :documents, [{ :a => 1 }, { :a => 1 }],
         | 
| 231 | 
            +
                                              :writeConcern, { :w => 1 },
         | 
| 232 | 
            +
                                              :ordered, false]
         | 
| 253 233 |  | 
| 254 234 | 
             
                  assert_raise Mongo::OperationFailure do
         | 
| 255 235 | 
             
                    @@db.command(command)
         | 
| @@ -260,11 +240,9 @@ class CollectionTest < Test::Unit::TestCase | |
| 260 240 | 
             
                  @@test.drop
         | 
| 261 241 | 
             
                  @@test.insert([{ :a => 1 }, { :a => 2 }])
         | 
| 262 242 |  | 
| 263 | 
            -
                  command =  | 
| 264 | 
            -
             | 
| 265 | 
            -
             | 
| 266 | 
            -
                    :writeConcern => { :w => 1 }
         | 
| 267 | 
            -
                  }
         | 
| 243 | 
            +
                  command = BSON::OrderedHash['update', @@test.name,
         | 
| 244 | 
            +
                                              :updates, [{ :q => { :a => 1 }, :u => { '$set' => { :a => 2 }}}],
         | 
| 245 | 
            +
                                              :writeConcern, { :w => 1 }]
         | 
| 268 246 |  | 
| 269 247 | 
             
                  result = @@db.command(command)
         | 
| 270 248 | 
             
                  assert_equal 1, result['ok']
         | 
| @@ -276,15 +254,13 @@ class CollectionTest < Test::Unit::TestCase | |
| 276 254 | 
             
                  @@test.drop
         | 
| 277 255 | 
             
                  @@test.insert([{ :a => 1 }, { :a => 3 }])
         | 
| 278 256 |  | 
| 279 | 
            -
                  command =  | 
| 280 | 
            -
             | 
| 281 | 
            -
             | 
| 282 | 
            -
             | 
| 283 | 
            -
             | 
| 284 | 
            -
             | 
| 285 | 
            -
             | 
| 286 | 
            -
                    :ordered => true
         | 
| 287 | 
            -
                  }
         | 
| 257 | 
            +
                  command = BSON::OrderedHash['update', @@test.name,
         | 
| 258 | 
            +
                                              :updates, [
         | 
| 259 | 
            +
                                                          { :q => { :a => 1 }, :u => { '$set' => { :a => 2 }}},
         | 
| 260 | 
            +
                                                          { :q => { :a => 3 }, :u => { '$set' => { :a => 4 }}}
         | 
| 261 | 
            +
                                                        ],
         | 
| 262 | 
            +
                                              :writeConcern, { :w => 1 },
         | 
| 263 | 
            +
                                              :ordered, true]
         | 
| 288 264 |  | 
| 289 265 | 
             
                  result = @@db.command(command)
         | 
| 290 266 | 
             
                  assert_equal 1, result['ok']
         | 
| @@ -297,15 +273,13 @@ class CollectionTest < Test::Unit::TestCase | |
| 297 273 | 
             
                  @@test.drop
         | 
| 298 274 | 
             
                  @@test.insert([{ :a => 1 }, { :a => 3 }])
         | 
| 299 275 |  | 
| 300 | 
            -
                  command =  | 
| 301 | 
            -
             | 
| 302 | 
            -
             | 
| 303 | 
            -
             | 
| 304 | 
            -
             | 
| 305 | 
            -
             | 
| 306 | 
            -
             | 
| 307 | 
            -
                    :ordered => false
         | 
| 308 | 
            -
                  }
         | 
| 276 | 
            +
                  command = BSON::OrderedHash['update', @@test.name,
         | 
| 277 | 
            +
                                              :updates, [
         | 
| 278 | 
            +
                                                         { :q => { :a => 1 }, :u => { '$set' => { :a => 2 }}},
         | 
| 279 | 
            +
                                                         { :q => { :a => 3 }, :u => { '$set' => { :a => 4 }}}
         | 
| 280 | 
            +
                                                        ],
         | 
| 281 | 
            +
                                              :writeConcern, { :w => 1 },
         | 
| 282 | 
            +
                                              :ordered, false]
         | 
| 309 283 |  | 
| 310 284 | 
             
                  result = @@db.command(command)
         | 
| 311 285 | 
             
                  assert_equal 1, result['ok']
         | 
| @@ -318,14 +292,12 @@ class CollectionTest < Test::Unit::TestCase | |
| 318 292 | 
             
                  @@test.drop
         | 
| 319 293 | 
             
                  @@test.insert([{ :a => 1 }, { :a => 3 }])
         | 
| 320 294 |  | 
| 321 | 
            -
                  command =  | 
| 322 | 
            -
             | 
| 323 | 
            -
             | 
| 324 | 
            -
             | 
| 325 | 
            -
             | 
| 326 | 
            -
             | 
| 327 | 
            -
                    :ordered => false
         | 
| 328 | 
            -
                  }
         | 
| 295 | 
            +
                  command = BSON::OrderedHash['update', @@test.name,
         | 
| 296 | 
            +
                                              :updates, [
         | 
| 297 | 
            +
                                                         { :q => { :a => 1 }, :u => { '$set' => { :a => 2 }}},
         | 
| 298 | 
            +
                                                         { :q => { :a => 3 }, :u => { '$set' => { :a => 4 }}}
         | 
| 299 | 
            +
                                                        ],
         | 
| 300 | 
            +
                                              :ordered, false]
         | 
| 329 301 |  | 
| 330 302 | 
             
                  result = @@db.command(command)
         | 
| 331 303 | 
             
                  assert_equal 1, result['ok']
         | 
| @@ -336,16 +308,14 @@ class CollectionTest < Test::Unit::TestCase | |
| 336 308 |  | 
| 337 309 | 
             
                def test_update_write_command_with_error
         | 
| 338 310 | 
             
                  @@test.drop
         | 
| 339 | 
            -
                  @@test.ensure_index( | 
| 311 | 
            +
                  @@test.ensure_index([[:a, 1]], { :unique => true })
         | 
| 340 312 | 
             
                  @@test.insert([{ :a => 1 }, { :a => 2 }])
         | 
| 341 313 |  | 
| 342 | 
            -
                  command =  | 
| 343 | 
            -
             | 
| 344 | 
            -
             | 
| 345 | 
            -
             | 
| 346 | 
            -
             | 
| 347 | 
            -
                    :ordered => false
         | 
| 348 | 
            -
                  }
         | 
| 314 | 
            +
                  command = BSON::OrderedHash['update', @@test.name,
         | 
| 315 | 
            +
                                              :updates, [
         | 
| 316 | 
            +
                                                         { :q => { :a => 2 }, :u => { '$set' => { :a => 1 }}}
         | 
| 317 | 
            +
                                                        ],
         | 
| 318 | 
            +
                                              :ordered, false]
         | 
| 349 319 |  | 
| 350 320 | 
             
                  assert_raise Mongo::OperationFailure do
         | 
| 351 321 | 
             
                    @@db.command(command)
         | 
| @@ -877,7 +847,7 @@ class CollectionTest < Test::Unit::TestCase | |
| 877 847 | 
             
              if @@version < "2.5.3"
         | 
| 878 848 | 
             
                def test_jnote_raises_exception
         | 
| 879 849 | 
             
                  with_no_journaling(@@client) do
         | 
| 880 | 
            -
                    ex = assert_raise Mongo:: | 
| 850 | 
            +
                    ex = assert_raise Mongo::WriteConcernError do
         | 
| 881 851 | 
             
                      @@test.insert({:foo => 1}, :j => true)
         | 
| 882 852 | 
             
                    end
         | 
| 883 853 | 
             
                    result = ex.result
         | 
| @@ -886,7 +856,7 @@ class CollectionTest < Test::Unit::TestCase | |
| 886 856 | 
             
                end
         | 
| 887 857 |  | 
| 888 858 | 
             
                def test_wnote_raises_exception
         | 
| 889 | 
            -
                  ex = assert_raise Mongo:: | 
| 859 | 
            +
                  ex = assert_raise Mongo::WriteConcernError do
         | 
| 890 860 | 
             
                    @@test.insert({:foo => 1}, :w => 2)
         | 
| 891 861 | 
             
                  end
         | 
| 892 862 | 
             
                  result = ex.result
         |