]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Enhance mptester so that it takes great care to delete its test database
authordrh <drh@noemail.net>
Fri, 12 Feb 2016 17:27:32 +0000 (17:27 +0000)
committerdrh <drh@noemail.net>
Fri, 12 Feb 2016 17:27:32 +0000 (17:27 +0000)
prior to start-up, including checking the return code from unlink() and
retrying after a delay if unlink() fails.  Hopefully this will clear
intermittant startup problems on Windows.

FossilOrigin-Name: 6ea84ec1e02f0a48953bc758027ab7148529c36e

main.mk
manifest
manifest.uuid
mptest/mptest.c

diff --git a/main.mk b/main.mk
index 509f4c8273f9aac25feba23e83e1c4c4fbd17972..e9920180d97edea606e6fdc2364606322b12a151 100644 (file)
--- a/main.mk
+++ b/main.mk
@@ -500,10 +500,9 @@ mptester$(EXE):    sqlite3.c $(TOP)/mptest/mptest.c
        $(TCCX) -o $@ -I. $(TOP)/mptest/mptest.c sqlite3.c \
                $(TLIBS) $(THREADLIB)
 
-MPTEST1=./mptester$(EXE) mptest.db $(TOP)/mptest/crash01.test --repeat 20
-MPTEST2=./mptester$(EXE) mptest.db $(TOP)/mptest/multiwrite01.test --repeat 20
+MPTEST1=./mptester$(EXE) mptest1.db $(TOP)/mptest/crash01.test --repeat 20
+MPTEST2=./mptester$(EXE) mptest2.db $(TOP)/mptest/multiwrite01.test --repeat 20
 mptest:        mptester$(EXE)
-       rm -f mptest.db
        $(MPTEST1) --journalmode DELETE
        $(MPTEST2) --journalmode WAL
        $(MPTEST1) --journalmode WAL
index 70492224b1837efe2d373253c1026a756693e239..d9310dec288006c28b1812a99771dd64d0aece9b 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Naming\supdates\sfor\sUniversal\sWindows\sPlatform.
-D 2016-02-12T05:19:29.324
+C Enhance\smptester\sso\sthat\sit\stakes\sgreat\scare\sto\sdelete\sits\stest\sdatabase\nprior\sto\sstart-up,\sincluding\schecking\sthe\sreturn\scode\sfrom\sunlink()\sand\nretrying\safter\sa\sdelay\sif\sunlink()\sfails.\s\sHopefully\sthis\swill\sclear\s\nintermittant\sstartup\sproblems\son\sWindows.
+D 2016-02-12T17:27:32.074
 F Makefile.in 4e90dc1521879022aa9479268a4cd141d1771142
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 30f075dc4f27a07abb76088946b2944178d85347
@@ -272,13 +272,13 @@ F ext/userauth/userauth.c 5fa3bdb492f481bbc1709fc83c91ebd13460c69e
 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
 F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
 F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
-F main.mk aecd0ce0646db48754e2a14523f759593f8ed072
+F main.mk 791597b87204f6bd56cdf7b2ab2feeecd608c60d
 F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83
 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421
 F mptest/crash02.subtest f4ef05adcd15d60e5d2bd654204f2c008b519df8
-F mptest/mptest.c 0d3f2eb8e373cb692ab362a6dddedd53e0978502
+F mptest/mptest.c aa41ace6dbc5050d76b02548d3521e6bbccae4f0
 F mptest/multiwrite01.test dab5c5f8f9534971efce679152c5146da265222d
 F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca
 F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
@@ -1427,7 +1427,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh ef6ebc6fd8d2dc35db3b622015c16a023d4fef4f
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P b5d771991686bf86a679b7dff9f16301a5029c8b
-R c5c7b0be1a525c29164d455010760517
-U mistachkin
-Z 6d4d0f2a2e82ddbc9f26fd9ded605bf1
+P 717c1fc41a2246e27b324a4071073c286bac4efc
+R fe68ada3af9b678ecc7b1b483d0cc9f6
+U drh
+Z 04c3f99151f7ad228f455f6f996d4b70
index d3f9c73b4b795672e8b291fa2ed0a75e9ea8e1b2..9dddc65265c2717daf0bbef1b87b3107ea68c640 100644 (file)
@@ -1 +1 @@
-717c1fc41a2246e27b324a4071073c286bac4efc
\ No newline at end of file
+6ea84ec1e02f0a48953bc758027ab7148529c36e
\ No newline at end of file
index b29ebdc9e110fff92ca6bd4e3cea590318934977..5022b009e6bf7772a1d6eba7189f2fde67e988e3 100644 (file)
@@ -41,6 +41,7 @@
 #else
 # include <unistd.h>
 #endif
