summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDamien F. Katz <damien@apache.org>2010-07-03 03:34:10 +0000
committerDamien F. Katz <damien@apache.org>2010-07-03 03:34:10 +0000
commitd0e2510ccb74b61a62e32f75c35396f62556c2f7 (patch)
tree1c0050e1fcdb6812b1740f2675d1a2b2f543cba6 /src
parent6d73c5551e8a7af4ed0d13c8b94d9eec9dd09d8c (diff)
Fixed intermittent problem deleting files on Windows. Added Juhani Ränkimies to THANKS
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@960150 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
-rw-r--r--src/couchdb/couch_file.erl20
-rw-r--r--src/couchdb/couch_server.erl1
2 files changed, 18 insertions, 3 deletions
diff --git a/src/couchdb/couch_file.erl b/src/couchdb/couch_file.erl
index 6671bcc1..b130c1db 100644
--- a/src/couchdb/couch_file.erl
+++ b/src/couchdb/couch_file.erl
@@ -28,7 +28,7 @@
-export([pread_binary/2, read_header/1, truncate/2, upgrade_old_header/2]).
-export([append_term_md5/2,append_binary_md5/2]).
-export([init/1, terminate/2, handle_call/3, handle_cast/2, code_change/3, handle_info/2]).
--export([delete/1]).
+-export([delete/1,init_delete_dir/0]).
%%----------------------------------------------------------------------
%% Args: Valid Options are [create] and [create,overwrite].
@@ -171,14 +171,28 @@ close(Fd) ->
end.
delete(Filepath) ->
- case file:rename(Filepath, Filepath ++ ".delete") of
+ DbDir = couch_config:get("couchdb", "database_dir"),
+ DelFile = filename:join([DbDir,".delete", ?b2l(couch_uuids:random())]),
+ case file:rename(Filepath, DelFile) of
ok ->
- spawn(file, delete, [Filepath ++ ".delete"]),
+ spawn(file, delete, [DelFile]),
ok;
Error ->
Error
end.
+
+init_delete_dir() ->
+ Dir = filename:join(couch_config:get("couchdb","database_dir"),".delete"),
+ % note: ensure_dir requires an actual filename companent, which is the
+ % reason for "foo".
+ filelib:ensure_dir(filename:join(Dir,"foo")),
+ filelib:fold_files(Dir, ".*", true,
+ fun(Filename, _) ->
+ ok = file:delete(Filename)
+ end, ok).
+
+
% 09 UPGRADE CODE
old_pread(Fd, Pos, Len) ->
{ok, <<RawBin:Len/binary>>, false} = gen_server:call(Fd, {pread, Pos, Len}, infinity),
diff --git a/src/couchdb/couch_server.erl b/src/couchdb/couch_server.erl
index e930c021..84a02d13 100644
--- a/src/couchdb/couch_server.erl
+++ b/src/couchdb/couch_server.erl
@@ -131,6 +131,7 @@ init([]) ->
gen_server:call(couch_server,
{set_max_dbs_open, list_to_integer(Max)})
end),
+ ok = couch_file:init_delete_dir(),
hash_admin_passwords(),
ok = couch_config:register(
fun("admins", _Key, _Value, Persist) ->