Bug 1793990
| Summary: | lseek SEEK_DATA - File descriptor in bad state | ||
|---|---|---|---|
| Product: | [Community] GlusterFS | Reporter: | Tomáš Mózes <hydrapolic> |
| Component: | open-behind | Assignee: | Pranith Kumar K <pkarampu> |
| Status: | CLOSED UPSTREAM | QA Contact: | |
| Severity: | unspecified | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | 6 | CC: | bugs, pasik, ravishankar, zmedico |
| Target Milestone: | --- | Keywords: | Triaged |
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | If docs needed, set a value | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2020-03-12 12:29:23 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
|
Description
Tomáš Mózes
2020-01-22 13:08:48 UTC
In Gentoo Linux we use portage to install software. That software is usually built from source so it's a good candidate for a shared storage if used by hundreds of systems to avoid re-downloading on multiple systems. While installing some packages in Gentoo (having the source repository on Glusterfs) we discovered that lseek SEEK_DATA isn't working properly on Glusterfs.
A working example on ext4:
# dd if=/dev/zero of=/tmp/sparse bs=1M count=0 seek=1
# echo hi >> /tmp/sparse
# python3 ./lseek-seek-data.py /tmp/sparse
1048576
A failure on glusterfs volume (/usr/portage/distfiles):
# dd if=/dev/zero of=/usr/portage/distfiles/sparse bs=1M count=0 seek=1
# echo hi >> /usr/portage/distfiles/sparse
# python3 ./lseek-seek-data.py /usr/portage/distfiles/sparse
Traceback (most recent call last):
File "./lseek-seek-data.py", line 19, in <module>
main()
File "./lseek-seek-data.py", line 15, in main
print(os.lseek(input_file.fileno(), offset, os.SEEK_DATA))
OSError: [Errno 77] File descriptor in bad state
lseek-seek-data.py:
#!/usr/bin/env python3
import argparse
import os
def main():
parser = argparse.ArgumentParser()
parser.add_argument('input_file')
args = parser.parse_args()
offset = 0
with open(args.input_file, 'rb', 0) as input_file:
print(os.lseek(input_file.fileno(), offset, os.SEEK_DATA))
if __name__ == '__main__':
main()
Discussion in Gentoo:
https://bugs.gentoo.org/705536
https://github.com/gentoo/portage/pull/498
The glusterfs volume is simple running default settings on version 6.7.
Looks like https://review.gluster.org/#/c/23530/ needs to be backported to the release-{6/7} branches. Assigning the bug to Pranith. @Tomas, for now, a workaround is to disable the open-behind translator: `gluster v set volname open-behind off`. Things will then work as expected. Thanks @Ravishankar, the patch https://github.com/gluster/glusterfs/commit/9dd57ff963d4d0dde7f3ad0ff230837ff2f4b1df works fine with 6.7/7.2. This bug is moved to https://github.com/gluster/glusterfs/issues/894, and will be tracked there from now on. Visit GitHub issues URL for further details |