Hide Forgot
+++ This bug was initially created as a clone of Bug #1351637 +++ Description of problem: For marker directory objects, the validate function always returns False. This is because we compare the stored Content-Length (always zero) and the st_size from stat (always 4096 for directories). As this comparison fails every time, validation is unsuccessful. Version-Release number of selected component (if applicable): RHGS 3.1.3 swiftonfile-2.3.0-3.el7rhgs How reproducible: Always. Do a GET request on a marker dir object and observe strace output. Steps to Reproduce: Create marker dir object: curl -i http://localhost:8080/v1/AUTH_test/c1/dirobject -X PUT -H 'Content-Type: application/directory' -H 'Content-Length: 0' HTTP/1.1 201 Created Last-Modified: Thu, 30 Jun 2016 12:50:59 GMT Content-Length: 0 Etag: d41d8cd98f00b204e9800998ecf8427e Content-Type: text/html; charset=UTF-8 X-Trans-Id: txf93b00f66fd542eb91c13-00577515b2 Date: Thu, 30 Jun 2016 12:50:58 GMT [pid 1427] getxattr("/mnt/gluster-object/test/c1/dirobject", "user.swift.metadata", 0x0, 0) = -1 ENOENT (No such file or directory) [pid 1427] open("/dev/urandom", O_RDONLY|O_CLOEXEC) = 7 [pid 1427] fcntl(7, F_GETFD) = 0x1 (flags FD_CLOEXEC) [pid 1427] fcntl(7, F_SETFD, FD_CLOEXEC) = 0 [pid 1427] getuid() = 0 [pid 1427] getppid() = 1398 [pid 1427] read(7, "\272\1\354\210Dlh\323$\335^<\373Z\36\223", 16) = 16 [pid 1427] close(7) = 0 [pid 1427] gettid() = 1427 [pid 1427] open("/mnt/gluster-object/test/c1/.dirobject.740831a72d3a4baaba34788f757c0976", O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC, 0777) = 7 [pid 1427] futex(0x7f24bc0014f0, FUTEX_WAKE_PRIVATE, 1) = 1 [pid 1427] poll([{fd=9, events=POLLIN|POLLPRI|POLLERR|POLLHUP}, {fd=4, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 2, 60000 <unfinished ...> [pid 1457] <... futex resumed> ) = 0 [pid 1457] mkdir("/mnt/gluster-object/test/c1/dirobject", 0777) = 0 [pid 1457] stat("/mnt/gluster-object/test/c1/dirobject", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 [pid 1457] setxattr("/mnt/gluster-object/test/c1/dirobject", "user.swift.metadata", "{\"Content-Length\":\"0\",\"ETag\":\"d41d8cd98f00b204e9800998ecf8427e\",\"X-Timestamp\":\"1467291058.49158\",\"X-Object-Type\":\"marker_dir\",\"X-Type\":\"Object\",\"Content-Type\":\"application/directory\"}", 183, 0) = 0 [pid 1457] sendto(10, " ", 1, 0, NULL, 0) = 1 [pid 1427] <... poll resumed> ) = 1 ([{fd=9, revents=POLLIN}]) [pid 1427] recvfrom(9, " ", 1, 0, NULL, NULL) = 1 [pid 1457] futex(0x7f24bc0014f0, FUTEX_WAIT_PRIVATE, 0, NULL <unfinished ...> [pid 1427] recvfrom(9, 0x213d8c4, 1, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable) [pid 1427] close(7) = 0 [pid 1427] unlink("/mnt/gluster-object/test/c1/.dirobject.740831a72d3a4baaba34788f757c0976") = 0 Do a GET on marker dir object: root# curl -i http://localhost:8080/v1/AUTH_test/c1/dirobject -X GET HTTP/1.1 200 OK Content-Length: 0 Accept-Ranges: bytes Last-Modified: Thu, 30 Jun 2016 12:50:59 GMT Etag: d41d8cd98f00b204e9800998ecf8427e X-Timestamp: 1467291058.57983 Content-Type: application/directory X-Trans-Id: tx9ee33b8ea36d4d84bdeee-00577515dd Date: Thu, 30 Jun 2016 12:51:41 GMT [pid 1427] open("/mnt/gluster-object/test/c1/dirobject", O_RDONLY|O_CLOEXEC) = 7 [pid 1427] fstat(7, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 [pid 1427] fgetxattr(7, "user.swift.metadata", 0x0, 0) = 183 [pid 1427] fgetxattr(7, "user.swift.metadata", "{\"Content-Length\":\"0\",\"ETag\":\"d41d8cd98f00b204e9800998ecf8427e\",\"X-Timestamp\":\"1467291058.49158\",\"X-Object-Type\":\"marker_dir\",\"X-Type\":\"Object\",\"Content-Type\":\"application/directory\"}", 183) = 183 [pid 1427] fsetxattr(7, "user.swift.metadata", "{\"Content-Length\":0,\"ETag\":\"d41d8cd98f00b204e9800998ecf8427e\",\"X-Object-Type\":\"dir\",\"X-Timestamp\":\"1467291058.57983\",\"X-Type\":\"Object\",\"Content-Type\":\"application/directory\"}", 174, 0) = 0 [pid 1427] close(7) = 0 Actual results: Validation fails and metadata is over-written unnecessarily. Expected results: Validation should not fail and there should be no fsetxattr() call. --- Additional comment from Red Hat Bugzilla Rules Engine on 2016-06-30 09:02:15 EDT --- This bug is automatically being proposed for the current z-stream release of Red Hat Gluster Storage 3 by setting the release flag 'rhgs‑3.1.z' to '?'. If this bug should be proposed for a different release, please manually change the proposed release flag. --- Additional comment from Prashanth Pai on 2016-07-28 09:29:07 EDT --- Upstream patch: http://review.gluster.org/#/c/14423/ --- Additional comment from Red Hat Bugzilla Rules Engine on 2016-08-09 07:35:41 EDT --- Since this bug has been approved for the RHGS 3.2.0 release of Red Hat Gluster Storage 3, through release flag 'rhgs-3.2.0+', and through the Internal Whiteboard entry of '3.2.0', the Target Release is being automatically set to 'RHGS 3.2.0' --- Additional comment from Prashanth Pai on 2016-09-13 03:43:31 EDT --- Upstream change has been merged. --- Additional comment from Prashanth Pai on 2016-09-19 07:30:02 EDT --- Downstream changes have been submitted and merged. rhel7 - https://code.engineering.redhat.com/gerrit/85042 rhel6 - https://code.engineering.redhat.com/gerrit/85059 --- Additional comment from errata-xmlrpc on 2016-09-19 11:50:42 EDT --- Bug report changed to ON_QA status by Errata System. A QE request has been submitted for advisory RHEA-2016:24869-01 https://errata.devel.redhat.com/advisory/24869 --- Additional comment from errata-xmlrpc on 2016-09-19 11:54:00 EDT --- This bug has been dropped from advisory RHEA-2016:24869 by Milind Changire (mchangir) --- Additional comment from Atin Mukherjee on 2016-09-20 01:39:24 EDT --- Correct errata link : https://errata.devel.redhat.com/advisory/24870
Downstream changes have been submitted and merged. rhel6 - https://code.engineering.redhat.com/gerrit/85059
curl -i http://localhost:8080/v1/AUTH_test/c1/dirobject -X GET HTTP/1.1 200 OK Content-Length: 0 Accept-Ranges: bytes Last-Modified: Thu, 15 Dec 2016 11:09:18 GMT Etag: d41d8cd98f00b204e9800998ecf8427e X-Timestamp: 1481800157.44880 Content-Type: application/directory X-Trans-Id: txe6e9b11d86ed4655a6ed7-00585279f7 Date: Thu, 15 Dec 2016 11:09:43 GMT [pid 8568] getsockname(8, {sa_family=AF_INET, sin_port=htons(6010), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0 [pid 8568] gettimeofday({1481800183, 263202}, NULL) = 0 [pid 8568] gettimeofday({1481800183, 263265}, NULL) = 0 [pid 8568] gettimeofday({1481800183, 263552}, NULL) = 0 [pid 8568] lstat("/mnt/gluster-object/test", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 [pid 8568] lstat("/mnt/gluster-object/test/..", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 [pid 8568] open("/mnt/gluster-object/test/c1/dirobject", O_RDONLY|O_CLOEXEC) = 11 [pid 8568] fstat(11, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 [pid 8568] fgetxattr(11, "user.swift.metadata", 0x0, 0) = 183 [pid 8568] fgetxattr(11, "user.swift.metadata", "{"Content-Length":"0","ETag":"d41d8cd98f00b204e9800998ecf8427e","X-Timestamp":"1481800157.44880","X-Object-Type":"marker_dir","X-Type":"Object","Content-Type":"application/directory"}", 183) = 183 [pid 8568] close(11) = 0 [pid 8568] gettimeofday({1481800183, 270573}, NULL) = 0 [pid 8568] gettimeofday({1481800183, 270679}, NULL) = 0 [pid 8568] sendto(8, "HTTP/1.1 200 OK\r\nX-Timestamp: 14"..., 250, 0, NULL, 0) = 250 [pid 8568] gettimeofday({1481800183, 271651}, NULL) = 0 [pid 8568] gettimeofday({1481800183, 271711}, NULL) = 0 [pid 8568] shutdown(8, SHUT_RDWR) = 0 [pid 8568] close(8) = 0 [pid 8568] poll([{fd=12, events=POLLIN|POLLPRI|POLLERR|POLLHUP}, {f On an marker-object, there is no setxattr call and metadata is not rewritten on marker directory object. Verified on swiftonfile-1.13.1-10.el6rhs.noarch
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://rhn.redhat.com/errata/RHBA-2017-0489.html