<feed xmlns='http://www.w3.org/2005/Atom'>
<title>gluster-swift.git/gluster/swift/obj, branch master</title>
<subtitle></subtitle>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/gluster-swift.git/'/>
<entry>
<title>Rebase to Swift 2.15.1 (pike)</title>
<updated>2017-11-22T09:07:11+00:00</updated>
<author>
<name>venkata edara</name>
<email>redara@redhat.com</email>
</author>
<published>2017-11-22T08:05:46+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/gluster-swift.git/commit/?id=488744a005fb399af8d094ad7a62c1917410398c'/>
<id>488744a005fb399af8d094ad7a62c1917410398c</id>
<content type='text'>
Change-Id: I84ebb44c5c3cf2f80c50f2d4ae4bd92b619a4297
Signed-off-by: venkata edara &lt;redara@redhat.com&gt;
Reviewed-on: https://review.gluster.org/18412
Reviewed-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Tested-by: Prashanth Pai &lt;ppai@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Change-Id: I84ebb44c5c3cf2f80c50f2d4ae4bd92b619a4297
Signed-off-by: venkata edara &lt;redara@redhat.com&gt;
Reviewed-on: https://review.gluster.org/18412
Reviewed-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Tested-by: Prashanth Pai &lt;ppai@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Rebase to Swift 2.10.1 (newton)</title>
<updated>2017-05-11T05:48:27+00:00</updated>
<author>
<name>venkata edara</name>
<email>redara@redhat.com</email>
</author>
<published>2017-05-10T07:57:38+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/gluster-swift.git/commit/?id=513988915aa1af13a989d062b021fe1562cbf18d'/>
<id>513988915aa1af13a989d062b021fe1562cbf18d</id>
<content type='text'>
Change-Id: I53a962c9a301089c8aed0b43c50f944c30225944
Signed-off-by: venkata edara &lt;redara@redhat.com&gt;
Reviewed-on: https://review.gluster.org/16653
Reviewed-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Tested-by: Prashanth Pai &lt;ppai@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Change-Id: I53a962c9a301089c8aed0b43c50f944c30225944
Signed-off-by: venkata edara &lt;redara@redhat.com&gt;
Reviewed-on: https://review.gluster.org/16653
Reviewed-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Tested-by: Prashanth Pai &lt;ppai@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Add support for S3 Multipart Upload API</title>
<updated>2017-04-04T13:27:23+00:00</updated>
<author>
<name>venkata edara</name>
<email>redara@redhat.com</email>
</author>
<published>2017-04-04T10:22:53+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/gluster-swift.git/commit/?id=e9c2c5eb55e1012ccce0ce51ac48bed0c0f1d4b7'/>
<id>e9c2c5eb55e1012ccce0ce51ac48bed0c0f1d4b7</id>
<content type='text'>
Obj server checks if +segments is there and creates directory to support multi-part upload

Updated s3.md to show usage of multi-part upload.

Change-Id: I1e8a0dd850f51b2cc5dd2147607e46978dc2f936
Signed-off-by: venkata edara &lt;redara@redhat.com&gt;
Reviewed-on: https://review.gluster.org/16983
Reviewed-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Tested-by: Prashanth Pai &lt;ppai@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Obj server checks if +segments is there and creates directory to support multi-part upload

Updated s3.md to show usage of multi-part upload.

Change-Id: I1e8a0dd850f51b2cc5dd2147607e46978dc2f936
Signed-off-by: venkata edara &lt;redara@redhat.com&gt;
Reviewed-on: https://review.gluster.org/16983
Reviewed-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Tested-by: Prashanth Pai &lt;ppai@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix validation of marker dir objects</title>
<updated>2016-09-12T17:14:52+00:00</updated>
<author>
<name>Prashanth Pai</name>
<email>ppai@redhat.com</email>
</author>
<published>2016-05-19T10:03:07+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/gluster-swift.git/commit/?id=a324c6e5cdfad77e8f91ec9869deb6b78425807e'/>
<id>a324c6e5cdfad77e8f91ec9869deb6b78425807e</id>
<content type='text'>
For marker directory objects, validate_object() always returned False.
This was because st_size from stat was being compared to Content-Length
stored in metadata. Unlike files, for directories st_size is always
4096. Hence the comparison would always be '4096 == 0' which would
fail.

This patch makes the following changes:
* Do size comparison of st_size and Content-Length only for files.
* Get rid of _is_dir everywhere. This will simplify things.

