diff options
author | Damien F. Katz <damien@apache.org> | 2008-08-05 01:43:40 +0000 |
---|---|---|
committer | Damien F. Katz <damien@apache.org> | 2008-08-05 01:43:40 +0000 |
commit | 88ec14c220592c8c0db7869c9961423e9ee97e7c (patch) | |
tree | 67974f234e4a0201302506e3b7c56a73cf909376 /src/couchdb/couch_rep.erl | |
parent | b218a0e7d425f7b3660433a17c6558f676524730 (diff) |
Added concurrent open db limit and a LRU cache for closing old databases when limit reached (configurable via MaxDbsOpen var in couch.ini). Refactored db update code in couch_db.erl into couch_db_updater.erl.
git-svn-id: https://svn.apache.org/repos/asf/incubator/couchdb/trunk@682560 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/couchdb/couch_rep.erl')
-rw-r--r-- | src/couchdb/couch_rep.erl | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/couchdb/couch_rep.erl b/src/couchdb/couch_rep.erl index b2d46beb..f7aaa67c 100644 --- a/src/couchdb/couch_rep.erl +++ b/src/couchdb/couch_rep.erl @@ -43,7 +43,18 @@ replicate(DbNameA, DbNameB) -> replicate(Source, Target, Options) -> {ok, DbSrc} = open_db(Source), - {ok, DbTgt} = open_db(Target), + try + {ok, DbTgt} = open_db(Target), + try + replicate2(Source, DbSrc, Target, DbTgt, Options) + after + close_db(DbTgt) + end + after + close_db(DbSrc) + end. + +replicate2(Source, DbSrc, Target, DbTgt, Options) -> {ok, HostName} = inet:gethostname(), RepRecKey = ?LOCAL_DOC_PREFIX ++ HostName ++ ":" ++ Source ++ ":" ++ Target, @@ -237,7 +248,12 @@ open_db("http" ++ DbName)-> {ok, "http" ++ DbName ++ "/"} end; open_db(DbName)-> - couch_server:open(DbName). + couch_db:open(DbName, []). + +close_db("http" ++ _)-> + ok; +close_db(DbName)-> + couch_db:close(DbName). enum_docs_since(DbUrl, StartSeq, InFun, InAcc) when is_list(DbUrl) -> |