Skip to content

Commit f1fa568

Browse files
committed
Address Eric's comments
- introduce init_recovery_dir/1 to make sure that new recovery dir exists - add new sample recoveried index directory and file - pass DbName to reset_indexes/3 as mandatory - change directory name from .view_recovery to .recovery - avoid case double-fold and unreached call Bugzid: 86318
1 parent 4baa263 commit f1fa568

File tree

3 files changed

+23
-18
lines changed

3 files changed

+23
-18
lines changed

src/couch/src/couch_file.erl

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@
4343
-export([append_raw_chunk/2, assemble_file_chunk/1, assemble_file_chunk/2]).
4444
-export([append_term/2, append_term/3, append_term_md5/2, append_term_md5/3]).
4545
-export([write_header/2, read_header/1]).
46-
-export([delete/2, delete/3, nuke_dir/2, nuke_dir/3, init_delete_dir/1]).
46+
-export([delete/2, delete/3, nuke_dir/2, nuke_dir/3]).
47+
-export([init_delete_dir/1, init_recovery_dir/1]).
4748

4849
% gen_server callbacks
4950
-export([init/1, terminate/2, code_change/3]).
@@ -266,7 +267,7 @@ rename_file(Original) ->
266267

267268
rename_dir(RootDelDir, Original, DbName) ->
268269
DbDir = binary_to_list(DbName) ++ "_design",
269-
Deleted_Index_Dir = filename:join([RootDelDir, ".view_recovery", DbDir]),
270+
Deleted_Index_Dir = filename:join([RootDelDir, ".recovery", DbDir]),
270271
Now = calendar:local_time(),
271272
filelib:ensure_dir(Deleted_Index_Dir),
272273
case file:rename(Original, Deleted_Index_Dir) of
@@ -335,6 +336,9 @@ init_delete_dir(RootDir) ->
335336
end),
336337
ok.
337338

339+
init_recovery_dir(RootDir) ->
340+
Dir = filename:join(RootDir,".recovery"),
341+
filelib:ensure_dir(filename:join(Dir,"foo")).
338342

339343
read_header(Fd) ->
340344
case ioq:call(Fd, find_header, erlang:get(io_priority)) of
@@ -768,7 +772,10 @@ make_filename_fixtures(DbNames) ->
768772
"shards/00000000-1fffffff/~s.1458336317.couch",
769773
".shards/00000000-1fffffff/~s.1458336317_design",
770774
".shards/00000000-1fffffff/~s.1458336317_design"
771-
"/mrview/3133e28517e89a3e11435dd5ac4ad85a.view"
775+
"/mrview/3133e28517e89a3e11435dd5ac4ad85a.view",
776+
".recovery/shards/00000000-1fffffff/~s.1499329402_design",
777+
".recovery/shards/00000000-1fffffff/~s.1499329402_design"
778+
"/mrview/8fabddcb28f501d6764afd7def3bd352.view"
772779
],
773780
lists:flatmap(fun(DbName) ->
774781
lists:map(fun(Format) ->

src/couch/test/couch_file_tests.erl

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -438,11 +438,8 @@ nuke_dir_test_() ->
438438
[DelDir] -> remove_dir(DelDir);
439439
_ -> ok
440440
end,
441-
RecDirPaths = RootDir ++ "/.view_recovery" ++ "/*_design",
442-
case filelib:wildcard(RecDirPaths) of
443-
RecDirs -> [remove_dir(Dir) || Dir <- RecDirs];
444-
[] -> ok
445-
end
441+
RecDirPaths = RootDir ++ "/.recovery" ++ "/*_design",
442+
[remove_dir(Dir) || Dir <- filelib:wildcard(RecDirPaths)]
446443
end,
447444
[
448445
fun(Cfg) ->
@@ -488,7 +485,7 @@ make_rename_dir_test_case({RootDir, ViewDir, DBName}, EnableRecovery, Context) -
488485
),
489486
DirExistsAfter = filelib:is_dir(ViewDir),
490487
RenamedDirs = if Context =:= delete ->
491-
filelib:wildcard(RootDir ++ "/.view_recovery" ++ "/*_design");
488+
filelib:wildcard(RootDir ++ "/.recovery" ++ "/*_design");
492489
true ->
493490
Ext = filename:extension(ViewDir),
494491
filelib:wildcard(RootDir ++ "/*.deleted" ++ Ext)

src/couch_index/src/couch_index_server.erl

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ init([]) ->
122122
couch_event:link_listener(?MODULE, handle_db_event, nil, [all_dbs]),
123123
RootDir = couch_index_util:root_dir(),
124124
couch_file:init_delete_dir(RootDir),
125+
couch_file:init_recovery_dir(RootDir),
125126
{ok, #st{root_dir=RootDir}}.
126127

127128

@@ -154,13 +155,13 @@ handle_call({async_error, {DbName, _DDocId, Sig}, Error}, _From, State) ->
154155
[gen_server:reply(From, Error) || From <- Waiters],
155156
ets:delete(?BY_SIG, {DbName, Sig}),
156157
{reply, ok, State};
157-
handle_call({reset_indexes, Options}, _From, State) ->
158-
reset_indexes(Options, State#st.root_dir),
158+
handle_call({reset_indexes, DbName, Options}, _From, State) ->
159+
reset_indexes(DbName, State#st.root_dir, Options),
159160
{reply, ok, State}.
160161

161162

162-
handle_cast({reset_indexes, Options}, State) ->
163-
reset_indexes(Options, State#st.root_dir),
163+
handle_cast({reset_indexes, DbName, Options}, State) ->
164+
reset_indexes(DbName, State#st.root_dir, Options),
164165
{noreply, State}.
165166

166167
handle_info({'EXIT', Pid, Reason}, Server) ->
@@ -219,8 +220,7 @@ new_index({Mod, IdxState, DbName, Sig}) ->
219220
end.
220221

221222

222-
reset_indexes(Options, Root) ->
223-
DbName = couch_util:get_value(db_name, Options),
223+
reset_indexes(DbName, Root, Options) ->
224224
% shutdown all the updaters and clear the files, the db got changed
225225
Fun = fun({_, {DDocId, Sig}}) ->
226226
[{_, Pid}] = ets:lookup(?BY_SIG, {DbName, Sig}),
@@ -231,7 +231,8 @@ reset_indexes(Options, Root) ->
231231
end,
232232
lists:foreach(Fun, ets:lookup(?BY_DB, DbName)),
233233
Path = couch_index_util:index_dir("", DbName),
234-
couch_file:nuke_dir(Root, Path, Options).
234+
Options1 = [{db_name, DbName} | Options],
235+
couch_file:nuke_dir(Root, Path, Options1).
235236

236237

237238
add_to_ets(DbName, Sig, DDocId, Pid) ->
@@ -247,10 +248,10 @@ rem_from_ets(DbName, Sig, DDocId, Pid) ->
247248

248249

249250
handle_db_event(DbName, created, St) ->
250-
gen_server:cast(?MODULE, {reset_indexes, [{db_name, DbName}, {context, []}]}),
251+
gen_server:cast(?MODULE, {reset_indexes, DbName, []}),
251252
{ok, St};
252253
handle_db_event(DbName, deleted, St) ->
253-
gen_server:cast(?MODULE, {reset_indexes, [{db_name, DbName}, {context, delete}]}),
254+
gen_server:cast(?MODULE, {reset_indexes, DbName, [{context, delete}]}),
254255
{ok, St};
255256
handle_db_event(DbName, {ddoc_updated, DDocId}, St) ->
256257
lists:foreach(fun({_DbName, {_DDocId, Sig}}) ->

0 commit comments

Comments
 (0)