1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-08 14:02:16 +03:00

Add a new test script to exercise the deadlock avoidance code in the

btree mutex logic. (CVS 5412)

FossilOrigin-Name: 7d5e1c4375599a913d23e5954fa63c10ac9d7688
This commit is contained in:
drh
2008-07-14 19:39:16 +00:00
parent 584ff18996
commit 65cef1affc
5 changed files with 251 additions and 14 deletions

View File

@@ -1,5 +1,5 @@
C Fix\sa\stypo\sin\sthe\sdocumentation.\s\sTicket\s#3219.\s(CVS\s5411) C Add\sa\snew\stest\sscript\sto\sexercise\sthe\sdeadlock\savoidance\scode\sin\sthe\nbtree\smutex\slogic.\s(CVS\s5412)
D 2008-07-14T18:38:17 D 2008-07-14T19:39:17
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in a03f7cb4f7ad50bc53a788c6c544430e81f95de4 F Makefile.in a03f7cb4f7ad50bc53a788c6c544430e81f95de4
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -95,7 +95,7 @@ F src/analyze.c 9ee63497ee720728abe630d169ab91323ac7519c
F src/attach.c b18ba42c77f7d3941f5d23d2ca20fa1d841a4e91 F src/attach.c b18ba42c77f7d3941f5d23d2ca20fa1d841a4e91
F src/auth.c c8b2ab5c8bad4bd90ed7c294694f48269162c627 F src/auth.c c8b2ab5c8bad4bd90ed7c294694f48269162c627
F src/bitvec.c 95c86bd18d8fedf0533f5af196192546e10a7e7d F src/bitvec.c 95c86bd18d8fedf0533f5af196192546e10a7e7d
F src/btmutex.c 483ced3c52205b04b97df69161fadbf87f4f1ea2 F src/btmutex.c 709cad2cdca0afd013f0f612363810e53f59ec53
F src/btree.c cda41ffc78e53cd29e53eab47d174d3e6afd680d F src/btree.c cda41ffc78e53cd29e53eab47d174d3e6afd680d
F src/btree.h 03256ed7ee42b5ecacbe887070b0f8249e7d069d F src/btree.h 03256ed7ee42b5ecacbe887070b0f8249e7d069d
F src/btreeInt.h a6a5ffab12fa2c15392b85242cd5568371949046 F src/btreeInt.h a6a5ffab12fa2c15392b85242cd5568371949046
@@ -430,7 +430,7 @@ F test/pager2.test c025f91b75fe65e85febda64d9416428b8a5cab5
F test/pager3.test 2323bf27fd5bd887b580247e5bce500ceee994b4 F test/pager3.test 2323bf27fd5bd887b580247e5bce500ceee994b4
F test/pageropt.test 6df72c441db0a037b7ec6990d16311c24fbea77b F test/pageropt.test 6df72c441db0a037b7ec6990d16311c24fbea77b
F test/pagesize.test e0a8b3fe80f8b8e808d94a00734c7a18c76c407e F test/pagesize.test e0a8b3fe80f8b8e808d94a00734c7a18c76c407e
F test/permutations.test bf962d39b77fd87555455d16bb1208d32a732c6d F test/permutations.test ed3b4721caf1d538778f9f155fd8133216e48212
F test/pragma.test 2c675ed9a288094ed62bf55b35fbc749e25670fb F test/pragma.test 2c675ed9a288094ed62bf55b35fbc749e25670fb
F test/pragma2.test 5364893491b9231dd170e3459bfc2e2342658b47 F test/pragma2.test 5364893491b9231dd170e3459bfc2e2342658b47
F test/printf.test 262a5acd3158f788e9bdf7f18d718f3af32ff6ef F test/printf.test 262a5acd3158f788e9bdf7f18d718f3af32ff6ef
@@ -461,6 +461,7 @@ F test/server1.test f5b790d4c0498179151ca8a7715a65a7802c859c
F test/shared.test b9f3bbd3ba727c5f1f8c815b7d0199262aacf214 F test/shared.test b9f3bbd3ba727c5f1f8c815b7d0199262aacf214
F test/shared2.test 0ee9de8964d70e451936a48c41cb161d9134ccf4 F test/shared2.test 0ee9de8964d70e451936a48c41cb161d9134ccf4
F test/shared3.test 987316be601e2349e6a340a6d5f8ed981e507931 F test/shared3.test 987316be601e2349e6a340a6d5f8ed981e507931
F test/shared4.test ea035211a4444205537c542d9a24015aea9f0c8d
F test/shared_err.test 776ab7196ecda8b07a075e115b0725806991e151 F test/shared_err.test 776ab7196ecda8b07a075e115b0725806991e151
F test/shortread1.test bb591ef20f0fd9ed26d0d12e80eee6d7ac8897a3 F test/shortread1.test bb591ef20f0fd9ed26d0d12e80eee6d7ac8897a3
F test/sidedelete.test 736ac1da08b3b1aa62df97fef2fcdb1b660111b9 F test/sidedelete.test 736ac1da08b3b1aa62df97fef2fcdb1b660111b9
@@ -605,7 +606,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1 F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
P c060a9a6beca455bdceee9ce6ca71a7262f98a5f P 3dc72a46171020c62e6028d113b0e0f5ab05d159
R f1cf792514fd75a27596e2a43ce502f1 R 6d734a63548e6f48975b58c9676b7c06
U drh U drh
Z c55669db705c2547daf67dc6154f8afd Z 77913ffe58a126c4bbfbbf4bc5ff271d

