mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Test another IO error case in wal.c.
FossilOrigin-Name: 8b3b5ab8fa61ca4ef22c98abaab397707ee74ea3
This commit is contained in:
16
manifest
16
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Fix\sa\sproblem\swith\scheckpointing\slarge\slog\sfiles\screated\sby\san\sexternal\sprocess.
|
C Test\sanother\sIO\serror\scase\sin\swal.c.
|
||||||
D 2010-05-07T06:59:09
|
D 2010-05-07T09:43:50
|
||||||
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
|
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
|
||||||
F Makefile.in a5cad1f8f3e021356bfcc6c77dc16f6f1952bbc3
|
F Makefile.in a5cad1f8f3e021356bfcc6c77dc16f6f1952bbc3
|
||||||
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
||||||
@@ -207,7 +207,7 @@ F src/test_schema.c 8c06ef9ddb240c7a0fcd31bc221a6a2aade58bf0
|
|||||||
F src/test_server.c bbba05c144b5fc4b52ff650a4328027b3fa5fcc6
|
F src/test_server.c bbba05c144b5fc4b52ff650a4328027b3fa5fcc6
|
||||||
F src/test_tclvar.c f4dc67d5f780707210d6bb0eb6016a431c04c7fa
|
F src/test_tclvar.c f4dc67d5f780707210d6bb0eb6016a431c04c7fa
|
||||||
F src/test_thread.c aa9919c885a1fe53eafc73492f0898ee6c0a0726
|
F src/test_thread.c aa9919c885a1fe53eafc73492f0898ee6c0a0726
|
||||||
F src/test_vfs.c 72b8ad1a6bc6c27d9e5b4362d6320d3834c87db6
|
F src/test_vfs.c c1e13b5f787042130878996f31827ffb5d4d8efc
|
||||||
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
|
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
|
||||||
F src/tokenize.c 25ceb0f0a746ea1d0f9553787f3f0a56853cfaeb
|
F src/tokenize.c 25ceb0f0a746ea1d0f9553787f3f0a56853cfaeb
|
||||||
F src/trigger.c 8927588cb9e6d47f933b53bfe74200fbb504100d
|
F src/trigger.c 8927588cb9e6d47f933b53bfe74200fbb504100d
|
||||||
@@ -224,7 +224,7 @@ F src/vdbeblob.c 5327132a42a91e8b7acfb60b9d2c3b1c5c863e0e
|
|||||||
F src/vdbemem.c 2a82f455f6ca6f78b59fb312f96054c04ae0ead1
|
F src/vdbemem.c 2a82f455f6ca6f78b59fb312f96054c04ae0ead1
|
||||||
F src/vdbetrace.c 864cef96919323482ebd9986f2132435115e9cc2
|
F src/vdbetrace.c 864cef96919323482ebd9986f2132435115e9cc2
|
||||||
F src/vtab.c a0f8a40274e4261696ef57aa806de2776ab72cda
|
F src/vtab.c a0f8a40274e4261696ef57aa806de2776ab72cda
|
||||||
F src/wal.c 5321afde90f0819655040d1ca477f3fec9ebefbe
|
F src/wal.c 53b7461586bd883313e8bed46830557c720899c8
|
||||||
F src/wal.h b4c42014b5fa3b4e6244ac8c65de7ff67adeb27c
|
F src/wal.h b4c42014b5fa3b4e6244ac8c65de7ff67adeb27c
|
||||||
F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f
|
F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f
|
||||||
F src/where.c 75fee9e255b62f773fcadd1d1f25b6f63ac7a356
|
F src/where.c 75fee9e255b62f773fcadd1d1f25b6f63ac7a356
|
||||||
@@ -765,7 +765,7 @@ F test/wal.test 45fd4e9e8f871f38c801fecbf341528710edbfe1
|
|||||||
F test/wal2.test 0f53c711d6530d3c7aba46752aef9fd44b708c6c
|
F test/wal2.test 0f53c711d6530d3c7aba46752aef9fd44b708c6c
|
||||||
F test/walbak.test a0e45187c7d8928df035dfea29b99b016b21ca3c
|
F test/walbak.test a0e45187c7d8928df035dfea29b99b016b21ca3c
|
||||||
F test/walcrash.test f6d5fb2bb108876f04848720a488065d9deef69f
|
F test/walcrash.test f6d5fb2bb108876f04848720a488065d9deef69f
|
||||||
F test/walfault.test ae37204f4375e0e5eba75094d0d0db7148de70a8
|
F test/walfault.test bff34172bc224360d9c0d6c7b94454817c8def9d
|
||||||
F test/walhook.test a1c375ae791d5d7d511c166159729230791c574d
|
F test/walhook.test a1c375ae791d5d7d511c166159729230791c574d
|
||||||
F test/walmode.test bac6f06544a8554588a1543def996bbe2fc41792
|
F test/walmode.test bac6f06544a8554588a1543def996bbe2fc41792
|
||||||
F test/walslow.test d21625e2e99e11c032ce949e8a94661576548933
|
F test/walslow.test d21625e2e99e11c032ce949e8a94661576548933
|
||||||
@@ -813,7 +813,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
|||||||
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
||||||
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
||||||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||||
P 061a282cc0bf76541ab1f99b351a49d489ff93ec
|
P 8f94bde568be52ecc5a976b7a09776ea7b4bb511
|
||||||
R 3e2d9c06dafc1b5b325ac114ce5c4263
|
R 33b989a7a16e1f991ebc72039614fbc6
|
||||||
U dan
|
U dan
|
||||||
Z a88a95664c9a9b9b2d9abf67515be3e6
|
Z e205369239a9a134e8a3ad914124f7a7
|
||||||
|
@@ -1 +1 @@
|
|||||||
8f94bde568be52ecc5a976b7a09776ea7b4bb511
|
8b3b5ab8fa61ca4ef22c98abaab397707ee74ea3
|
@@ -490,12 +490,12 @@ static int tvfsShmGet(
|
|||||||
Testvfs *p = (Testvfs *)(pVfs->pAppData);
|
Testvfs *p = (Testvfs *)(pVfs->pAppData);
|
||||||
TestvfsShm *pShm = (TestvfsShm *)pShmHandle;
|
TestvfsShm *pShm = (TestvfsShm *)pShmHandle;
|
||||||
|
|
||||||
tvfsGrowBuffer(pShm, reqMapSize, pMapSize);
|
|
||||||
tvfsExecTcl(p, "xShmGet",
|
tvfsExecTcl(p, "xShmGet",
|
||||||
Tcl_NewStringObj(pShm->pBuffer->zFile, -1), pShm->id, 0
|
Tcl_NewStringObj(pShm->pBuffer->zFile, -1), pShm->id, 0
|
||||||
);
|
);
|
||||||
tvfsResultCode(p, &rc);
|
tvfsResultCode(p, &rc);
|
||||||
if( rc==SQLITE_OK ){
|
if( rc==SQLITE_OK ){
|
||||||
|
tvfsGrowBuffer(pShm, reqMapSize, pMapSize);
|
||||||
*pp = pShm->pBuffer->a;
|
*pp = pShm->pBuffer->a;
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
|
@@ -411,7 +411,9 @@ static int walIndexMap(Wal *pWal, int reqSize){
|
|||||||
assert( pWal->szWIndex==0 );
|
assert( pWal->szWIndex==0 );
|
||||||
pWal->pWiData = &pWal->iCallback;
|
pWal->pWiData = &pWal->iCallback;
|
||||||
}
|
}
|
||||||
assert( rc==SQLITE_OK || pWal->pWiData==0 );
|
if( rc!=SQLITE_OK ){
|
||||||
|
walIndexUnmap(pWal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@@ -1129,7 +1131,7 @@ int sqlite3WalWriteLock(Wal *pWal, int op){
|
|||||||
walSetLock(pWal, SQLITE_SHM_READ);
|
walSetLock(pWal, SQLITE_SHM_READ);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else if( pWal->lockState==SQLITE_SHM_WRITE ){
|
}else if( ALWAYS( pWal->lockState==SQLITE_SHM_WRITE ) ){
|
||||||
rc = walSetLock(pWal, SQLITE_SHM_READ);
|
rc = walSetLock(pWal, SQLITE_SHM_READ);
|
||||||
}
|
}
|
||||||
return rc;
|
return rc;
|
||||||
|
@@ -250,5 +250,81 @@ do_shmfault_test walfault-shm-5 -coverageonly 1 -sqlprep {
|
|||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
# When a database is checkpointed, SQLite does the following:
|
||||||
|
#
|
||||||
|
# 1. xShmLock(CHECKPOINT) to lock the WAL.
|
||||||
|
# 2. xShmGet(-1) to get a mapping to read the wal-index header.
|
||||||
|
# 3. If the mapping obtained in (2) is not large enough to cover the
|
||||||
|
# entire wal-index, call xShmGet(nReq) to get a larger mapping.
|
||||||
|
# 4. Do the checkpoint.
|
||||||
|
# 5. Release the lock and mapping.
|
||||||
|
#
|
||||||
|
# This test case tests the outcome of an IO error in step 2.
|
||||||
|
#
|
||||||
|
proc shmfault_vfs_cb_6 {method args} {
|
||||||
|
switch -- $::shm_state {
|
||||||
|
0 { return SQLITE_OK }
|
||||||
|
1 {
|
||||||
|
if {$method == "xShmGet"} {
|
||||||
|
set ::wal_index [tvfs shm [lindex $args 0]]
|
||||||
|
tvfs shm [lindex $args 0] [string range $::wal_index 0 65535]
|
||||||
|
set ::shm_state 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
2 {
|
||||||
|
if {$method == "xShmGet"} {
|
||||||
|
tvfs shm [lindex $args 0] $::wal_index
|
||||||
|
return SQLITE_IOERR
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return SQLITE_OK
|
||||||
|
}
|
||||||
|
do_test walfault-shm-6.1 {
|
||||||
|
set ::shm_state 0
|
||||||
|
testvfs tvfs shmfault_vfs_cb_6
|
||||||
|
|
||||||
|
sqlite3 db test.db -vfs tvfs
|
||||||
|
sqlite3 db2 test.db -vfs tvfs
|
||||||
|
|
||||||
|
execsql {
|
||||||
|
PRAGMA journal_mode = WAL;
|
||||||
|
PRAGMA wal_autocheckpoint = 0;
|
||||||
|
CREATE TABLE t1(x);
|
||||||
|
INSERT INTO t1 VALUES(randomblob(900));
|
||||||
|
}
|
||||||
|
} {wal 0}
|
||||||
|
do_test walfault-shm-6.2 {
|
||||||
|
execsql {
|
||||||
|
PRAGMA wal_autocheckpoint = 0;
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t1 SELECT randomblob(900) FROM t1; /* 2 */
|
||||||
|
INSERT INTO t1 SELECT randomblob(900) FROM t1; /* 4 */
|
||||||
|
INSERT INTO t1 SELECT randomblob(900) FROM t1; /* 8 */
|
||||||
|
INSERT INTO t1 SELECT randomblob(900) FROM t1; /* 16 */
|
||||||
|
INSERT INTO t1 SELECT randomblob(900) FROM t1; /* 32 */
|
||||||
|
INSERT INTO t1 SELECT randomblob(900) FROM t1; /* 64 */
|
||||||
|
INSERT INTO t1 SELECT randomblob(900) FROM t1; /* 128 */
|
||||||
|
INSERT INTO t1 SELECT randomblob(900) FROM t1; /* 256 */
|
||||||
|
INSERT INTO t1 SELECT randomblob(900) FROM t1; /* 512 */
|
||||||
|
INSERT INTO t1 SELECT randomblob(900) FROM t1; /* 1024 */
|
||||||
|
INSERT INTO t1 SELECT randomblob(900) FROM t1; /* 2048 */
|
||||||
|
INSERT INTO t1 SELECT randomblob(900) FROM t1; /* 4096 */
|
||||||
|
INSERT INTO t1 SELECT randomblob(900) FROM t1; /* 8192 */
|
||||||
|
INSERT INTO t1 SELECT randomblob(900) FROM t1; /* 16384 */
|
||||||
|
COMMIT;
|
||||||
|
} db2
|
||||||
|
} {0}
|
||||||
|
do_test walfault-shm-6.3 {
|
||||||
|
set ::shm_state 1
|
||||||
|
catchsql { PRAGMA wal_checkpoint } db2
|
||||||
|
} {1 {disk I/O error}}
|
||||||
|
set ::shm_state 0
|
||||||
|
db close
|
||||||
|
db2 close
|
||||||
|
tvfs delete
|
||||||
|
unset -nocomplain ::wal_index ::shm_state
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user