Change-Id: Ib75e06c4e3bce36bab11ce7d029ff327f33c3146
Signed-off-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Reviewed-on: http://review.gluster.org/14423
Reviewed-by: Thiago da Silva &lt;thiago@redhat.com&gt;
Tested-by: Thiago da Silva &lt;thiago@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
For marker directory objects, validate_object() always returned False.
This was because st_size from stat was being compared to Content-Length
stored in metadata. Unlike files, for directories st_size is always
4096. Hence the comparison would always be '4096 == 0' which would
fail.

This patch makes the following changes:
* Do size comparison of st_size and Content-Length only for files.
* Get rid of _is_dir everywhere. This will simplify things.

Change-Id: Ib75e06c4e3bce36bab11ce7d029ff327f33c3146
Signed-off-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Reviewed-on: http://review.gluster.org/14423
Reviewed-by: Thiago da Silva &lt;thiago@redhat.com&gt;
Tested-by: Thiago da Silva &lt;thiago@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Don't attempt unlink on a non-existing object</title>
<updated>2016-08-10T18:37:28+00:00</updated>
<author>
<name>Prashanth Pai</name>
<email>ppai@redhat.com</email>
</author>
<published>2016-05-23T09:17:38+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/gluster-swift.git/commit/?id=88a1bd75a515e348c6cd5f08e98ec9e39b7f66e8'/>
<id>88a1bd75a515e348c6cd5f08e98ec9e39b7f66e8</id>
<content type='text'>
Problem:
getxattr() and unlink() were being called on an object path which was
already determined to be non-existent. This resulted in both these
syscalls always failing with ENOENT when client issues DELETE request on
an object that does not exist.

A request to DELETE an object will incur the following DiskFile API
calls in sequence:
    disk_file.read_metadata()
    disk_file.delete()

The above mentioned problem manifests because Swift code invokes
disk_file.delete() even when disk_file.read_metadata() has raised
DiskFileNotExist.

Fix:
During disk_file.read_metadata(), make a note that the file does not
exist. When disk_file.delete() is called, do not proceed with object
deletion.

Change-Id: Iaf6915197a8fced7564db8fab80e696dea080c25
Signed-off-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Reviewed-on: http://review.gluster.org/14501
Reviewed-by: Thiago da Silva &lt;thiago@redhat.com&gt;
Tested-by: Thiago da Silva &lt;thiago@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Problem:
getxattr() and unlink() were being called on an object path which was
already determined to be non-existent. This resulted in both these
syscalls always failing with ENOENT when client issues DELETE request on
an object that does not exist.

A request to DELETE an object will incur the following DiskFile API
calls in sequence:
    disk_file.read_metadata()
    disk_file.delete()

The above mentioned problem manifests because Swift code invokes
disk_file.delete() even when disk_file.read_metadata() has raised
DiskFileNotExist.

Fix:
During disk_file.read_metadata(), make a note that the file does not
exist. When disk_file.delete() is called, do not proceed with object
deletion.

Change-Id: Iaf6915197a8fced7564db8fab80e696dea080c25
Signed-off-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Reviewed-on: http://review.gluster.org/14501
Reviewed-by: Thiago da Silva &lt;thiago@redhat.com&gt;
Tested-by: Thiago da Silva &lt;thiago@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Don't (f)chown when it has no effect</title>
<updated>2016-05-04T14:21:14+00:00</updated>
<author>
<name>Prashanth Pai</name>
<email>ppai@redhat.com</email>
</author>
<published>2016-03-18T12:55:36+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/gluster-swift.git/commit/?id=3451b86a6927ab7b21ae8e8a0421e4c51597df1d'/>
<id>3451b86a6927ab7b21ae8e8a0421e4c51597df1d</id>
<content type='text'>
For (f)chown calls which can change both UID and GID at once, -1 is
reserved as a sentinel value to indicate "omitted argument" or "do
not change". This makes sense when one of the args to (f)chown is -1.
When both uid and gid args are -1, it doesn't make sense to call
(f)chown as neither is going to be changed.

Further, as of today, diskfile doesn't get the information (uid and
gid) of the authenticated user from auth middleware. Retained the
calls in code for future when such functionality might be added.

Change-Id: If8463ae78a32c379d698260879810ed3c207af02
Signed-off-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Reviewed-on: http://review.gluster.org/13778
Reviewed-by: Thiago da Silva &lt;thiago@redhat.com&gt;
Tested-by: Thiago da Silva &lt;thiago@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
For (f)chown calls which can change both UID and GID at once, -1 is
reserved as a sentinel value to indicate "omitted argument" or "do
not change". This makes sense when one of the args to (f)chown is -1.
When both uid and gid args are -1, it doesn't make sense to call
(f)chown as neither is going to be changed.

