Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test_mmap failing on AIX #37880

Closed
nnorwitz mannequin opened this issue Jan 31, 2003 · 21 comments
Closed

test_mmap failing on AIX #37880

nnorwitz mannequin opened this issue Jan 31, 2003 · 21 comments
Labels
extension-modules C modules in the Modules dir tests Tests in the Lib/test dir type-bug An unexpected behavior, bug, or error

Comments

@nnorwitz
Copy link
Mannequin

nnorwitz mannequin commented Jan 31, 2003

BPO 678250
Nosy @tim-one, @loewis, @pitrou, @devdanzin, @bitdancer
Files
  • patch_flush_mmap.diff
  • patch_mmap_flush_updated.diff
  • 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 = None
    closed_at = <Date 2010-12-11.02:13:28.437>
    created_at = <Date 2003-01-31.17:44:42.000>
    labels = ['extension-modules', 'type-bug', 'tests']
    title = 'test_mmap failing on AIX'
    updated_at = <Date 2010-12-11.02:13:28.436>
    user = 'https://bugs.python.org/nnorwitz'

    bugs.python.org fields:

    activity = <Date 2010-12-11.02:13:28.436>
    actor = 'r.david.murray'
    assignee = 'none'
    closed = True
    closed_date = <Date 2010-12-11.02:13:28.437>
    closer = 'r.david.murray'
    components = ['Extension Modules', 'Tests']
    creation = <Date 2003-01-31.17:44:42.000>
    creator = 'nnorwitz'
    dependencies = []
    files = ['18951', '18963']
    hgrepos = []
    issue_num = 678250
    keywords = ['patch']
    message_count = 21.0
    messages = ['14327', '14328', '14329', '14330', '14331', '14332', '14333', '14334', '14335', '81716', '114215', '117054', '117070', '117073', '117075', '117081', '117084', '117129', '118993', '119002', '123764']
    nosy_count = 10.0
    nosy_names = ['tim.peters', 'loewis', 'nnorwitz', 'wheelrl', 'mdr0', 'pitrou', 'sable', 'ajaksu2', 'r.david.murray', 'BreamoreBoy']
    pr_nums = []
    priority = 'normal'
    resolution = 'fixed'
    stage = 'resolved'
    status = 'closed'
    superseder = None
    type = 'behavior'
    url = 'https://bugs.python.org/issue678250'
    versions = ['Python 2.7', 'Python 3.2']

    @nnorwitz
    Copy link
    Mannequin Author

    nnorwitz mannequin commented Jan 31, 2003

    test_mmap is failing on a flush while trying to do:
    Copy-on-write memory map data not written correctly

    The problem is that the mmap is opened with
    ACCESS_COPY. This translates to MAP_PRIVATE.
    On AIX, the msync man page says: "When the
    MS_SYNC and MAP_PRIVATE flags both are used, the
    msync subroutine returns an errno value of EINVAL."

    I'm not sure what the correct fix should be.

    @nnorwitz nnorwitz mannequin added extension-modules C modules in the Modules dir labels Jan 31, 2003
    @loewis
    Copy link
    Mannequin

    loewis mannequin commented Mar 4, 2003

    Logged In: YES
    user_id=21627

    I think the test is somewhat bogus: It tries to check that
    modification to an ACCESS_COPY doesn't modify the underlying
    file, but assumes that .flush becomes a no-op, even though
    an exception is more reasonable (IMO; errors should never
    pass silently).

    So I see two options: Declare that .flush() always raises an
    exception (and modify implementations that don't produce an
    exception accordingly), or declare that aspect to be
    system-dependent, and modify the test (and the
    documentation) to expect and ignore an exception.

    Assigning to Tim, as he incorporated that feature into mmap.

    @tim-one
    Copy link
    Member

    tim-one commented Apr 28, 2003

    Logged In: YES
    user_id=31435

    Sorry, I've had nothing to do with mmap beyond fixing bugs.
    The "access" feature was due to Jay Miller, although I believe
    I checked in his patch.

    Martin, I don't understand why you think it's reasonable for
    flush to complain here: the mmap is open for writing, so
    what's surprising about expecting to be able to flush after a
    write? Simply that there's no associated file, due to copy-on-
    write? Then user code would have to be acutely aware of how
    an mmap'ed object was opened, just to avoid nuisance
    complaints when they flush after writing.

    So that's a third alternative: alter the implementation to make
    mmap.flush() do nothing when an mmap object was opened
    as copy-on-write.

    @loewis
    Copy link
    Mannequin

    loewis mannequin commented May 3, 2003

    Logged In: YES
    user_id=21627

    The documentation for flush says

    "Flushes changes made to the in-memory copy of a file back
    to disk."

    But it doesn't do that, and we all agree it shouldn't do
    that. So I would claim that it is an error to use .flush on
    an mmap object that was opened in ACCESS_COPY.

    This is like trying to write to a file that was opened for
    reading only: one *could* declare that the write just does
    nothing, but it helps the developer more if you get an
    exception, because the code is likely wrong (i.e. not
    following the likely intentions of the author).

    @tim-one
    Copy link
    Member

    tim-one commented May 6, 2003

    Logged In: YES
    user_id=31435

    Hmm. I suspect the flush docs() are too strong (does flush
    really promise to materialize bytes *on disk*? it doesn't for
    other Python file objects, you also need os.fsync() for that).

    Your point is well taken, though, and whatever flush() does
    normally do, it's not going to do it for a copy-on-write mmap.
    So fine by me if we declare that attempting to flush() a copy-
    on-write mmap raises an exception.

    @wheelrl
    Copy link
    Mannequin

    wheelrl mannequin commented Jan 7, 2004

    Logged In: YES
    user_id=249546

    I am getting the same error on AIX 5.2 with Python 2.3.3
    release. What can I do to get around the test error and
    verify the mmap is working?

    @nnorwitz
    Copy link
    Mannequin Author

    nnorwitz mannequin commented Jan 7, 2004

    Logged In: YES
    user_id=33168

    run the test with the -v flag: ./python
    ./Lib/test/regrtest.py -v test_mmap

    I think only everything should be fine up to copy-on-write
    tests. Here's what a good run looks like:

    [neal@epoch c3]$ ./python ./Lib/test/regrtest.py -v test_mmap
    test_mmap
    <type 'mmap.mmap'>
    Position of foo: 1.0 pages
    Length of file: 2.0 pages
    Contents of byte 0: '\x00'
    Contents of first 3 bytes: '\x00\x00\x00'

    Modifying file's content...
    Contents of byte 0: '3'
    Contents of first 3 bytes: '3\x00\x00'
    Contents of second page: '\x00foobar\x00'
    Regex match on mmap (page start, length of match): 1.0 6
    Seek to zeroth byte
    Seek to 42nd byte
    Seek to last byte
    Try to seek to negative position...
    Try to seek beyond end of mmap...
    Try to seek to negative position...
    Attempting resize()
    Creating 10 byte test data file.
    Opening mmap with access=ACCESS_READ
    Ensuring that readonly mmap can't be slice assigned.
    Ensuring that readonly mmap can't be item assigned.
    Ensuring that readonly mmap can't be write() to.
    Ensuring that readonly mmap can't be write_byte() to.
    Ensuring that readonly mmap can't be resized.
    Opening mmap with size too big
    Opening mmap with access=ACCESS_WRITE
    Modifying write-through memory map.
    Opening mmap with access=ACCESS_COPY
    Modifying copy-on-write memory map.
    Ensuring copy-on-write maps cannot be resized.
    Ensuring invalid access parameter raises exception.
    Test passed
    1 test OK.

    @mdr0
    Copy link
    Mannequin

    mdr0 mannequin commented Mar 10, 2004

    Logged In: YES
    user_id=994239

    I'm running into this problem under both AIX 4.3.3 and 5.1.
    Is this something that's going to affect python if I put it
    into production, or is it "safe" to ignore it?

    @nnorwitz
    Copy link
    Mannequin Author

    nnorwitz mannequin commented Mar 11, 2004

    Logged In: YES
    user_id=33168

    Mark, the 3 bugs you commented on (this one, 713169, and
    678264) are all test errors AFAIK. It should be safe to
    ignore them. They are in extension modules that are not
    used by many people.

    @devdanzin
    Copy link
    Mannequin

    devdanzin mannequin commented Feb 12, 2009

    Is this concern still valid?

    @devdanzin devdanzin mannequin added tests Tests in the Lib/test dir labels Feb 12, 2009
    @BreamoreBoy
    Copy link
    Mannequin

    BreamoreBoy mannequin commented Aug 18, 2010

    Closed as no response to msg81716.

    @BreamoreBoy BreamoreBoy mannequin closed this as completed Aug 18, 2010
    @BreamoreBoy BreamoreBoy mannequin closed this as completed Aug 18, 2010
    @sable
    Copy link
    Mannequin

    sable mannequin commented Sep 21, 2010

    I would like to reopen this issue as it is still occurring in py3k on AIX 5.3 and 6.1:

    Re-running test test_mmap in verbose mode
    test_access_parameter (test.test_mmap.MmapTests) ... ERROR
    test_anonymous (test.test_mmap.MmapTests) ... ok
    test_bad_file_desc (test.test_mmap.MmapTests) ... ok
    test_basic (test.test_mmap.MmapTests) ... ok
    test_context_manager (test.test_mmap.MmapTests) ... ok
    test_context_manager_exception (test.test_mmap.MmapTests) ... ok
    test_double_close (test.test_mmap.MmapTests) ... ok
    test_entire_file (test.test_mmap.MmapTests) ... ok
    test_error (test.test_mmap.MmapTests) ... ok
    test_extended_getslice (test.test_mmap.MmapTests) ... ok
    test_extended_set_del_slice (test.test_mmap.MmapTests) ... ok
    test_find_end (test.test_mmap.MmapTests) ... ok
    test_io_methods (test.test_mmap.MmapTests) ... ok
    test_move (test.test_mmap.MmapTests) ... ok
    test_offset (test.test_mmap.MmapTests) ... ok
    test_prot_readonly (test.test_mmap.MmapTests) ... ok
    test_rfind (test.test_mmap.MmapTests) ... ok
    test_subclass (test.test_mmap.MmapTests) ... ok
    test_tougher_find (test.test_mmap.MmapTests) ... ok

    ======================================================================
    ERROR: test_access_parameter (test.test_mmap.MmapTests)
    ----------------------------------------------------------------------

    Traceback (most recent call last):
      File "/san_u02/home/recette/buildbot/buildbot-aix5/py3k-aix5-xlc/build/Lib/test/test_mmap.py", line 219, in test_access_parameter
        m.flush()
    mmap.error: [Errno 22] Invalid argument

    Ran 19 tests in 0.216s

    FAILED (errors=1)

    Should flush be modified to do nothing in this case or should the unit test be updated?
    thanks

    @sable sable mannequin added type-bug An unexpected behavior, bug, or error labels Sep 21, 2010
    @bitdancer bitdancer reopened this Sep 21, 2010
    @bitdancer bitdancer reopened this Sep 21, 2010
    @loewis
    Copy link
    Mannequin

    loewis mannequin commented Sep 21, 2010

    Should flush be modified to do nothing in this case or should the unit test be updated?

    Tim is suggesting that flush should indeed become a noop. Since nobody
    else speaking in favor of it being an error, I guess this is the way to
    go: flush, on an ACCESS_COPY file, does nothing, and the test is fine
    as it stands.

    @pitrou
    Copy link
    Member

    pitrou commented Sep 21, 2010

    Interestingly, the matter was discussed on another issue, bpo-2643. I also agree that ideally flush() should become a no-op (only in 3.2, since it would break compatibility). But then we should also expose a separate sync() method with the current behaviour.

    @loewis
    Copy link
    Mannequin

    loewis mannequin commented Sep 21, 2010

    Interestingly, the matter was discussed on another issue, bpo-2643. I
    also agree that ideally flush() should become a no-op (only in 3.2,
    since it would break compatibility). But then we should also expose a
    separate sync() method with the current behaviour.

    I think you misunderstand. I'm not proposing that flush should become
    a noop entirely - only for ACCESS_COPY mappings.

    @sable
    Copy link
    Mannequin

    sable mannequin commented Sep 21, 2010

    Would that patch be OK? It solves the test_mmap on AIX.

    @loewis
    Copy link
    Mannequin

    loewis mannequin commented Sep 21, 2010

    Looks fine to me.

    @sable
    Copy link
    Mannequin

    sable mannequin commented Sep 22, 2010

    After Antoine commit concerning bpo-2643, here is a new patch (just removing the changes in close).

    Could you commit it?

    @bitdancer
    Copy link
    Member

    Committed to py3k in r85678. If I'm reading this string correctly, I believe this can (and should be) be backported. Am I correct?

    @sable
    Copy link
    Mannequin

    sable mannequin commented Oct 18, 2010

    I also believe this patch should be backported.

    If the bpo-2643 is not backported, then the patch to apply should be "patch_flush_mmap.diff" instead of "patch_mmap_flush_updated.diff"

    @birkenfeld birkenfeld changed the title test_mmap failling on AIX test_mmap failing on AIX Oct 18, 2010
    @birkenfeld birkenfeld changed the title test_mmap failling on AIX test_mmap failing on AIX Oct 18, 2010
    @bitdancer
    Copy link
    Member

    Committed the patch_flush_mmap patch to 3.1 in r87163 and 2.7 in r87164.

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 9, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    extension-modules C modules in the Modules dir tests Tests in the Lib/test dir type-bug An unexpected behavior, bug, or error
    Projects
    None yet
    Development

    No branches or pull requests

    3 participants