# Overview ## 2.0.7 * Improved Moped Failover (John Hyman) ## 2.0.6 * Relaxing BSON dependency to allow for 3.1.0 upgrade. ## 2.0.5 ### Resolved Issues * \#351 Fixing retries with authentication. (Wandenberg Peixoto) * Bump BSON dependency to 3.0.4 ## 2.0.4 ### Resolved Issues * \#345 Writes fail with ConnectionPool::PoolShuttingDownError. (fedenusy, dblock) ## 2.0.3 ### Resolved Issues * \#333, \#336 Disconnect even when IP address not resolved and fix shutdown pool for node. (durran) ## 2.0.2 ### Resolved Issues * Dont include peers if node already in the list There was a big memory leak, that was including all nodes in the list in every refresh cycle. (Arthur Neves) ## 2.0.1 ### Resolved Issues * \#288, \#278, \#252, \#247, \#275, \#290 Re-apply credentials when connection is lost with the server. (zarqman) * mongoid/mongoid\#3790 Allow Session pool_timeout option. (Niels Ganser) * \#297 Better retry on authentication. (Jonathan Hyman) ## 2.0.0 ### API Changes (Backwards Incompatible) * Moped 2 now only supports MongoDB 2.4.0 and higher. * Query.cursor will return a Enumerable instead of a Enumerator. (Arthur Neves) * Moped's BSON implementation has been removed in favor of the 10gen bson gem 2.0 and higher. All `Moped::BSON` references should be changed to just `BSON`. * \#190 Connection retries are now logged. (Jan Paul Posma) * \#133 Moped now supports the new read preferences that the core drivers provide. These include: - `:primary`: Will always read from a primary node. (default) - `:primary_preferred`: Attempt a primary first, then secondary if none available. - `:secondary`: Will always read from a secondary node. - `:secondary_preferred`: Attempt a secondary first, then primary if none available. - `:nearest`: Attempt to read from the node with the lowest latency. Sample syntax: Moped::Session.new([ "127.0.0.1:27017" ], read: :secondary) session.with(read: :nearest)[:users].find The `:consistency` option is no longer valid and will be ignored. * \#92 Moped now defaults all writes to propagate (formerly "safe mode") and now has different propagate semantics: - `{ w: -1 }`: Don't verify writes and raise no network errors. - `{ w: 0 }`: Don't verify writes and raise network errors. - `{ w: 1 }`: Verify writes on the primary node. (default) - `{ w: n }`: Verify writes on n number of nodes. - `{ w: :majority }`: Verify writes on a majority of nodes. Sample syntax: Moped::Session.new([ "127.0.0.1:27017" ], write: { w: 0 }) session.with(write: { w: -1 })[:users].insert(document) The `:safe` option is no longer valid and will be ignored. ### New Features * \#196 Adding method on collection to rename itself (Arthur Neves) ### Resolved Issues * \#210 Moped no longer attempts to refresh arbiters as they cannot be queried. ## 1.5.1 ### Resolved Issues * \#208 Fixed local jump errors in node. (Brian Norton) ## 1.5.0 ### New Features * The session now has an additional configuration option, called `auto_discover`. which defaults to `true`. Auto-discovery means that nodes that are not provided explicitly to the session but are visible will become available for read/write in the application. This behavior is the same as the existing behavior. The change here is to be able to turn this off by setting `auto_discover: false`. This will tell Moped to only send messages to nodes explicitly provided when instantiating the session. Example: Moped::Session.new([ "127.0.0.1:27017" ], auto_discover: false) ## 1.4.6 ### Resolved Issues * \#191 Checking for "not authorized" in error messages. (Jonathan Hyman) ## 1.4.5 ### Resolved Issues * \#174 Check for "unauthorized" in error messages since codes are not always there. (Jon Hyman) * \#173 Ensure node `refreshed_at` is set even if the node is down, so down nodes don't get hit on every query. ## 1.4.4 ### Resolved Issues * Fixed BSON binary issues on Ruby 2.0.0. * \#169 Added additional authorization failure codes into reply. * \#168 Added additional not master checks in replica set reconfiguration. ## 1.4.3 ### Resolved Issues * \#156 Collection#drop will raise on any error other than collection does not exist. (Daniel Doubrovkine) * \#152 Added `errmsg` "not master" to replica set configuration check. (Christos Trochalakis) * \#151 Dropping collections now always uses primary. (Christos Trochalakis) * \#150 Handle cases where Mongo does not bring back a `query_failure` flag in the reply, but has an error document present. * mongoid/mongoid#2849 Supply proper limit to initial query if either limit or batch_size are provided. * mongoid/mongoid#2831 Fix node refresh when no peers exist. ## 1.4.1/1.4.2 ### Resolved Issues * \#148 Fixed invalid parameters passed when raising a `ReplicaSetReconfigured` exception. ## 1.4.0 ### New Features * \#144 Moped now supports $maxScan options in queries. (Jonathan Hyman) session[:bands].find(name: "Blur").max_scan(50) * \#143 Aggregation pipeline commands no longer force to read from primary. * \#141 Timeouts on sockets are now set to the timeout level provided, as well is active checks now happen before sending both reads and writes. * \#140 Nodes that were provided to Moped's session in intialization, that were removed from the replica set but still alive and accepting connections will no longer be in the list of available nodes. * \#138 Aggregation pipeline now supports array or splat args. (Gosha Arinich) * \#41 `Moped::BSON::ObjectId.from_time` now accepts a `unique` option to ensure the generated id is unique. Moped::BSON::ObjectId.from_time(time, unique: true) * mongoid/mongoid\#2452 A boolean can now be passed to count to determine if the skip and limit options should be included in the value. session[:bands].find(name: "Blur").skip(10).limit(5).count(true) ### Resolved Issues * \#137 `IOError` exceptions during connection go through reconnect process properly. (Peter Kieltyka) * \#120 Return UTF-8 strings when calling `ObjectId#to_s`. * mongoid/mongoid\#2738 Ensure that delete operations don't include special selectors, like $query. * mongoid/mongoid\#2713 Allow collections that have names that start with "system" to be returned by `Database#collection_names`. ## 1.3.2 ### Resolved Issues * \#131 Give better error messages when assertion and assertionCode are present in the result. * \#130 Flag down as down in refresh when not primary or secondary. (Nilson Santos Figueiredo Jr) * \#128 Fix refresh check to only check nodes that have been down longer than the refresh boundary using the proper interval. * \#125 Batch size and no timeout are now respected by queries. (Derek Buttineau) * \#124 Fix packing of bytes in core messages for big endian systems. ## 1.3.1 ### Resolved Issues * \#118 Give better error when invalid URI is provided. (Chris Winslett) * \#116 Handle all cases of replica set step down or reconfiguring. (Chris Winslett) * Change the default retries to 20 and the retry interval to 0.25 seconds. (Old was 30/1) ## 1.3.0 ### New Features * \#114 Moped now accepts connecting with a URI. (Christopher Winslett) Moped::Session.connect("mongodb://localhost:27017/my_db") * \#79 Tailable cursors are now supported. These are just Ruby `Enumerators` that keep the cursor open until the next document appears. The cursor will be closed when it becomes "dead". enumerator = session[:users].find.tailable.each enumerator.next # Will stay open until next doc. * mongoid/mongoid\#2460 Moped now makes the connection timeout configurable by passing a `:timeout` option to the session. This defaults to 5 seconds. Moped::Session.new([ "node1:27017", "node2:27017" ], timeout: 5) * \#49 Support for the 2.2 aggregation framework is included. (Rodrigo Saito) session[:users].aggregate({ "$group" => { "_id" => "$city", "totalpop" => { "$sum" => "$pop" } } }) * \#42 Moped now supports SSL connections to MongoDB. Provide the `ssl: true` option when creating a new `Session`. This is currently experimental. Moped::Session.new([ "ssl.mongohq.com:10004" ], ssl: true) ### Resolved Issues * \#110 Handle timeout errors with SSL connections gracefully and mark nodes as down without failing any other queries. * \#109 Moped reauthorizes on "db assertion failures" with commands that have an unauthorized assertion code in the reply. ## 1.2.9 * Moped now ensures that when reading bytes from the socket that it continues to read until the requested number of bytes have been received. In the case of getting `nil` back it will raise a `ConnectionFailure` and go through the normal failover motions. ## 1.2.8 ### Resolved Issues * \#108 Connection drops that would result in a `nil` response on socket read or a `SocketError` now re-raise a `ConnectionFailure` error which causes the replica set to go through it's failover behavor with node refreshing. * \#104 `Query#explain` now respects limit. * \#103 Port defaults to 27017 instead of zero if not provided. (Chris Winslett) * \#100 Fix duplicate object id potential issue for JRuby. (Tim Olsen) * \#97 Propagate node options to newly discovered nodes. (Adam Lebsack) * \#91 Added more graceful replica set handling when safe mode is enabled and replica sets were reconfigured. (Nicolas Viennot) * \#90 Include arbiters in the list of nodes to disconnect. (Matt Parlane) ## 1.2.7 ### Resolved Issues * \#87 `Moped::BSON::ObjectId.legal?` now returns true for object ids. * \#85 Allow `===` comparisons with object ids to check for equality of the underlying string. (Bob Aman) * \#84 Query hints are no longer wiped on explain. * \#60/\#80 Moped now gracefully handles replica set reconfig and crashes of the primary and secondary. By default, the node list will be refreshed every second and the operation will be retried up to 30 times. This is configurable by setting the `:max_retries` and `:retry_interval` options on the session. Moped::Session.new( [ "node1:27017", "node2:27017" ], retry_interval: 0.5, max_retries: 45 ) ## 1.2.6 ### Resolved Issues * mongoid/mongoid\#2430 Don't include $orderby criteria in update calls. ## 1.2.5 ### Resolved Issues * \#76 Fixed typo in database check on Node. (Mathieu Ravaux) * \#75 Ensure that `Errno::EHOSTUNREACH` is also handled with other socket errors. ## 1.2.2 ### Resolved Issues * \#73 Raise a `Moped::Errors::CursorNotFound` on long running queries where the cursor was killed by the server. (Marius Podwyszynski) * \#72 Reauthenticate properly when an `rs.stepDown()` occurs in the middle of cursor execution. * \#71 When DNS cannot resolve on node initialization, the node will be flagged as down instead of raising a `SocketError`. On subsequent refreshes Moped will attempt to resolve the DNS again to determine if the node can be brought up. ## 1.2.1 ### Resolved Issues * \#63 `Database#collection_names` now returns collections with "system" in the name that aren't core MongoDB system collections. (Hans Hasselberg) * \#62 Ensure `Connection#alive?` returns false if I/O errors occur. (lowang) * \#59 Use the current database, not admin, for `getLastError` commands. (Christopher Winslett) * \#57 Ensure collection name is a string for all operations. * \#50 Fixed connection issues when connection is disconnected mid call. (Jonathan Hyman) ## 1.2.0 ### New Features * mongoid/mongoid\#2251 Allow `continue_on_error` option to be provided to inserts. * mongoid/mongoid\#2210 Added `Session#disconnect` which will disconnect all nodes in the cluster from their respective database servers. Useful for cases where a large number of database connections are being created on separate threads and need to be explicitly closed after their work is completed. * \#33 Added `Session#databases` and `Session#database_names` as a convenience for getting all database information for the server. session = Moped::Session.new([ "localhost:27017" ]) session.database_names #=> [ "moped_test" ] session.databases #=> { "databases" => [{ "name" => "moped_test" }]} ## 1.1.6 ### Resolved Issues * \#45 When providing database names with invalid characters in them, Moped will now raise an `InvalidDatabaseName` error. * \#41 `ObjectId.from_time` now only includes the timestamp, no machine or process information. ## 1.1.5 ### Resolved Issues * \#44 Fixed order of parameters for loading timestamps. (Ralf Kistner) * \#40 Fix explain to return correct number of scanned documents and time. ## 1.1.3 ### Resolved Issues * Queries now can be duped/cloned and be initialized properly. ## 1.1.2 ### Resolved Issues * \#37 Use `TCP_NODELAY` for socket options. (Nicolas Viennot) ## 1.1.1 ### Resolved Issues * mongoid/mongoid\#2175 Fixed sorting by object ids. ## 1.1.0 ### Resolved Issues * \#29 Fixed endian directives order. Moped will now work properly on all architectures. This removes support for MRI 1.9.2. (Miguel Herranz) ### Resolved Issues ## 1.0.1 * mongoid/mongoid\#2175 Fixed sorting by object ids. * \#28 `BSON::Binary` and `BSON::ObjectId` now have readable `to_s` and `inspect` methods. (Ara Howard) ### Resolved Issues