@@ -419,32 +419,47 @@ nuke_dir_test_() ->
419419 RootDir = filename :dirname (File0 ),
420420 BaseName = filename :basename (File0 ),
421421 Seed = crypto :rand_uniform (1000000000 , 9999999999 ),
422- DDocDir = io_lib :format (" db.~b _design" , [Seed ]),
422+ DBName0 = io_lib :format (" db.~b " , [Seed ]),
423+ DBName = iolist_to_binary (DBName0 ),
424+ DDocDir = io_lib :format (" ~s _design" , [DBName0 ]),
423425 ViewDir = filename :join ([RootDir , DDocDir ]),
424426 file :make_dir (ViewDir ),
425427 File = filename :join ([ViewDir , BaseName ]),
426428 file :rename (File0 , File ),
427429 ok = couch_file :init_delete_dir (RootDir ),
428430 ok = file :write_file (File , <<>>),
429- {RootDir , ViewDir }
431+ {RootDir , ViewDir , DBName }
430432 end ,
431- fun ({RootDir , ViewDir }) ->
433+ fun ({RootDir , ViewDir , _DBName }) ->
432434 meck :unload (config ),
433435 remove_dir (ViewDir ),
434436 Ext = filename :extension (ViewDir ),
435437 case filelib :wildcard (RootDir ++ " /*.deleted" ++ Ext ) of
436438 [DelDir ] -> remove_dir (DelDir );
437439 _ -> ok
440+ end ,
441+ RecDirPaths = RootDir ++ " /.view_recovery" ++ " /*_design" ,
442+ case filelib :wildcard (RecDirPaths ) of
443+ RecDirs -> [remove_dir (Dir ) || Dir <- RecDirs ];
444+ [] -> ok
438445 end
439446 end ,
440447 [
441448 fun (Cfg ) ->
442- {" enable_database_recovery = false" ,
443- make_rename_dir_test_case (Cfg , false )}
449+ {" enable_database_recovery = false, context = delete" ,
450+ make_rename_dir_test_case (Cfg , false , delete )}
451+ end ,
452+ fun (Cfg ) ->
453+ {" enable_database_recovery = false, context = compaction" ,
454+ make_rename_dir_test_case (Cfg , false , compaction )}
444455 end ,
445456 fun (Cfg ) ->
446- {" enable_database_recovery = true" ,
447- make_rename_dir_test_case (Cfg , true )}
457+ {" enable_database_recovery = true, context = delete" ,
458+ make_rename_dir_test_case (Cfg , true , delete )}
459+ end ,
460+ fun (Cfg ) ->
461+ {" enable_database_recovery = true, context = compaction" ,
462+ make_rename_dir_test_case (Cfg , true , compaction )}
448463 end ,
449464 fun (Cfg ) ->
450465 {" delete_after_rename = true" ,
@@ -459,24 +474,34 @@ nuke_dir_test_() ->
459474 }.
460475
461476
462- make_rename_dir_test_case ({RootDir , ViewDir }, EnableRecovery ) ->
477+ make_rename_dir_test_case ({RootDir , ViewDir , DBName }, EnableRecovery , Context ) ->
463478 meck :expect (config , get_boolean , fun
464479 (" couchdb" , " enable_database_recovery" , _ ) -> EnableRecovery ;
465480 (" couchdb" , " delete_after_rename" , _ ) -> true
466481 end ),
467482 DirExistsBefore = filelib :is_dir (ViewDir ),
468- couch_file :nuke_dir (RootDir , ViewDir ),
483+
484+ couch_file :nuke_dir (
485+ RootDir ,
486+ ViewDir ,
487+ [{db_name , DBName }, {context , Context }]
488+ ),
469489 DirExistsAfter = filelib :is_dir (ViewDir ),
470- Ext = filename :extension (ViewDir ),
471- RenamedDirs = filelib :wildcard (RootDir ++ " /*.deleted" ++ Ext ),
490+ RenamedDirs = if Context =:= delete ->
491+ filelib :wildcard (RootDir ++ " /.view_recovery" ++ " /*_design" );
492+ true ->
493+ Ext = filename :extension (ViewDir ),
494+ filelib :wildcard (RootDir ++ " /*.deleted" ++ Ext )
495+ end ,
496+
472497 ExpectRenamedCount = if EnableRecovery -> 1 ; true -> 0 end ,
473498 [
474499 ? _assert (DirExistsBefore ),
475500 ? _assertNot (DirExistsAfter ),
476501 ? _assertEqual (ExpectRenamedCount , length (RenamedDirs ))
477502 ].
478503
479- make_delete_dir_test_case ({RootDir , ViewDir }, DeleteAfterRename ) ->
504+ make_delete_dir_test_case ({RootDir , ViewDir , _DBName }, DeleteAfterRename ) ->
480505 meck :expect (config , get_boolean , fun
481506 (" couchdb" , " enable_database_recovery" , _ ) -> false ;
482507 (" couchdb" , " delete_after_rename" , _ ) -> DeleteAfterRename
0 commit comments