History. RS Doc updates. Write concern docs.

This commit is contained in:
Kyle Banker 2010-11-29 14:26:26 -05:00
parent 1a14156206
commit 9d8ed102b5
4 changed files with 48 additions and 8 deletions

View File

@ -169,7 +169,7 @@ task :ydoc do
require File.join(File.dirname(__FILE__), 'lib', 'mongo') require File.join(File.dirname(__FILE__), 'lib', 'mongo')
out = File.join('ydoc', Mongo::VERSION) out = File.join('ydoc', Mongo::VERSION)
FileUtils.rm_rf('ydoc') FileUtils.rm_rf('ydoc')
system "yardoc lib/**/*.rb lib/mongo/**/*.rb lib/bson/**/*.rb -e yard/yard_ext.rb -p yard/templates -o #{out} --title MongoRuby-#{Mongo::VERSION} --files docs/TUTORIAL.md,docs/GridFS.md,docs/FAQ.md,docs/REPLICA_SETS.md,docs/HISTORY.md,docs/CREDITS.md,docs/1.0_UPGRADE.md" system "yardoc lib/**/*.rb lib/mongo/**/*.rb lib/bson/**/*.rb -e yard/yard_ext.rb -p yard/templates -o #{out} --title MongoRuby-#{Mongo::VERSION} --files docs/TUTORIAL.md,docs/GridFS.md,docs/FAQ.md,docs/REPLICA_SETS.md,docs/WRITE_CONCERN.md,docs/HISTORY.md,docs/CREDITS.md,docs/1.0_UPGRADE.md"
end end
namespace :gem do namespace :gem do

View File

@ -1,5 +1,17 @@
# MongoDB Ruby Driver History # MongoDB Ruby Driver History
### 1.1.3
2010-11-29
* Distributed reads for replica set secondaries. See /docs/examples/replica_set.rb and
http://api.mongodb.org/ruby/current/file.REPLICA_SETS.html for details.
* Note: when connecting to a replica set, you must use Connection#multi.
* Cursor#count takes optional skip and limit
* Collection#ensure_index for caching index creation calls
* Collection#update and Collection#remove now return error object when using safe mode
* Important fix for int/long serialization on bug introduced in 1.0.9
* Numerous tweaks and bug fixes.
### 1.1.2 ### 1.1.2
2010-11-4 2010-11-4

View File

@ -14,7 +14,7 @@ The driver will attempt to connect to a master node and, when found, will replac
### Read slaves ### Read slaves
If you want to read from a seconday node, you can pass :read_secondary => true. If you want to read from a seconday node, you can pass :read_secondary => true to Connection#multi.
@connection = Connection.multi([['n1.mydb.net', 27017], ['n2.mydb.net', 27017], ['n3.mydb.net', 27017]], @connection = Connection.multi([['n1.mydb.net', 27017], ['n2.mydb.net', 27017], ['n3.mydb.net', 27017]],
:read_secondary => true) :read_secondary => true)
@ -23,9 +23,9 @@ A random secondary will be chosen to be read from. In a typical multi-process Ru
### Connection Failures ### Connection Failures
Imagine that our master node goes offline. How will the driver respond? Imagine that either the master node or one of the read nodes goes offline. How will the driver respond?
At first, the driver will try to send operations to what was the master node. These operations will fail, and the driver will raise a *ConnectionFailure* exception. It then becomes the client's responsibility to decide how to handle this. If any read operation fails, the driver will raise a *ConnectionFailure* exception. It then becomes the client's responsibility to decide how to handle this.
If the client decides to retry, it's not guaranteed that another member of the replica set will have been promoted to master right away, so it's still possible that the driver will raise another *ConnectionFailure*. However, once a member has been promoted to master, typically within a few seconds, subsequent operations will succeed. If the client decides to retry, it's not guaranteed that another member of the replica set will have been promoted to master right away, so it's still possible that the driver will raise another *ConnectionFailure*. However, once a member has been promoted to master, typically within a few seconds, subsequent operations will succeed.
@ -33,10 +33,11 @@ The driver will essentially cycle through all known seed addresses until a node
### Recovery ### Recovery
Driver users may wish to wrap their database calls with failure recovery code. Here's one possibility: Driver users may wish to wrap their database calls with failure recovery code. Here's one possibility, which will attempt to connection
every half second and time out after thirty seconds.
# Ensure retry upon failure # Ensure retry upon failure
def rescue_connection_failure(max_retries=5) def rescue_connection_failure(max_retries=60)
success = false success = false
retries = 0 retries = 0
while !success while !success
@ -46,7 +47,7 @@ Driver users may wish to wrap their database calls with failure recovery code. H
rescue Mongo::ConnectionFailure => ex rescue Mongo::ConnectionFailure => ex
retries += 1 retries += 1
raise ex if retries >= max_retries raise ex if retries >= max_retries
sleep(1) sleep(0.5)
end end
end end
end end
@ -74,4 +75,3 @@ Make sure you have a replica set running on localhost before trying to run these
* [Replica Sets](http://www.mongodb.org/display/DOCS/Replica+Set+Configuration) * [Replica Sets](http://www.mongodb.org/display/DOCS/Replica+Set+Configuration)
* [Replics Set Configuration](http://www.mongodb.org/display/DOCS/Replica+Set+Configuration) * [Replics Set Configuration](http://www.mongodb.org/display/DOCS/Replica+Set+Configuration)

28
docs/WRITE_CONCERN.md Normal file
View File

@ -0,0 +1,28 @@
# Write Concern in Ruby
## Setting the write concern
Write concern is set using the `:safe` option. There are several possible options:
@collection.save({:doc => 'foo'}, :safe => true)
@collection.save({:doc => 'foo'}, :safe => {:w => 2})
@collection.save({:doc => 'foo'}, :safe => {:w => 2, :wtimeout => 200})
@collection.save({:doc => 'foo'}, :safe => {:w => 2, :wtimeout => 200, :fsync => true})
The first, `true`, simply indicates that we should request a response from the server to ensure that to errors have occurred. The second, `{:w => 2}`forces the server to wait until at least two servers have recorded the write. The third does the same but will time out if the replication can't be completed in 200 milliseconds. The fourth forces an fsync on each server being written to (note: this option is rarely necessary and will have a dramaticly negative effect on performance).
## Write concern inheritance
The Ruby driver allows you to set write concern on each of four levels: the connection, database, collection, and write operation.
Objects will inherit the default write concern from their parents. Thus, if you set a write concern of `{:w => 1}` when creating
a new connection, then all databases and collections created from that connection will inherit the same setting. See this code example:
@con = Mongo::Connection.new('localhost', 27017, :safe => {:w => 2})
@db = @con['test']
@collection = @db['foo']
@collection.save({:name => 'foo'})
@collection.save({:name => 'bar'}, :safe => false)
Here, the first call to Collection#save will use the inherited write concern, `{:w => 2}`. But notice that the second call
to Collection#save overrides this setting.