Strange thing about mongodb-erlang driver when using replica set -
my code this:
replset = {<<"rs1">>, [{localhost, 27017}, {localhost, 27018}, {localhost, 27019}]}, conn_pool = resource_pool:new (mongo:rs_connect_factory(replset), 10), ... conn = resource_pool:get(conn_pool) case mongo:do(safe, master, conn, ?database, fun() -> mongo:insert(mytable, {'_id', 26, d, 11}) end end) ... 27017 primary node, ofc can insert data successfully.
but, when put 1 secondary node in code instead of of mongo rs instances: replset = {<<"rs1">>, [{localhost, 27019}]}, can insert data.
i thought should have thrown exception or error, had written data successfully.
why happened?
when connect replica set, specify name of replset , of node names seeds. driver connects seed nodes in turn , discovers real replica set membership/config/status via 'db.ismaster()' command.
since discovers node primary way, able route write requests accordingly. same technique enables automatically failover newly elected primary when original primary fails , new 1 elected.
Comments
Post a Comment