View File

@@ -1 +1 @@
3dc72a46171020c62e6028d113b0e0f5ab05d159 7d5e1c4375599a913d23e5954fa63c10ac9d7688

View File

@@ -10,7 +10,7 @@
** **
************************************************************************* *************************************************************************
** **
** $Id: btmutex.c,v 1.9 2008/01/23 12:52:41 drh Exp $ ** $Id: btmutex.c,v 1.10 2008/07/14 19:39:17 drh Exp $
** **
** This file contains code used to implement mutexes on Btree objects. ** This file contains code used to implement mutexes on Btree objects.
** This code really belongs in btree.c. But btree.c is getting too ** This code really belongs in btree.c. But btree.c is getting too
@@ -226,11 +226,11 @@ int sqlite3BtreeHoldsAllMutexes(sqlite3 *db){
#endif /* NDEBUG */ #endif /* NDEBUG */
/* /*
** Potentially dd a new Btree pointer to a BtreeMutexArray. ** Add a new Btree pointer to a BtreeMutexArray.
** Really only add the Btree if it can possibly be shared with ** if the pointer can possibly be shared with
** another database connection. ** another database connection.
** **
** The Btrees are kept in sorted order by pBtree->pBt. That ** The pointers are kept in sorted order by pBtree->pBt. That
** way when we go to enter all the mutexes, we can enter them ** way when we go to enter all the mutexes, we can enter them
** in order without every having to backup and retry and without ** in order without every having to backup and retry and without
** worrying about deadlock. ** worrying about deadlock.

View File

@@ -9,7 +9,7 @@
# #
#*********************************************************************** #***********************************************************************
# #
# $Id: permutations.test,v 1.11 2008/07/10 18:13:43 drh Exp $ # $Id: permutations.test,v 1.12 2008/07/14 19:39:17 drh Exp $
set testdir [file dirname $argv0] set testdir [file dirname $argv0]
source $testdir/tester.tcl source $testdir/tester.tcl
@@ -119,7 +119,6 @@ proc run_tests {name args} {
} }
if {$::testmode ne "" && [lsearch $::testmode $name]<0} return if {$::testmode ne "" && [lsearch $::testmode $name]<0} return
uplevel $options(-initialize) uplevel $options(-initialize)
set ::permutations_presql $options(-presql) set ::permutations_presql $options(-presql)

237
test/shared4.test Normal file
View File

@@ -0,0 +1,237 @@
# 2008 July 14
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#***********************************************************************
#
# Test the btree mutex protocol for shared cache mode.
#
# $Id: shared4.test,v 1.1 2008/07/14 19:39:17 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
db close
puts hello
# This script is only valid if we are running shared-cache mode in a
# threadsafe-capable database engine.
#
ifcapable !shared_cache {
finish_test
return
}
set ::enable_shared_cache [sqlite3_enable_shared_cache 1]
# Prepare multiple databases in shared cache mode.
#
do_test shared4-1.1 {
file delete -force test1.db test1.db-journal
file delete -force test2.db test2.db-journal
file delete -force test3.db test3.db-journal
file delete -force test4.db test4.db-journal
sqlite3 db1 test1.db
sqlite3 db2 test2.db
sqlite3 db3 test3.db
sqlite3 db4 test4.db
db1 eval {
CREATE TABLE t1(a);
INSERT INTO t1 VALUES(111);
}
db2 eval {
CREATE TABLE t2(b);
INSERT INTO t2 VALUES(222);
}
db3 eval {
CREATE TABLE t3(c);
INSERT INTO t3 VALUES(333);
}
db4 eval {
CREATE TABLE t4(d);
INSERT INTO t4 VALUES(444);
}
db1 eval {
ATTACH DATABASE 'test2.db' AS two;
ATTACH DATABASE 'test3.db' AS three;
ATTACH DATABASE 'test4.db' AS four;
}
db2 eval {
ATTACH DATABASE 'test4.db' AS four;
ATTACH DATABASE 'test3.db' AS three;
ATTACH DATABASE 'test1.db' AS one;
}
db3 eval {
ATTACH DATABASE 'test1.db' AS one;
ATTACH DATABASE 'test2.db' AS two;
ATTACH DATABASE 'test4.db' AS four;
}
db4 eval {
ATTACH DATABASE 'test3.db' AS three;
ATTACH DATABASE 'test2.db' AS two;
ATTACH DATABASE 'test1.db' AS one;
}
db1 eval {
SELECT a FROM t1 UNION ALL
SELECT b FROM t2 UNION ALL
SELECT c FROM t3 UNION ALL
SELECT d FROM t4;
}
} {111 222 333 444}
do_test shared4-1.2 {
db2 eval {
SELECT a FROM t1 UNION ALL
SELECT b FROM t2 UNION ALL
SELECT d FROM t4 UNION ALL
SELECT c FROM t3;
}
} {111 222 444 333}
do_test shared4-1.3 {
db3 eval {
SELECT a FROM t1 UNION ALL
SELECT c FROM t3 UNION ALL
SELECT b FROM t2 UNION ALL
SELECT d FROM t4;
}
} {111 333 222 444}
do_test shared4-1.4 {
db4 eval {
SELECT a FROM t1 UNION ALL
SELECT c FROM t3 UNION ALL
SELECT d FROM t4 UNION ALL
SELECT b FROM t2;
}
} {111 333 444 222}
do_test shared4-1.5 {
db3 eval {
SELECT a FROM t1 UNION ALL
SELECT d FROM t4 UNION ALL
SELECT b FROM t2 UNION ALL
SELECT c FROM t3;
}
} {111 444 222 333}
do_test shared4-1.6 {
db4 eval {
SELECT a FROM t1 UNION ALL
SELECT d FROM t4 UNION ALL
SELECT c FROM t3 UNION ALL
SELECT b FROM t2;
}
} {111 444 333 222}
do_test shared4-1.7 {
db1 eval {
SELECT b FROM t2 UNION ALL
SELECT a FROM t1 UNION ALL
SELECT c FROM t3 UNION ALL
SELECT d FROM t4;
}
} {222 111 333 444}
do_test shared4-1.8 {
db2 eval {
SELECT b FROM t2 UNION ALL
SELECT a FROM t1 UNION ALL
SELECT d FROM t4 UNION ALL
SELECT c FROM t3;
}
} {222 111 444 333}
do_test shared4-1.9 {
db3 eval {
SELECT b FROM t2 UNION ALL
SELECT c FROM t3 UNION ALL
SELECT a FROM t1 UNION ALL
SELECT d FROM t4;
}
} {222 333 111 444}
do_test shared4-1.10 {
db4 eval {
SELECT b FROM t2 UNION ALL
SELECT c FROM t3 UNION ALL
SELECT d FROM t4 UNION ALL
SELECT a FROM t1;
}
} {222 333 444 111}
do_test shared4-1.11 {
db1 eval {
SELECT c FROM t3 UNION ALL
SELECT a FROM t1 UNION ALL
SELECT b FROM t2 UNION ALL
SELECT d FROM t4;
}
} {333 111 222 444}
do_test shared4-1.12 {
db2 eval {
SELECT c FROM t3 UNION ALL
SELECT a FROM t1 UNION ALL
SELECT d FROM t4 UNION ALL
SELECT b FROM t2;
}
} {333 111 444 222}
do_test shared4-2.1 {
db1 eval {
UPDATE t1 SET a=a+1000;
UPDATE t2 SET b=b+2000;
UPDATE t3 SET c=c+3000;
UPDATE t4 SET d=d+4000;
}
db2 eval {
UPDATE t1 SET a=a+10000;
UPDATE t2 SET b=b+20000;
UPDATE t3 SET c=c+30000;
UPDATE t4 SET d=d+40000;
}
db3 eval {
UPDATE t1 SET a=a+100000;
UPDATE t2 SET b=b+200000;
UPDATE t3 SET c=c+300000;
UPDATE t4 SET d=d+400000;
}
db4 eval {
UPDATE t1 SET a=a+1000000;
UPDATE t2 SET b=b+2000000;
UPDATE t3 SET c=c+3000000;
UPDATE t4 SET d=d+4000000;
}
db1 eval {
SELECT a FROM t1 UNION ALL
SELECT b FROM t2 UNION ALL
SELECT c FROM t3 UNION ALL
SELECT d FROM t4;
}
} {1111111 2222222 3333333 4444444}
do_test shared4-2.2 {
db2 eval {
SELECT a FROM t1 UNION ALL
SELECT b FROM t2 UNION ALL
SELECT d FROM t4 UNION ALL
SELECT c FROM t3;
}
} {1111111 2222222 4444444 3333333}
do_test shared4-2.3 {
db3 eval {
SELECT a FROM t1 UNION ALL
SELECT c FROM t3 UNION ALL
SELECT b FROM t2 UNION ALL
SELECT d FROM t4;
}
} {1111111 3333333 2222222 4444444}
do_test shared4-2.4 {
db4 eval {
SELECT a FROM t1 UNION ALL
SELECT c FROM t3 UNION ALL
SELECT d FROM t4 UNION ALL
SELECT b FROM t2;
}
} {1111111 3333333 4444444 2222222}
db1 close
db2 close
db3 close
db4 close
sqlite3_enable_shared_cache $::enable_shared_cache
finish_test