You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee='https://github.com/serhiy-storchaka'closed_at=<Date2016-12-07.09:12:22.519>created_at=<Date2016-12-01.03:50:06.052>labels= ['3.7', 'type-feature', 'library']
title='dumbdbm should not commit if in read mode'updated_at=<Date2017-03-31.16:36:22.839>user='https://github.com/joanthanng'
Or at the very least, if there is an OSError in _update, an error should be raised instead of ignoring this error.
In the current state of the code, if there was an OSError while reading the dirfile, the dirfile would be overwritten with a blank file when it is closed.
But there is a real issue: opening read-only files in read mode. Currently this causes a PermissionError on closing.
For backward compatibility flags 'r' and 'w' are ignored. I.e. opening with 'r' and 'w' creates a file if it is not existing, and opening with 'r' allows modifying the database. Since 3.6 this emits deprecation warnings (bpo-21708). In future versions this will be an error.
Proposed patch makes two changes:
The index file no longer written if the database was not modified. This increases performance and adds a support of read-only files.
A deprecation warning is raised when the index file is absent in 'r' and 'w' modes. In future versions this will be an error.
But there is a real issue: opening read-only files in read mode. Currently
this causes a PermissionError on closing.
For backward compatibility flags 'r' and 'w' are ignored. I.e. opening
with 'r' and 'w' creates a file if it is not existing, and opening with 'r'
allows modifying the database. Since 3.6 this emits deprecation warnings
(bpo-21708). In future versions this will be an error.
Proposed patch makes two changes:
The index file no longer written if the database was not modified. This
increases performance and adds a support of read-only files.
A deprecation warning is raised when the index file is absent in 'r'
and 'w' modes. In future versions this will be an error.
Traceback (most recent call last):
File "D:\buildarea\2.7.bolen-windows8\build\lib\test\test_dumbdbm.py", line 190, in test_readonly_files
test_support.rmtree(dir)
File "D:\buildarea\2.7.bolen-windows8\build\lib\test\test_support.py", line 289, in rmtree
_rmtree(path)
File "D:\buildarea\2.7.bolen-windows8\build\lib\test\test_support.py", line 245, in _rmtree
_waitfor(_rmtree_inner, path, waitall=True)
File "D:\buildarea\2.7.bolen-windows8\build\lib\test\test_support.py", line 199, in _waitfor
func(pathname)
File "D:\buildarea\2.7.bolen-windows8\build\lib\test\test_support.py", line 244, in _rmtree_inner
_force_run(path, os.unlink, fullname)
File "D:\buildarea\2.7.bolen-windows8\build\lib\test\test_support.py", line 194, in _force_runreturn func(*args)
WindowsError: [Error 5] Access is denied: '@test_3796_tmp\\db.dat'
----------------------------------------------------------------------
'test_dumbdbm' left behind directory '@test_3796_tmp'
. . .
test test_dumbdbm crashed -- <type 'exceptions.WindowsError'>: [Error 5] Access is denied: '@test_3796_tmp\\db.dat'
Traceback (most recent call last):
File "D:\buildarea\2.7.bolen-windows8\build\PCbuild\..\Lib\test\regrtest.py", line 948, in runtest_inner
test_time = time.time() - start_time
File "D:\buildarea\2.7.bolen-windows8\build\PCbuild\..\Lib\test\regrtest.py", line 899, in __exit__
restore(original)
File "D:\buildarea\2.7.bolen-windows8\build\PCbuild\..\Lib\test\regrtest.py", line 876, in restore_files
test_support.rmtree(fn)
. . .
'test_dumbdbm' left behind directory '@test_3796_tmp' and it couldn't be removed: [Error 5] Access is denied: '@test_3796_tmp\\db.dat'
Traceback (most recent call last):
File "D:\buildarea\2.7.bolen-windows8\build\PCbuild\..\Lib\test\regrtest.py", line 1679, in <module>
main()
File "D:\buildarea\2.7.bolen-windows8\build\lib\contextlib.py", line 35, in __exit__self.gen.throw(type, value, traceback)
File "D:\buildarea\2.7.bolen-windows8\build\lib\test\test_support.py", line 765, in temp_cwd
rmtree(name)
Activity
joanthanng commentedon Dec 1, 2016
Or at the very least, if there is an OSError in _update, an error should be raised instead of ignoring this error.
In the current state of the code, if there was an OSError while reading the dirfile, the dirfile would be overwritten with a blank file when it is closed.
[-]dumbdbm should not commit if[/-][+]dumbdbm should not commit if in read mode[/+]serhiy-storchaka commentedon Dec 1, 2016
Do you have concrete example when not ignoring an OSError in _update causes an issue? This is needed for writing tests.
joanthanng commentedon Dec 1, 2016
I'm not sure how to create an OSError.
But perhaps something like this:
'''
from dbm import dumb
import os
serhiy-storchaka commentedon Dec 1, 2016
This example is too artificial.
But there is a real issue: opening read-only files in read mode. Currently this causes a PermissionError on closing.
For backward compatibility flags 'r' and 'w' are ignored. I.e. opening with 'r' and 'w' creates a file if it is not existing, and opening with 'r' allows modifying the database. Since 3.6 this emits deprecation warnings (bpo-21708). In future versions this will be an error.
Proposed patch makes two changes:
The index file no longer written if the database was not modified. This increases performance and adds a support of read-only files.
A deprecation warning is raised when the index file is absent in 'r' and 'w' modes. In future versions this will be an error.
May be the first change can be backported.
joanthanng commentedon Dec 1, 2016
#1 makes sense to be backported.
On Thu, Dec 1, 2016 at 8:41 PM, Serhiy Storchaka <report@bugs.python.org>
wrote:
python-dev commentedon Dec 2, 2016
New changeset 0516f54491cb by Serhiy Storchaka in branch '2.7':
Issue bpo-28847: dubmdbm no longer writes the index file in when it is not
https://hg.python.org/cpython/rev/0516f54491cb
serhiy-storchaka commentedon Dec 2, 2016
The first part is committed in 2.7. I'll commit it in 3.5-3.7 after releasing 3.6.0.
vadmium commentedon Dec 3, 2016
Serhiy: The Windows buildbots are having trouble removing read-only files. Maybe restore the write mode for the end of the test, or fix support.rmtree()? See <https://docs.python.org/3/library/shutil.html#rmtree-example\>.
python-dev commentedon Dec 3, 2016
New changeset dc7c86de9e13 by Martin Panter in branch '2.7':
Issue bpo-28847: Fix spelling
https://hg.python.org/cpython/rev/dc7c86de9e13
vadmium commentedon Dec 3, 2016
http://buildbot.python.org/all/builders/AMD64%20Windows8%202.7/builds/9/steps/test/logs/stdio
======================================================================
ERROR: test_readonly_files (test.test_dumbdbm.DumbDBMTestCase)
----------------------------------------------------------------------
python-dev commentedon Dec 3, 2016
New changeset cb4a892e9b66 by Serhiy Storchaka in branch '2.7':
Try to fix test.test_support.rmtree() on Windows for fixing bpo-28847 tests.
https://hg.python.org/cpython/rev/cb4a892e9b66
serhiy-storchaka commentedon Dec 3, 2016
Thanks Martin for pointing on this. Now buildbots are green.
python-dev commentedon Dec 7, 2016
New changeset 0a74bc7ba462 by Serhiy Storchaka in branch '3.5':
Issue bpo-28847: dbm.dumb now supports reading read-only files and no longer
https://hg.python.org/cpython/rev/0a74bc7ba462
New changeset 0c532bd28539 by Serhiy Storchaka in branch '3.6':
Issue bpo-28847: dbm.dumb now supports reading read-only files and no longer
https://hg.python.org/cpython/rev/0c532bd28539
New changeset 2f59be67830c by Serhiy Storchaka in branch 'default':
Issue bpo-28847: dbm.dumb now supports reading read-only files and no longer
https://hg.python.org/cpython/rev/2f59be67830c
New changeset a10361dfbf64 by Serhiy Storchaka in branch 'default':
Issue bpo-28847: A deprecation warning is now emitted if the index file is missed
https://hg.python.org/cpython/rev/a10361dfbf64