Further, as of today, diskfile doesn't get the information (uid and
gid) of the authenticated user from auth middleware. Retained the
calls in code for future when such functionality might be added.

Change-Id: If8463ae78a32c379d698260879810ed3c207af02
Signed-off-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Reviewed-on: http://review.gluster.org/13778
Reviewed-by: Thiago da Silva &lt;thiago@redhat.com&gt;
Tested-by: Thiago da Silva &lt;thiago@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Open object only if it's going to be read</title>
<updated>2016-05-03T19:47:05+00:00</updated>
<author>
<name>Prashanth Pai</name>
<email>ppai@redhat.com</email>
</author>
<published>2016-03-11T12:26:46+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/gluster-swift.git/commit/?id=fddb5d4a918affe7837d523b56e53e33f3ae5408'/>
<id>fddb5d4a918affe7837d523b56e53e33f3ae5408</id>
<content type='text'>
Open()ing an object is necessarry only in two cases:
* Serving a GET request
* Recalculating etag when metadata is stale
  (can be triggered by any type of request)

This change ensures that for requests other than GET, a file is not
opened if the metadata is valid (size and etag accurate). Note that
if metadata is stale, the file is still opened and read to compute etag.
This patch does not change the behaviour of triggering metadata
validation and regeneration for non-GET requests.

Change-Id: Icefa4dec7d715ec9e6dd68ae7fe89a0d90fe71b3
Signed-off-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Reviewed-on: http://review.gluster.org/13684
Reviewed-by: Thiago da Silva &lt;thiago@redhat.com&gt;
Tested-by: Thiago da Silva &lt;thiago@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Open()ing an object is necessarry only in two cases:
* Serving a GET request
* Recalculating etag when metadata is stale
  (can be triggered by any type of request)

This change ensures that for requests other than GET, a file is not
opened if the metadata is valid (size and etag accurate). Note that
if metadata is stale, the file is still opened and read to compute etag.
This patch does not change the behaviour of triggering metadata
validation and regeneration for non-GET requests.

Change-Id: Icefa4dec7d715ec9e6dd68ae7fe89a0d90fe71b3
Signed-off-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Reviewed-on: http://review.gluster.org/13684
Reviewed-by: Thiago da Silva &lt;thiago@redhat.com&gt;
Tested-by: Thiago da Silva &lt;thiago@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Handle non-blocking renames during object PUTs</title>
<updated>2016-05-03T17:57:05+00:00</updated>
<author>
<name>Prashanth Pai</name>
<email>ppai@redhat.com</email>
</author>
<published>2016-04-29T14:28:21+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/gluster-swift.git/commit/?id=933bc5ade145413b0c7307a12b9d0b4084e7d767'/>
<id>933bc5ade145413b0c7307a12b9d0b4084e7d767</id>
<content type='text'>
DiskFile._finalize_put() will now retry renames if it fails with EBUSY
or ESTALE. This is required because for a brief period of time, rename
operation in glusterfs was non-blocking.
Reference: http://review.gluster.org/#/c/13366/

This change also does the following:
* Updates comments to add clarity for operations done and exceptions
  caught in DiskFile.create()
* Handles race between container existance check (memcache) and
  object creation a little more gracefully by logging what really
  happened.

Change-Id: I89777be19eef73826b5f84deec0777173b62935f
Signed-off-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Reviewed-on: http://review.gluster.org/14118
Reviewed-by: Thiago da Silva &lt;thiago@redhat.com&gt;
Tested-by: Thiago da Silva &lt;thiago@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
DiskFile._finalize_put() will now retry renames if it fails with EBUSY
or ESTALE. This is required because for a brief period of time, rename
operation in glusterfs was non-blocking.
Reference: http://review.gluster.org/#/c/13366/

This change also does the following:
* Updates comments to add clarity for operations done and exceptions
  caught in DiskFile.create()
* Handles race between container existance check (memcache) and
  object creation a little more gracefully by logging what really
  happened.

Change-Id: I89777be19eef73826b5f84deec0777173b62935f
Signed-off-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Reviewed-on: http://review.gluster.org/14118
Reviewed-by: Thiago da Silva &lt;thiago@redhat.com&gt;
Tested-by: Thiago da Silva &lt;thiago@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Make swift's expirer compatible with gluster-swift</title>
<updated>2016-04-20T19:08:03+00:00</updated>
<author>
<name>Prashanth Pai</name>
<email>ppai@redhat.com</email>
</author>
<published>2016-04-20T09:40:43+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/gluster-swift.git/commit/?id=5a04cede1f5bb44d6c64b186335146dd4e70a6ea'/>
<id>5a04cede1f5bb44d6c64b186335146dd4e70a6ea</id>
<content type='text'>
Swift's object expirer in kilo series was incompatible with
gluster-swift. This change does the following:

