Updated Branches: refs/heads/1.2.x f2a3a4cfb -> df81c2a1f
Fix replicator db changes loop crash after _security update The changes feed loop on the replicator database would crash if this database's _security object was updated. Closes COUCHDB-1353. Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/df81c2a1 Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/df81c2a1 Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/df81c2a1 Branch: refs/heads/1.2.x Commit: df81c2a1f478774b6dde16b1d7904ea2793e3fa0 Parents: f2a3a4c Author: Filipe David Borba Manana <[email protected]> Authored: Fri Dec 2 12:47:26 2011 +0000 Committer: Filipe David Borba Manana <[email protected]> Committed: Fri Dec 2 12:51:02 2011 +0000 ---------------------------------------------------------------------- share/www/script/test/replicator_db.js | 40 ++++++++++++++++++++++++ src/couchdb/couch_replication_manager.erl | 3 +- 2 files changed, 42 insertions(+), 1 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb/blob/df81c2a1/share/www/script/test/replicator_db.js ---------------------------------------------------------------------- diff --git a/share/www/script/test/replicator_db.js b/share/www/script/test/replicator_db.js index 058b6a7..46d3873 100644 --- a/share/www/script/test/replicator_db.js +++ b/share/www/script/test/replicator_db.js @@ -1341,6 +1341,42 @@ couchTests.replicator_db = function(debug) { } + function test_rep_db_update_security() { + var dbA_copy = new CouchDB("test_suite_rep_db_a_copy"); + var dbB_copy = new CouchDB("test_suite_rep_db_b_copy"); + var repDoc1, repDoc2; + var xhr, i, doc, copy, new_doc; + var docs = makeDocs(1, 3); + + populate_db(dbA, docs); + populate_db(dbB, docs); + populate_db(dbA_copy, []); + populate_db(dbB_copy, []); + + repDoc1 = { + _id: "rep1", + source: CouchDB.protocol + host + "/" + dbA.name, + target: dbA_copy.name + }; + repDoc2 = { + _id: "rep2", + source: CouchDB.protocol + host + "/" + dbB.name, + target: dbB_copy.name + }; + + TEquals(true, repDb.save(repDoc1).ok); + waitForRep(repDb, repDoc1, "completed"); + + T(repDb.setSecObj({ + readers: { + names: ["joe"] + } + }).ok); + + TEquals(true, repDb.save(repDoc2).ok); + waitForRep(repDb, repDoc2, "completed"); + } + // run all the tests var server_config = [ { @@ -1422,6 +1458,10 @@ couchTests.replicator_db = function(debug) { restartServer(); run_on_modified_server(server_config, test_invalid_filter); + repDb.deleteDb(); + restartServer(); + run_on_modified_server(server_config, test_rep_db_update_security); + /* * Disabled, since error state would be set on the document only after * the exponential backoff retry done by the replicator database listener http://git-wip-us.apache.org/repos/asf/couchdb/blob/df81c2a1/src/couchdb/couch_replication_manager.erl ---------------------------------------------------------------------- diff --git a/src/couchdb/couch_replication_manager.erl b/src/couchdb/couch_replication_manager.erl index 1c038d6..801af7c 100644 --- a/src/couchdb/couch_replication_manager.erl +++ b/src/couchdb/couch_replication_manager.erl @@ -228,7 +228,8 @@ changes_feed_loop() -> Server = self(), Pid = spawn_link( fun() -> - {ok, Db} = couch_db:open_int(RepDbName, [sys_db]), + DbOpenOptions = [{user_ctx, RepDb#db.user_ctx}, sys_db], + {ok, Db} = couch_db:open_int(RepDbName, DbOpenOptions), ChangesFeedFun = couch_changes:handle_changes( #changes_args{ include_docs = true,
