]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Lock the wal file for all snapshot transactions, even if they would not
authordan <dan@noemail.net>
Tue, 28 Nov 2017 13:39:41 +0000 (13:39 +0000)
committerdan <dan@noemail.net>
Tue, 28 Nov 2017 13:39:41 +0000 (13:39 +0000)
otherwise require this, preventing checkpointers and writers from wrapping the
wal file. This means that if one connection has an open snapshot transaction
it is guaranteed that a second connection can open a transaction on the same
snapshot.

FossilOrigin-Name: b81a31495bd27c1d96f7df653da3502054240cb5acf66b860da7f0f9b422a524

1  2 
manifest
manifest.uuid
src/wal.c

diff --cc manifest
index 58ec6b902608fade07222a805cd28cf18ff3a4e3,c550d72b062f227d531537cd4115202ca6007919..0d6ebb2ca6f7c5e3a30ca0715f800f7cdc2b5ed5
+++ b/manifest
@@@ -1,10 -1,10 +1,10 @@@
- C Add\sexperimental\sfeature\sto\sdetect\sthreading\sbugs\sin\sapps\sthat\suse\nSQLITE_CONFIG_MULTITHREADED.\sEnabled\sat\scompile\stime\susing\nSQLITE_ENABLE_MULTITHREADED_CHECKS.
- D 2017-11-28T07:52:00.416
 -C Experimental\schange\sso\sthat\ssnapshot\stransactions\salways\slock\sthe\swal\sfile\s-\npreventing\swriters\sor\struncate-checkpointers\sfrom\swrapping\sit.
 -D 2017-09-23T07:46:54.932
 -F Makefile.in 4bc36d913c2e3e2d326d588d72f618ac9788b2fd4b7efda61102611a6495c3ff
++C Lock\sthe\swal\sfile\sfor\sall\ssnapshot\stransactions,\seven\sif\sthey\swould\snot\notherwise\srequire\sthis,\spreventing\scheckpointers\sand\swriters\sfrom\swrapping\sthe\nwal\sfile.\sThis\smeans\sthat\sif\sone\sconnection\shas\san\sopen\ssnapshot\stransaction\nit\sis\sguaranteed\sthat\sa\ssecond\sconnection\scan\sopen\sa\stransaction\son\sthe\ssame\nsnapshot.
++D 2017-11-28T13:39:41.135
 +F Makefile.in 6a879cbf01e37f9eac131414955f71774b566502d9a57ded1b8585b507503cb8
  F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 -F Makefile.msc 6033b51b6aea702ea059f6ab2d47b1d3cef648695f787247dd4fb395fe60673f
 +F Makefile.msc e5d7606238f55816da99f719969598df5b091aa2e9a6935c9412fcae8f53fc44
  F README.md f5c87359573c4d255425e588a56554b50fdcc2afba4e017a2e02a43701456afd
 -F VERSION f81232df28e2d3ff049feefad5fbd5489cc33697f6bd2ecf61af7f0dde3b83d0
 +F VERSION 0c10cdfed866fdd2d80434f64f042c3330f1daaed12e54287beb104f04b3faaf
  F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
  F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
  F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90
@@@ -544,20 -530,20 +544,20 @@@ F src/vdbe.c 3393b508d9ad084ffce232a7c5
  F src/vdbe.h d50cadf12bcf9fb99117ef392ce1ea283aa429270481426b6e8b0280c101fd97
  F src/vdbeInt.h 1fe00770144c12c4913128f35262d11527ef3284561baaab59b947a41c08d0d9
  F src/vdbeapi.c 9c670ca0dcc1cd86373aa353b747b26fe531ca5cd4331690c611d1f03842e2a1
 -F src/vdbeaux.c 831a77aaa7aa43005f1c9bf3e9eb6506f4865e1cf99943ccdcd3be5d2dd8a3c7
 -F src/vdbeblob.c 635a79b60340a6a14a622ea8dcb081f0a66b1ac3836870c587f232eec08c0286
 -F src/vdbemem.c 5c1533bf756918b4e46b2ed2bb82c29c7c651e1e37bbd0a0d8731a68787598ff
 +F src/vdbeaux.c b02a1f842c0e916285643b8475b7189f10b76f9e7edb5e2353a913c7980f90b5
 +F src/vdbeblob.c f5c70f973ea3a9e915d1693278a5f890dc78594300cf4d54e64f2b0917c94191
 +F src/vdbemem.c 6e6082377183b8fd8d6f2bce45250b4c2e89bfeb534a094cd8612dae8aaa2fda
  F src/vdbesort.c 731a09e5cb9e96b70c394c1b7cf3860fbe84acca7682e178615eb941a3a0ef2f
  F src/vdbetrace.c 48e11ebe040c6b41d146abed2602e3d00d621d7ebe4eb29b0a0f1617fd3c2f6c
 -F src/vtab.c f1d5c23132fb0247af3e86146404112283ddedb6c518de0d4edc91cfb36970ef
 +F src/vtab.c 0e4885495172e1bdf54b12cce23b395ac74ef5729031f15e1bc1e3e6b360ed1a
  F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
- F src/wal.c beeb71e4eab65dbf0d95f2717efc6ca3c0f5b3090ce67f3de63828f39a6ff053
 -F src/wal.c 0ceefa9f2a0cb00033d312a04c2d5c2005a6404a6fccab22743de9b3c363154b
