diff options
author | drh <drh@noemail.net> | 2014-10-22 02:43:14 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2014-10-22 02:43:14 +0000 |
commit | ae64b5de71addb559468fe0221ec2a07a8195b89 (patch) | |
tree | 4867687abe415012340a26247184e1d3217302ca | |
parent | 932de71e39d3192ec6138f0676fa7de41807ae2c (diff) | |
download | sqlite-ae64b5de71addb559468fe0221ec2a07a8195b89.tar.gz sqlite-ae64b5de71addb559468fe0221ec2a07a8195b89.zip |
Call fsync() right after ftruncate() when in journal_mode=TRUNCATE and
when synchronous=FULL in order to ensure that transactions are durable
across a power loss that happens moments after the commit. Proposed
fix for [https://bugzilla.mozilla.org/show_bug.cgi?id=1072773]. This
is a cherry-pick of [3e922208b68563]
FossilOrigin-Name: 674848070ec296874f555aaaea511987648bf94e
-rw-r--r-- | manifest | 19 | ||||
-rw-r--r-- | manifest.uuid | 2 | ||||
-rw-r--r-- | src/pager.c | 8 |
3 files changed, 19 insertions, 10 deletions
@@ -1,5 +1,5 @@ -C Version\s3.8.6 -D 2014-08-15T11:46:33.931 +C Call\sfsync()\sright\safter\sftruncate()\swhen\sin\sjournal_mode=TRUNCATE\sand\nwhen\ssynchronous=FULL\sin\sorder\sto\sensure\sthat\stransactions\sare\sdurable\nacross\sa\spower\sloss\sthat\shappens\smoments\safter\sthe\scommit.\s\sProposed\nfix\sfor\s[https://bugzilla.mozilla.org/show_bug.cgi?id=1072773].\s\sThis\nis\sa\scherry-pick\sof\s[3e922208b68563] +D 2014-10-22T02:43:14.227 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 5eb79e334a5de69c87740edd56af6527dd219308 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -210,7 +210,7 @@ F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa F src/os_unix.c bd7df3094a60915c148517504c76df4fca24e542 F src/os_win.c 1c936c7b0659d0eb12b868e2cd710a570e78873e F src/os_win.h 057344a6720b4c8405d9bd98f58cb37a6ee46c25 -F src/pager.c f6bb1fa6cdf2062f2d8aec3e64db302bca519ab8 +F src/pager.c 00ef5573d869fe84de9b09e6b17b3cb3a86e9ea7 F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428 F src/parse.y 22d6a074e5f5a7258947a1dc55a9bf946b765dd0 F src/pcache.c d8eafac28290d4bb80332005435db44991d07fc2 @@ -1186,10 +1186,11 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 3f45b8192dad7fb1f027cbaa694046e3c1b3e278 -R be8bb3bca247e348b90f7388fee24972 -T +bgcolor * #d0c0ff -T +sym-release * -T +sym-version-3.8.6 * +P 9491ba7d738528f168657adb43a198238abde19e +Q +3e922208b68563489c7766abb9afb4885113e7b8 +R e2e522917c8c11a5fb0e549f473cf3e8 +T *branch * branch-3.8.6 +T *sym-branch-3.8.6 * +T -sym-trunk * U drh -Z 74d8dd4d4aac0ae87245b4bcefd8b172 +Z 1d3cb2e17bd45e0bacf9eead80abe706 diff --git a/manifest.uuid b/manifest.uuid index 01b81a480..81f80cade 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9491ba7d738528f168657adb43a198238abde19e
\ No newline at end of file +674848070ec296874f555aaaea511987648bf94e
\ No newline at end of file diff --git a/src/pager.c b/src/pager.c index a77dcecc4..93e0928af 100644 --- a/src/pager.c +++ b/src/pager.c @@ -1956,6 +1956,14 @@ static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){ rc = SQLITE_OK; }else{ rc = sqlite3OsTruncate(pPager->jfd, 0); + if( rc==SQLITE_OK && pPager->fullSync ){ + /* Make sure the new file size is written into the inode right away. + ** Otherwise the journal might resurrect following a power loss and + ** cause the last transaction to roll back. See + ** https://bugzilla.mozilla.org/show_bug.cgi?id=1072773 + */ + rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags); + } } pPager->journalOff = 0; }else if( pPager->journalMode==PAGER_JOURNALMODE_PERSIST |