Updated Branches: refs/heads/master 4d9f690da -> 0c6f529a7
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/0c6f529a Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/0c6f529a Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/0c6f529a Branch: refs/heads/master Commit: 0c6f529a73c8ce4e81e95e90eabf2f0b772b3a64 Parents: 4d9f690 Author: Filipe David Borba Manana <fdman...@apache.org> Authored: Fri Dec 2 12:47:26 2011 +0000 Committer: Filipe David Borba Manana <fdman...@apache.org> Committed: Fri Dec 2 12:47:26 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/0c6f529a/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/0c6f529a/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,