From 458fe73b655ed2fa842f2088ec45208b59450723 Mon Sep 17 00:00:00 2001 From: benoitc Date: Sat, 8 Dec 2012 10:53:20 +0100 Subject: [PATCH] allows data dir to be set in the db config. --- apps/couch/src/couch_compaction_daemon.erl | 2 +- apps/couch/src/couch_db_updater.erl | 6 +++--- apps/couch/src/couch_server.erl | 9 ++++++++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/apps/couch/src/couch_compaction_daemon.erl b/apps/couch/src/couch_compaction_daemon.erl index d7912ebc..3a6159de 100644 --- a/apps/couch/src/couch_compaction_daemon.erl +++ b/apps/couch/src/couch_compaction_daemon.erl @@ -295,7 +295,7 @@ can_db_compact(#config{db_frag = Threshold} = Config, Db) -> false -> false; true -> - Free = free_space(couch_config:get("couchdb", "database_dir")), + Free = free_space(couch_server:database_dir()), case Free >= SpaceRequired of true -> true; diff --git a/apps/couch/src/couch_db_updater.erl b/apps/couch/src/couch_db_updater.erl index 0b89dcbe..9e8f8934 100644 --- a/apps/couch/src/couch_db_updater.erl +++ b/apps/couch/src/couch_db_updater.erl @@ -27,7 +27,7 @@ init({DbName, Filepath, Fd, Options}) -> Header = #db_header{}, ok = couch_file:write_header(Fd, Header), % delete any old compaction files that might be hanging around - RootDir = couch_config:get("couchdb", "database_dir", "."), + RootDir = couch_server:database_dir(), couch_file:delete(RootDir, Filepath ++ ".compact"); false -> case couch_file:read_header(Fd) of @@ -68,7 +68,7 @@ handle_call(cancel_compact, _From, #db{compactor_pid = nil} = Db) -> handle_call(cancel_compact, _From, #db{compactor_pid = Pid} = Db) -> unlink(Pid), exit(Pid, kill), - RootDir = couch_config:get("couchdb", "database_dir", "."), + RootDir = couch_server:database_dir(), ok = couch_file:delete(RootDir, Db#db.filepath ++ ".compact"), Db2 = Db#db{compactor_pid = nil}, ok = gen_server:call(couch_server, {db_updated, Db2}, infinity), @@ -200,7 +200,7 @@ handle_cast({compact_done, CompactFilepath}, #db{filepath=Filepath}=Db) -> ?LOG_DEBUG("CouchDB swapping files ~s and ~s.", [Filepath, CompactFilepath]), - RootDir = couch_config:get("couchdb", "database_dir", "."), + RootDir = couch_server:database_dir(), couch_file:delete(RootDir, Filepath), ok = file:rename(CompactFilepath, Filepath), close_db(Db), diff --git a/apps/couch/src/couch_server.erl b/apps/couch/src/couch_server.erl index 458b3c9f..8beef07e 100644 --- a/apps/couch/src/couch_server.erl +++ b/apps/couch/src/couch_server.erl @@ -20,6 +20,7 @@ -export([dev_start/0,is_admin/2,has_admins/0,get_stats/0,config_change/4]). -export([close_lru/0]). -export([get_uuid/0]). +-export([database_dir/0]). -include("couch_db.hrl"). @@ -156,13 +157,19 @@ hash_admin_passwords(Persist) -> couch_config:set("admins", User, ?b2l(HashedPassword), Persist) end, couch_passwords:get_unhashed_admins()). +database_dir() -> + {ok, Cwd} = file:get_cwd(), + Default = couch:get_app_env(database_dir, Cwd), + couch_config:get("couchdb", "database_dir", Default). + + init([]) -> % read config and register for configuration changes % just stop if one of the config settings change. couch_server_sup % will restart us and then we will pick up the new settings. - RootDir = couch_config:get("couchdb", "database_dir", "."), + RootDir = database_dir(), MaxDbsOpen = list_to_integer( couch_config:get("couchdb", "max_dbs_open")), ok = couch_config:register(fun ?MODULE:config_change/4),