This service will be undergoing maintenance at 00:00 UTC, 2016-08-01. It is expected to last about 1 hours
Bug 865858 - Potentially unnecessary file opens/closes performed around xattr read/writes
Potentially unnecessary file opens/closes performed around xattr read/writes
Status: MODIFIED
Product: Gluster-Swift
Classification: Community
Component: utils (Show other bugs)
1.8.0
x86_64 Linux
low Severity low
: ---
: ---
Assigned To: Luis Pabón
:
Depends On:
Blocks: 903396 978061
  Show dependency treegraph
 
Reported: 2012-10-12 12:36 EDT by Peter Portante
Modified: 2016-02-17 19:12 EST (History)
5 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed:
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:


Attachments (Terms of Use)
Initial patch to remove the use of deprecated pyxattr methods. (2.94 KB, patch)
2012-10-12 15:11 EDT, Peter Portante
no flags Details | Diff
Actual fix to remove extra system calls. (5.32 KB, patch)
2012-10-12 15:12 EDT, Peter Portante
no flags Details | Diff

  None (edit)
Description Peter Portante 2012-10-12 12:36:18 EDT
Description of problem:

  The Gluster/Swift plugin code provides wrappers for get/set/removexattr
  system calls which perform file open/close systems calls. The open/close
  sequence appears to be unnecessary.

Version-Release number of selected component (if applicable):

  3.3.0

Actual results:

  Files are first opened, xattr key read/written/removed, then closed for
  every metadata key stored (could have multiple keys stored, see
  https://bugzilla.redhat.com/show_bug.cgi?id=865619)

Expected results:

  No open or close system call is made around xattr operations.
Comment 1 Peter Portante 2012-10-12 14:34:07 EDT
I created a permanent pastebin link with the output of an strace from a GET on an object.

Lines 222 - 240 are annotated to show where a read_metadata() calls starts and ends, and what do_getxattr() does for a file. Notice that 13 system calls are made. The two calls to fgetxattr in a row are the result of the pyxattr modules' behavior to first find out the size of the xattr value so that it can allocate memory for it and then fetch the full contents of it.

We should be able to remove the extra stat calls as well.
Comment 2 Peter Portante 2012-10-12 14:51:18 EDT
Probably would be helpful to actually include the link to the pastebin ...

http://pastebin.test.redhat.com/110804
Comment 3 Peter Portante 2012-10-12 15:10:11 EDT
Here are the results of the same operation but with a patch applied to remove the extra system calls (from 13 down to 3).

http://pastebin.test.redhat.com/110818
Comment 4 Peter Portante 2012-10-12 15:11:21 EDT
Created attachment 626189 [details]
Initial patch to remove the use of deprecated pyxattr methods.
Comment 5 Peter Portante 2012-10-12 15:12:00 EDT
Created attachment 626190 [details]
Actual fix to remove extra system calls.
Comment 6 Vijay Bellur 2012-10-13 13:40:51 EDT
CHANGE: http://review.gluster.org/4077 (Refactor to use pyxattr's get/set/remove methods) merged in master by Anand Avati (avati@redhat.com)
Comment 7 Vijay Bellur 2012-10-13 13:45:00 EDT
CHANGE: http://review.gluster.org/4078 (Fix BZ 865858: remove unnecessary system calls around xattr ops) merged in master by Anand Avati (avati@redhat.com)

Note You need to log in before you can comment on or make changes to this bug.