* Optimizes crawl in account and container server for listing
  requests for containers and tracker objects in gsexpiring volume.

* Enables container server to delete tracker objects from gsexpiring
  volume. Swift's expirer sends request directly to container server
  to remove tracker object entry.

* delete_tracker_object() is now a common utility function that is
  invoked from container server and gluster-swift's object expirer.

* Run functional test to be run against both swift's object expirer
  and gluster-swift's object expirer

Change-Id: Ib5b7f7f08fe7dda574f6dd80be2f38bdfaee32bc
Signed-off-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Reviewed-on: http://review.gluster.org/14038
Reviewed-by: Thiago da Silva &lt;thiago@redhat.com&gt;
Tested-by: Thiago da Silva &lt;thiago@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Swift's object expirer in kilo series was incompatible with
gluster-swift. This change does the following:

* Optimizes crawl in account and container server for listing
  requests for containers and tracker objects in gsexpiring volume.

* Enables container server to delete tracker objects from gsexpiring
  volume. Swift's expirer sends request directly to container server
  to remove tracker object entry.

* delete_tracker_object() is now a common utility function that is
  invoked from container server and gluster-swift's object expirer.

* Run functional test to be run against both swift's object expirer
  and gluster-swift's object expirer

Change-Id: Ib5b7f7f08fe7dda574f6dd80be2f38bdfaee32bc
Signed-off-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Reviewed-on: http://review.gluster.org/14038
Reviewed-by: Thiago da Silva &lt;thiago@redhat.com&gt;
Tested-by: Thiago da Silva &lt;thiago@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Enhance object expiration</title>
<updated>2016-04-15T12:27:54+00:00</updated>
<author>
<name>Prashanth Pai</name>
<email>ppai@redhat.com</email>
</author>
<published>2016-03-18T12:39:46+00:00</published>
<link rel='alternate' type='text/html' href='http://git.gluster.org/cgit/gluster-swift.git/commit/?id=2bd696e392e420a2521dcca0b8613122d8169025'/>
<id>2bd696e392e420a2521dcca0b8613122d8169025</id>
<content type='text'>
This change re-introduces object expiration feature with some internal
differences from earlier implementation such as:

* Creation of zero-byte tracker object is performed directly on the
  mount point. Earlier HTTP request was sent to object server
  for the same. This incurred overhead of metadata creation for
  these zero-byte files which isn't necessarry as all required
  information is encoded in the path itself.
* Crawling of zero-byte tracker objects is done by the object
  expirer daemon itself and not container server.
* Deletion of tracker object is performed by the object expiration daemon
  directly on mount point.

Deletion of actual data object is not carried out by object expiration
daemon directly. The object expirer sends a DELETE request to object
server which deletes the actual object. This behaviour is not changed.

There is no change in behaviour in comparison with older implementation.
This is asserted by re-enabling existing functional tests without
any changes.

Change-Id: I01dc77cc4db3be3147d54e3aa2a19ed182498900
Signed-off-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Reviewed-on: http://review.gluster.org/13913
Reviewed-by: Thiago da Silva &lt;thiago@redhat.com&gt;
Tested-by: Thiago da Silva &lt;thiago@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This change re-introduces object expiration feature with some internal
differences from earlier implementation such as:

* Creation of zero-byte tracker object is performed directly on the
  mount point. Earlier HTTP request was sent to object server
  for the same. This incurred overhead of metadata creation for
  these zero-byte files which isn't necessarry as all required
  information is encoded in the path itself.
* Crawling of zero-byte tracker objects is done by the object
  expirer daemon itself and not container server.
* Deletion of tracker object is performed by the object expiration daemon
  directly on mount point.

Deletion of actual data object is not carried out by object expiration
daemon directly. The object expirer sends a DELETE request to object
server which deletes the actual object. This behaviour is not changed.

There is no change in behaviour in comparison with older implementation.
This is asserted by re-enabling existing functional tests without
any changes.

Change-Id: I01dc77cc4db3be3147d54e3aa2a19ed182498900
Signed-off-by: Prashanth Pai &lt;ppai@redhat.com&gt;
Reviewed-on: http://review.gluster.org/13913
Reviewed-by: Thiago da Silva &lt;thiago@redhat.com&gt;
Tested-by: Thiago da Silva &lt;thiago@redhat.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
