diff options
author | Damien F. Katz <damien@apache.org> | 2010-07-03 03:34:10 +0000 |
---|---|---|
committer | Damien F. Katz <damien@apache.org> | 2010-07-03 03:34:10 +0000 |
commit | d0e2510ccb74b61a62e32f75c35396f62556c2f7 (patch) | |
tree | 1c0050e1fcdb6812b1740f2675d1a2b2f543cba6 | |
parent | 6d73c5551e8a7af4ed0d13c8b94d9eec9dd09d8c (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
-rw-r--r-- | THANKS | 1 | ||||
-rw-r--r-- | src/couchdb/couch_file.erl | 20 | ||||
-rw-r--r-- | src/couchdb/couch_server.erl | 1 |
3 files changed, 19 insertions, 3 deletions
@@ -62,5 +62,6 @@ suggesting improvements or submitting changes. Some of these people are: * Brian Jenkins <bonkydog@bonkydog.com> * Paul Bonser <pib@paulbonser.com> * Caleb Land <caleb.land@gmail.com> + * Juhani Ränkimies <juhani@juranki.com> For a list of authors see the `AUTHORS` file. 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) -> |