1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
# name: test/sql/storage/checkpoint_abort.test_slow
# description: Test correct behavior if we unexpectedly abort during a checkpoint
# group: [storage]
load __TEST_DIR__/checkpoint_abort.db
statement ok
CREATE TABLE integers AS SELECT * FROM range(100000) tbl(i);
statement ok
CHECKPOINT;
statement ok
PRAGMA disable_checkpoint_on_shutdown;
statement ok
PRAGMA wal_autocheckpoint='1TB';
statement ok
PRAGMA debug_checkpoint_abort='before_header'
query III
SELECT MIN(i), MAX(i), COUNT(*) FROM integers
----
0 99999 100000
statement ok
INSERT INTO integers SELECT * FROM range(100000, 200000) tbl(i);
query III
SELECT MIN(i), MAX(i), COUNT(*) FROM integers
----
0 199999 200000
statement ok
UPDATE integers SET i=i+1;
query III
SELECT MIN(i), MAX(i), COUNT(*) FROM integers
----
1 200000 200000
statement error
CHECKPOINT;
----
restart
# verify that the change was correctly loaded from disk
query III
SELECT MIN(i), MAX(i), COUNT(*) FROM integers
----
1 200000 200000
# now verify that empty blocks left by a checkpoint aborts are re-used
# so that checkpoint aborts don't permanently leave holes in the file
loop i 0 10
statement ok
PRAGMA disable_checkpoint_on_shutdown;
statement ok
PRAGMA wal_autocheckpoint='1TB';
statement ok
PRAGMA debug_checkpoint_abort='before_header'
statement ok
UPDATE integers SET i=i;
statement error
CHECKPOINT;
----
restart
# verify that the change was correctly loaded from disk
query III
SELECT MIN(i), MAX(i), COUNT(*) FROM integers
----
1 200000 200000
query I nosort expected_blocks
select total_blocks from pragma_database_size();
endloop
|