++F src/wal.c 5a3f464edd64596f601683ed321d12e6fd93c5fb9afdfb3653d6ffd0fee9c48f
  F src/wal.h 8de5d2d3de0956d6f6cb48c83a4012d5f227b8fe940f3a349a4b7e85ebcb492a
 -F src/walker.c 3ccfa8637f95355bff61144e01a615b8ef26f79c312880848da73f03367da1e6
 -F src/where.c 21eea981920a13fd3c0ac3d6c128d0a34b22cbec064e4f0603375fe1ffe26ca6
 +F src/walker.c da987a20d40145c0a03c07d8fefcb2ed363becc7680d0500d9c79915591f5b1f
 +F src/where.c 9752b68e03e2044f0faa4708fabb0189769067b660bffa931e1fd65736269659
  F src/whereInt.h 82c04c5075308abbac59180c8bad5ecb45b07453981f60a53f3c7dee21e1e971
 -F src/wherecode.c e8c2ece5843ea56e6c90277d421f2d628f3f7b7c976642369cc519f008e1d2b1
 -F src/whereexpr.c 4953ca4e769c047d0a00a1ba9085849626b1f3a6e89f6befcf5c38fa0722acdd
 +F src/wherecode.c 611fcabd05592ed2febd7d182f9621425b0466c5232d70e0981c842d429356d5
 +F src/whereexpr.c 427ea8e96ec24f2a7814c67b8024ad664a9c7656264c4566c34743cb23186e46
  F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
  F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
  F test/affinity3.test 6a101af2fc945ce2912f6fe54dd646018551710d
@@@ -1222,7 -1205,8 +1222,8 @@@ F test/skipscan3.test ec5bab3f81c7038b4
  F test/skipscan5.test 67817a4b6857c47e0e33ba3e506da6f23ef68de2
  F test/skipscan6.test 5866039d03a56f5bd0b3d172a012074a1d90a15b
  F test/snapshot.test 85735bd997a4f6d710140c28fd860519a299649f
 -F test/snapshot2.test 867652ed4a13282dce218723535fad1c7b44c3c4
 +F test/snapshot2.test 925e42427e923262db63c9d7155183f889e3e99feaedec4075f659e51608344f
+ F test/snapshot3.test 9719443594a04778861bd20d12596c5f880af177d6cd62f111da3198cafc6096
  F test/snapshot_fault.test 52c5e97ebd218846a8ae2da4d147d3e77d71f963
  F test/soak.test 0b5b6375c9f4110c828070b826b3b4b0bb65cd5f
  F test/softheap1.test 843cd84db9891b2d01b9ab64cef3e9020f98d087
@@@ -1678,8 -1656,10 +1679,8 @@@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a9
  F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
  F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
  F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
- P e6b89304695be371978e65dddd710c8bd563c66b9c94d23165142b6c235c82e1 12a23c0a66fac5c9674120b390f6abaeaba3f7ff04693b281af1eefb93d6f47c
- R dd8aff31239aebcaa5e5379a4673912d
- T +closed 12a23c0a66fac5c9674120b390f6abaeaba3f7ff04693b281af1eefb93d6f47c
 -P 2c03d8b8f028b6a736aaf2cf8b28a51b3434cf341c95cf3a80469e0a24acdd98
 -R 44e3d692cd4dca7384d5a55f548b9b05
 -T *branch * snapshots-lock-wal
 -T *sym-snapshots-lock-wal *
 -T -sym-trunk *
++P 40b598c8392f030f6ed8c63ce81cb0426bb3984397c19c756215f6a569a40164 d71eeaab9ecdeed772047498b781be1f0be0655af284b94cf676bb408ceea8b1
++R e37ca38ceb47340e2d23476ad044f736
++T +closed d71eeaab9ecdeed772047498b781be1f0be0655af284b94cf676bb408ceea8b1
  U dan
- Z bdded6a608898929c58df7d45769809f
 -Z 91f0de7cf02d66dc9c74cc874f9821f7
++Z a9d291c094a58941f666434dce6709fb
diff --cc manifest.uuid
index 2cef934b2b6c22cc41e0387c0fcd153249dabc1e,b33987e64e3e81687bf4ba2beb0ed79b5c9498f5..1c080520c0a753d9ee3b6581230e526640d3de2a
@@@ -1,1 -1,1 +1,1 @@@
- 40b598c8392f030f6ed8c63ce81cb0426bb3984397c19c756215f6a569a40164
 -d71eeaab9ecdeed772047498b781be1f0be0655af284b94cf676bb408ceea8b1
++b81a31495bd27c1d96f7df653da3502054240cb5acf66b860da7f0f9b422a524
diff --cc src/wal.c
index 376151e1a8487c006c8bc3c8d6c000afb2c653b1,73a6db0e0264b43e81772cee8ff6f5341531ef8a..7b49f3dab4e74c73746cf9d46a1339475ac7276b
+++ b/src/wal.c
@@@ -2484,18 -2245,12 +2484,17 @@@ static int walTryBeginRead(Wal *pWal, i
      if( rc!=SQLITE_OK ){
        return rc;
      }
 +    else if( pWal->bShmUnreliable ){
 +      return walBeginShmUnreliable(pWal, pChanged);
 +    }
    }
  
 +  assert( pWal->nWiData>0 );
 +  assert( pWal->apWiData[0]!=0 );
    pInfo = walCkptInfo(pWal);
 -  if( !useWal && pInfo->nBackfill==pWal->hdr.mxFrame 
 +  if( !useWal && pInfo->nBackfill==pWal->hdr.mxFrame
  #ifdef SQLITE_ENABLE_SNAPSHOT
-    && (pWal->pSnapshot==0 || pWal->hdr.mxFrame==0
-      || 0==memcmp(&pWal->hdr, pWal->pSnapshot, sizeof(WalIndexHdr)))
+    && (pWal->pSnapshot==0 || pWal->hdr.mxFrame==0)
  #endif
    ){
      /* The WAL has been completely backfilled (or it is empty).