+#include <errno.h>
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
@@ -1244,6 +1245,19 @@ static void usage(const char *argv0){
     if( isDirSep(argv0[i]) ) zTail = argv0+i+1;
   }
   fprintf(stderr,"Usage: %s DATABASE ?OPTIONS? ?SCRIPT?\n", zTail);
+  fprintf(stderr,
+    "Options:\n"
+    "   --errlog FILENAME           Write errors to FILENAME\n"
+    "   --journalmode MODE          Use MODE as the journal_mode\n"
+    "   --log FILENAME              Log messages to FILENAME\n"
+    "   --quiet                     Suppress unnecessary output\n"
+    "   --vfs NAME                  Use NAME as the VFS\n"
+    "   --repeat N                  Repeat the test N times\n"
+    "   --sqltrace                  Enable SQL tracing\n"
+    "   --sync                      Enable synchronous disk writes\n"
+    "   --timeout MILLISEC          Busy timeout is MILLISEC\n"
+    "   --trace BOOLEAN             Enable or disable tracing\n"
+  );
   exit(1);
 }
 
@@ -1275,6 +1289,8 @@ int SQLITE_CDECL main(int argc, char **argv){
   const char *zJMode;
   const char *zNRep;
   int nRep = 1, iRep;
+  int iTmout = 0;              /* Default: no timeout */
+  const char *zTmout;
 
   g.argv0 = argv[0];
   g.iTrace = 1;
@@ -1301,6 +1317,8 @@ int SQLITE_CDECL main(int argc, char **argv){
   zTrace = findOption(argv+2, &n, "trace", 1);
   if( zTrace ) g.iTrace = atoi(zTrace);
   if( findOption(argv+2, &n, "quiet", 0)!=0 ) g.iTrace = 0;
+  zTmout = findOption(argv+2, &n, "timeout", 1);
+  if( zTmout ) iTmout = atoi(zTmout);
   g.bSqlTrace = findOption(argv+2, &n, "sqltrace", 0)!=0;
   g.bSync = findOption(argv+2, &n, "sync", 0)!=0;
   if( g.zErrLog ){
@@ -1321,6 +1339,7 @@ int SQLITE_CDECL main(int argc, char **argv){
     sqlite3_snprintf(sizeof(g.zName), g.zName, "%05d.client%02d",
                      GETPID(), iClient);
   }else{
+    int nTry = 0;
     if( g.iTrace>0 ){
       printf("BEGIN: %s", argv[0]);
       for(i=1; i<argc; i++) printf(" %s", argv[i]);
@@ -1332,11 +1351,22 @@ int SQLITE_CDECL main(int argc, char **argv){
       fflush(stdout);
     }
     iClient =  0;
-    unlink(g.zDbFile);
+    do{
+      if( (nTry%5)==4 ) printf("... %strying to unlink '%s'\n",
+                               nTry>5 ? "still " : "", g.zDbFile);
+      rc = unlink(g.zDbFile);
+      if( rc && errno==ENOENT ) rc = 0;
+    }while( rc!=0 && (++nTry)<60 && sqlite3_sleep(1000)>0 );
+    if( rc!=0 ){
+      fatalError("unable to unlink '%s' after %d attempts\n",
+                 g.zDbFile, nTry);
+    }
     openFlags |= SQLITE_OPEN_CREATE;
   }
   rc = sqlite3_open_v2(g.zDbFile, &g.db, openFlags, g.zVfs);
   if( rc ) fatalError("cannot open [%s]", g.zDbFile);
+  if( iTmout>0 ) sqlite3_busy_timeout(g.db, iTmout);
+  
   if( zJMode ){
 #if defined(_WIN32)
     if( sqlite3_stricmp(zJMode,"persist")==0