From: dan Date: Wed, 31 May 2017 17:06:13 +0000 (+0000) Subject: Generate extra log messages in response to irregularites in the pointer-map X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7f002db7e3386448e0dc96e9c586f0c3f8501504;p=thirdparty%2Fsqlite.git Generate extra log messages in response to irregularites in the pointer-map used by "BEGIN CONCURRENT" transactions. FossilOrigin-Name: f7e3e2bc88f110d9282ce5d2fa58580c585faeb57cb707253f05001e5f4bd91b --- diff --git a/manifest b/manifest index 7d09c7ae3f..7df12fad09 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Instead\sof\sa\sroot\spage\snumber,\slog\sthe\sobject\s(table\sor\sindex)\sname\sif\sa\spage\nlevel\slocking\sconflict\sis\sdetected. -D 2017-05-29T19:23:56.135 +C Generate\sextra\slog\smessages\sin\sresponse\sto\sirregularites\sin\sthe\spointer-map\nused\sby\s"BEGIN\sCONCURRENT"\stransactions. +D 2017-05-31T17:06:13.603 F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 8eeb80162074004e906b53d7340a12a14c471a83743aab975947e95ce061efcc @@ -350,7 +350,7 @@ F src/auth.c 79f96c6f33bf0e5da8d1c282cee5ebb1852bb8a6ccca3e485d7c459b035d9c3c F src/backup.c faf17e60b43233c214aae6a8179d24503a61e83b F src/bitvec.c c77b7f5759e413c1c8b53267d633c952e66db79c1171964c7e24c0f92f5019cf F src/btmutex.c 0e9ce2d56159b89b9bc8e197e023ee11e39ff8ca -F src/btree.c 8be55b3e9ed1346b5cfd3f749e6c338ced1cade9242a3c5404696bc4aed26652 +F src/btree.c 322cd2e8aa98c5e44fb9fc756e15fe86c093bdba2e8c4465541098a56b1dd0a7 F src/btree.h 14e99cc2b666beb60322173c761d16b668ec2e07c18bbb74e8a49fe85946f8a0 F src/btreeInt.h 7429915fc8f51bbd78b7ac023aa4afbe5b9660fc1e6970f144b07540a34a4623 F src/build.c ba3f389668754c407805bbc5f8ab140f063ba6b04a6a86f63006b63b3c7319a8 @@ -611,7 +611,7 @@ F test/colname.test 08948a4809d22817e0e5de89c7c0a8bd90cb551b F test/concfault.test 500f17c3fcfe7705114422bcc6ddd3c740001a43 F test/concurrent.test 3eb5e6a911dc6ff72e3a679f563e683b436f6c701e6e1d6050173df2b8448d6b F test/concurrent2.test 9dfbeb0a323733fe1d13443371734bb94a674dbf777f464365475903873111f8 -F test/concurrent3.test 0a5f7e3036d1eccf0782d7153ac21f5f222e9468 +F test/concurrent3.test f4af1cf1220908c6dd5694923621c19e999b78cd997e2646285f08a52bcb4170 F test/concurrent4.test 989c6575225f9c4ef5d2392a9b9d0405665567c7501a3e44129598794d9b1b5f F test/concurrent5.test d5d7d9d404a9b4502464fc097c1fc5c3012bb4f1b063fae7ad707ca983fc86c5 F test/conflict.test 029faa2d81a0d1cafb5f88614beb663d972c01db @@ -1591,7 +1591,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 92618492b048867af38922825f3d094eaaa2dd919b1ed2f7372483cc53f892bf -R 9903c08299ff258c04c9dfdcdc90aac6 +P 9ad846e57bd427adc7c29768cabca18905f7f978168e0642a5917d894fda8bfd +R 524ad4cfe044e13975f9c2307068a2ae U dan -Z 4393c020077681d651727b37beafcbae +Z b8c7e688cb5faa52956d652176272c93 diff --git a/manifest.uuid b/manifest.uuid index cee4fdfd92..063e7cf439 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9ad846e57bd427adc7c29768cabca18905f7f978168e0642a5917d894fda8bfd \ No newline at end of file +f7e3e2bc88f110d9282ce5d2fa58580c585faeb57cb707253f05001e5f4bd91b \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 38dfbccf41..183e3db17c 100644 --- a/src/btree.c +++ b/src/btree.c @@ -629,11 +629,45 @@ static void btreePtrmapDelete(BtShared *pBt){ pBt->pMap = 0; } } + +static void btreeCheckPtrmap(BtShared *p, int nPage, const char *zLog){ + BtreePtrmap *pMap = p->pMap; + if( pMap ){ + int n = MIN(1 + nPage - (int)pMap->iFirst, 5); + int i; + for(i=0; iaPtr[i].eType; + if( (eType==PTRMAP_OVERFLOW1 || + eType==PTRMAP_OVERFLOW2 || + eType==PTRMAP_BTREE) && pMap->aPtr[i].parent==0 + ){ + sqlite3_log(SQLITE_ERROR, + "Bitvec: error at (%s) - (%d/%d %d/%d %d/%d %d/%d %d/%d)", + zLog, + (int)pMap->aPtr[0].eType, (int)pMap->aPtr[0].parent, + (n>1 ? (int)pMap->aPtr[1].eType : -1), + (n>1 ? (int)pMap->aPtr[1].parent : -1), + + (n>2 ? (int)pMap->aPtr[2].eType : -1), + (n>2 ? (int)pMap->aPtr[2].parent : -1), + + (n>3 ? (int)pMap->aPtr[3].eType : -1), + (n>3 ? (int)pMap->aPtr[3].parent : -1), + + (n>4 ? (int)pMap->aPtr[4].eType : -1), + (n>4 ? (int)pMap->aPtr[4].parent : -1) + ); + break; + } + } + } +} #else /* SQLITE_OMIT_CONCURRENT */ # define btreePtrmapAllocate(x) SQLITE_OK # define btreePtrmapDelete(x) # define btreePtrmapBegin(x,y) SQLITE_OK # define btreePtrmapEnd(x,y,z) +# define btreeCheckPtrmap(a,b,c) #endif /* SQLITE_OMIT_CONCURRENT */ static void releasePage(MemPage *pPage); /* Forward reference */ @@ -4088,6 +4122,8 @@ static int btreeFixUnlocked(Btree *p){ Pgno nPage = btreePagecount(pBt); u32 nFree = get4byte(&p1[36]); + btreeCheckPtrmap(pBt, nPage, "btreeFixUnlocked(1)"); + assert( pBt->pMap ); rc = sqlite3PagerUpgradeSnapshot(pPager, pPage1->pDbPage); assert( p1==pPage1->aData ); @@ -8674,6 +8710,7 @@ int sqlite3BtreeInsert( assert( pCur->apPage[pCur->iPage]->nOverflow==0 ); end_insert: + btreeCheckPtrmap(pBt, pBt->nPage, "sqlite3BtreeInsert()"); return rc; } @@ -8845,6 +8882,7 @@ int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){ } } } + btreeCheckPtrmap(pBt, pBt->nPage, "sqlite3BtreeInsert()"); return rc; } diff --git a/test/concurrent3.test b/test/concurrent3.test index 3ad6a1cce4..4364f84012 100644 --- a/test/concurrent3.test +++ b/test/concurrent3.test @@ -26,8 +26,8 @@ ifcapable !concurrent { db close sqlite3_shutdown -#test_sqlite3_log xLog -#proc xLog {error_code msg} { puts "$error_code: $msg" } +test_sqlite3_log xLog +proc xLog {error_code msg} { puts "$error_code: $msg" } reset_db proc create_schema {} {