You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2010/06/23 20:59:42 UTC
svn commit: r957303 - in /couchdb/trunk/src/couchdb: couch_db_updater.erl
couch_file.erl couch_server.erl couch_view.erl couch_view_group.erl
Author: damien
Date: Wed Jun 23 18:59:42 2010
New Revision: 957303
URL: http://svn.apache.org/viewvc?rev=957303&view=rev
Log:
Make file deletions async to avoid pauses during compaction and db deletion. Fixes COUCHDB-780.
Modified:
couchdb/trunk/src/couchdb/couch_db_updater.erl
couchdb/trunk/src/couchdb/couch_file.erl
couchdb/trunk/src/couchdb/couch_server.erl
couchdb/trunk/src/couchdb/couch_view.erl
couchdb/trunk/src/couchdb/couch_view_group.erl
Modified: couchdb/trunk/src/couchdb/couch_db_updater.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_db_updater.erl?rev=957303&r1=957302&r2=957303&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_db_updater.erl (original)
+++ couchdb/trunk/src/couchdb/couch_db_updater.erl Wed Jun 23 18:59:42 2010
@@ -27,7 +27,7 @@ init({MainPid, DbName, Filepath, Fd, Opt
Header = #db_header{},
ok = couch_file:write_header(Fd, Header),
% delete any old compaction files that might be hanging around
- file:delete(Filepath ++ ".compact");
+ couch_file:delete(Filepath ++ ".compact");
false ->
ok = couch_file:upgrade_old_header(Fd, <<$g, $m, $k, 0>>), % 09 UPGRADE CODE
{ok, Header} = couch_file:read_header(Fd)
@@ -171,7 +171,7 @@ handle_cast({compact_done, CompactFilepa
?LOG_DEBUG("CouchDB swapping files ~s and ~s.",
[Filepath, CompactFilepath]),
- file:delete(Filepath),
+ couch_file:delete(Filepath),
ok = file:rename(CompactFilepath, Filepath),
close_db(Db),
ok = gen_server:call(Db#db.main_pid, {db_updated, NewDb2}),
Modified: couchdb/trunk/src/couchdb/couch_file.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_file.erl?rev=957303&r1=957302&r2=957303&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_file.erl (original)
+++ couchdb/trunk/src/couchdb/couch_file.erl Wed Jun 23 18:59:42 2010
@@ -28,6 +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]).
%%----------------------------------------------------------------------
%% Args: Valid Options are [create] and [create,overwrite].
@@ -169,6 +170,15 @@ close(Fd) ->
erlang:demonitor(MRef, [flush])
end.
+delete(Filepath) ->
+ case file:rename(Filepath, Filepath ++ ".delete") of
+ ok ->
+ spawn(file, delete, [Filepath ++ ".delete"]),
+ ok;
+ Error ->
+ Error
+ end.
+
% 09 UPGRADE CODE
old_pread(Fd, Pos, Len) ->
{ok, <<RawBin:Len/binary>>, false} = gen_server:call(Fd, {pread, Pos, Len}, infinity),
Modified: couchdb/trunk/src/couchdb/couch_server.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_server.erl?rev=957303&r1=957302&r2=957303&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_server.erl (original)
+++ couchdb/trunk/src/couchdb/couch_server.erl Wed Jun 23 18:59:42 2010
@@ -320,9 +320,9 @@ handle_call({delete, DbName, _Options},
%% Delete any leftover .compact files. If we don't do this a subsequent
%% request for this DB will try to open the .compact file and use it.
- file:delete(FullFilepath ++ ".compact"),
+ couch_file:delete(FullFilepath ++ ".compact"),
- case file:delete(FullFilepath) of
+ case couch_file:delete(FullFilepath) of
ok ->
couch_db_update_notifier:notify({deleted, DbName}),
{reply, ok, Server2};
Modified: couchdb/trunk/src/couchdb/couch_view.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_view.erl?rev=957303&r1=957302&r2=957303&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_view.erl (original)
+++ couchdb/trunk/src/couchdb/couch_view.erl Wed Jun 23 18:59:42 2010
@@ -94,7 +94,7 @@ cleanup_index_files(Db) ->
re:run(FilePath, RegExp, [{capture, none}]) =:= nomatch],
% delete unused files
?LOG_DEBUG("deleting unused view index files: ~p",[DeleteFiles]),
- [file:delete(File)||File <- DeleteFiles],
+ [couch_file:delete(File)||File <- DeleteFiles],
ok.
list_index_files(Db) ->
@@ -316,7 +316,7 @@ do_reset_indexes(DbName, Root) ->
delete_from_ets(Pid, DbName, Sig)
end, Names),
delete_index_dir(Root, DbName),
- file:delete(Root ++ "/." ++ ?b2l(DbName) ++ "_temp").
+ couch_file:delete(Root ++ "/." ++ ?b2l(DbName) ++ "_temp").
handle_info({'EXIT', FromPid, Reason}, Server) ->
case ets:lookup(couch_groups_by_updater, FromPid) of
Modified: couchdb/trunk/src/couchdb/couch_view_group.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_view_group.erl?rev=957303&r1=957302&r2=957303&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_view_group.erl (original)
+++ couchdb/trunk/src/couchdb/couch_view_group.erl Wed Jun 23 18:59:42 2010
@@ -186,7 +186,7 @@ handle_cast({compact_done, #group{curren
?LOG_INFO("View index compaction complete for ~s ~s", [DbName, GroupId]),
FileName = index_file_name(RootDir, DbName, GroupSig),
CompactName = index_file_name(compact, RootDir, DbName, GroupSig),
- file:delete(FileName),
+ couch_file:delete(FileName),
ok = file:rename(CompactName, FileName),
%% if an updater is running, kill it and start a new one
@@ -545,7 +545,7 @@ reset_file(Db, Fd, DbName, #group{sig=Si
init_group(Db, Fd, reset_group(Group), nil).
delete_index_file(RootDir, DbName, GroupSig) ->
- file:delete(index_file_name(RootDir, DbName, GroupSig)).
+ couch_file:delete(index_file_name(RootDir, DbName, GroupSig)).
init_group(Db, Fd, #group{views=Views}=Group, nil) ->
init_group(Db, Fd, Group,