|
49 | 49 | get_uuid/1, |
50 | 50 |
|
51 | 51 | set_revs_limit/2, |
| 52 | + set_max_generation/2, |
52 | 53 | set_purge_infos_limit/2, |
53 | 54 | set_security/2, |
54 | 55 | set_props/2, |
@@ -388,6 +389,17 @@ set_revs_limit(#st{header = Header} = St, RevsLimit) -> |
388 | 389 | }, |
389 | 390 | {ok, increment_update_seq(NewSt)}. |
390 | 391 |
|
| 392 | +set_max_generation(#st{filepath = FilePath, gen_fds = GenFds, header = Header} = St, MaxGen) -> |
| 393 | + NewSt = St#st{ |
| 394 | + header = couch_bt_engine_header:set(Header, [ |
| 395 | + {max_generation, MaxGen} |
| 396 | + ]), |
| 397 | + needs_commit = true |
| 398 | + }, |
| 399 | + GenFds1 = open_missing_generation_files(FilePath, GenFds, MaxGen), |
| 400 | + NewSt1 = NewSt#st{gen_fds = GenFds1}, |
| 401 | + {ok, increment_update_seq(NewSt1)}. |
| 402 | + |
391 | 403 | set_purge_infos_limit(#st{header = Header} = St, PurgeInfosLimit) -> |
392 | 404 | NewSt = St#st{ |
393 | 405 | header = couch_bt_engine_header:set(Header, [ |
@@ -982,6 +994,18 @@ open_generation_files(FilePath, Generations, Options) -> |
982 | 994 | lists:seq(1, Generations) |
983 | 995 | ). |
984 | 996 |
|
| 997 | +open_missing_generation_files(FilePath, GenFds, MaxGen) -> |
| 998 | + open_missing_generation_files(FilePath, GenFds, MaxGen, 1). |
| 999 | + |
| 1000 | +open_missing_generation_files(FilePath, GenFds, MaxGen, Gen) when Gen > MaxGen -> |
| 1001 | + GenFds; |
| 1002 | +open_missing_generation_files(FilePath, [], MaxGen, Gen) -> |
| 1003 | + Rest = open_missing_generation_files(FilePath, [], MaxGen, Gen + 1), |
| 1004 | + Fd = open_generation_file(FilePath, Gen, []), |
| 1005 | + [Fd | Rest]; |
| 1006 | +open_missing_generation_files(FilePath, [Fd | Rest], MaxGen, Gen) -> |
| 1007 | + [Fd | open_missing_generation_files(FilePath, Rest, MaxGen, Gen + 1)]. |
| 1008 | + |
985 | 1009 | maybe_open_generation_files(FilePath, Generations, Options) -> |
986 | 1010 | case lists:member(compacting, Options) of |
987 | 1011 | true -> []; |
|
0 commit comments