|
90 | 90 |
|
91 | 91 | change_attribute/1, |
92 | 92 |
|
93 | | - otp_6278/1, otp_10131/1, otp_16768/1, otp_16809/1]). |
| 93 | + otp_6278/1, otp_10131/1, otp_16768/1, otp_16809/1, |
| 94 | + |
| 95 | + decrease_size_twice/1]). |
94 | 96 |
|
95 | 97 | -export([head_fun/1, hf/0, lserv/1, |
96 | 98 | measure/0, init_m/1, xx/0]). |
@@ -167,7 +169,7 @@ groups() -> |
167 | 169 | {change_size, [], |
168 | 170 | [change_size_before, change_size_during, |
169 | 171 | change_size_after, default_size, change_size2, |
170 | | - change_size_truncate]}]. |
| 172 | + change_size_truncate, decrease_size_twice]}]. |
171 | 173 |
|
172 | 174 | init_per_suite(Config) -> |
173 | 175 | Config. |
@@ -4409,6 +4411,73 @@ otp_16809(Conf) when is_list(Conf) -> |
4409 | 4411 | HeadFunc2 = info(Log, head, undef), |
4410 | 4412 | ok = disk_log:close(Log). |
4411 | 4413 |
|
| 4414 | +decrease_size_twice(Conf) when is_list(Conf) -> |
| 4415 | + Dir = ?privdir(Conf), |
| 4416 | + Log = decrease_size_twice, |
| 4417 | + File = filename:join(Dir, lists:concat([Log, ".LOG"])), |
| 4418 | + |
| 4419 | + Data_1 = [1, 2, 3], |
| 4420 | + Data_2 = [4, 5, 6], |
| 4421 | + Data_3 = [7, 8, 9], |
| 4422 | + Data_2_3 = Data_2 ++ Data_3, |
| 4423 | + Data = Data_1 ++ Data_2_3, |
| 4424 | + |
| 4425 | + {ok, Log} = disk_log:open([{size, {50, 3}}, {name, Log}, {type, wrap}, |
| 4426 | + {file, File}, {notify, true}]), |
| 4427 | + |
| 4428 | + ok = disk_log:log_terms(Log, Data), |
| 4429 | + |
| 4430 | + %% Changing size to the same size should make no changes |
| 4431 | + ok = disk_log:change_size(Log, {50, 3}), |
| 4432 | + Data = get_all_terms(Log), |
| 4433 | + |
| 4434 | + %% Changing size to smaller and then again to the same smaller size, |
| 4435 | + %% should leave OldMaxF as it was before |
| 4436 | + ok = disk_log:change_size(Log, {50, 2}), |
| 4437 | + ok = disk_log:change_size(Log, {50, 2}), |
| 4438 | + Data = get_all_terms(Log), |
| 4439 | + |
| 4440 | + %% After writing data with new (smaller) log size, some terms should be truncated |
| 4441 | + ok = disk_log:log_terms(Log, Data), |
| 4442 | + Data_2_3 = get_all_terms(Log), |
| 4443 | + |
| 4444 | + %% Changing size to bigger should remove OldMaxF |
| 4445 | + ok = disk_log:change_size(Log, {50, 3}), |
| 4446 | + ok = disk_log:log_terms(Log, Data), |
| 4447 | + Data = get_all_terms(Log), |
| 4448 | + |
| 4449 | + %% Changing size to smaller, and then to even smaller should keep bigger OldMaxF |
| 4450 | + ok = disk_log:change_size(Log, {50, 2}), |
| 4451 | + ok = disk_log:change_size(Log, {50, 1}), |
| 4452 | + Data = get_all_terms(Log), |
| 4453 | + |
| 4454 | + %% After writing data with new (even smaller) log size, some terms should be truncated |
| 4455 | + ok = disk_log:log_terms(Log, Data), |
| 4456 | + Data_3 = get_all_terms(Log), |
| 4457 | + |
| 4458 | + %% Changing size to bigger should remove OldMaxF |
| 4459 | + ok = disk_log:change_size(Log, {50, 3}), |
| 4460 | + ok = disk_log:log_terms(Log, Data), |
| 4461 | + Data = get_all_terms(Log), |
| 4462 | + |
| 4463 | + %% Changing size to smaller, writing some data (but less than required to cause logs to wrap), |
| 4464 | + %% and then to even smaller should keep bigger OldMaxF |
| 4465 | + ok = disk_log:log_terms(Log, lists:seq(1, 7)), |
| 4466 | + ok = disk_log:change_size(Log, {50, 2}), |
| 4467 | + ok = disk_log:log_terms(Log, [8, 9]), |
| 4468 | + ok = disk_log:change_size(Log, {50, 1}), |
| 4469 | + Data = get_all_terms(Log), |
| 4470 | + |
| 4471 | + %% Changing size to bigger and than to bigger again, should allow to read all data |
| 4472 | + ok = disk_log:change_size(Log, {50, 2}), |
| 4473 | + Data = get_all_terms(Log), |
| 4474 | + ok = disk_log:change_size(Log, {50, 3}), |
| 4475 | + Data = get_all_terms(Log), |
| 4476 | + |
| 4477 | + ok = disk_log:close(Log), |
| 4478 | + |
| 4479 | + del(File, 3). |
| 4480 | + |
4412 | 4481 | mark(FileName, What) -> |
4413 | 4482 | {ok,Fd} = file:open(FileName, [raw, binary, read, write]), |
4414 | 4483 | {ok,_} = file:position(Fd, 4), |
|
0 commit comments