<div dir="ltr">Thanks for the detailed reply Samuel.<div><br></div><div>The architecture overview of Openstack Swift at [1] mentions: "<span style="color:rgb(0,0,0);font-family:'Lucida Grande','Lucida Sans Unicode',Geneva,Verdana,sans-serif;font-size:13.63636302947998px;letter-spacing:-0.14000000059604645px;line-height:20px">A deletion is also treated as a version of the file (a 0 byte file ending with ”.ts”, which stands for tombstone)". </span>That led me to think that an object delete is a new version created by truncating and then renaming the file.</div>
<div><br></div><div>I understand that it is more work for the cluster when dealing with expiring objects, however that work will happen in the background. If the client perceived performance improves because of this, it might be worth it.</div>
<div><span style="color:rgb(0,0,0);font-family:'Lucida Grande','Lucida Sans Unicode',Geneva,Verdana,sans-serif;font-size:13.63636302947998px;letter-spacing:-0.14000000059604645px;line-height:20px"><br></span></div>
<div>So, with the default options where POST-as-copy is enabled, expiring objects instead of delete doesn't make sense (would it have been interesting if the underlying filesystem was supporting dedup which would have made the file copy cheaper?).</div>
<div><br></div><div>However, if the POST-as-copy option is disabled, setting the X-Delete-After results in making an entry in the .expiring_objects account and change the xattrs of the inode for that object. A DELETE request results in unlinking the file and creating a new one.<br>
</div><div><br></div><div>Do the same set of operations happen for all the replicas of that object?</div><div><br></div><div>Thanks for pointing out that the "-m" option is only for metadata headers. Is there no way of directly setting this attribute using the swift command line client? Or should I just use curl?</div>
<div><br></div><div>Thanks in advance.</div><div>-Shri</div><div><br></div><div>[1] <a href="http://docs.openstack.org/developer/swift/overview_architecture.html">http://docs.openstack.org/developer/swift/overview_architecture.html</a><span style="color:rgb(0,0,0);font-family:'Lucida Grande','Lucida Sans Unicode',Geneva,Verdana,sans-serif;font-size:13.63636302947998px;letter-spacing:-0.14000000059604645px;line-height:20px"><br>
</span></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 9, 2013 at 8:59 PM, Samuel Merritt <span dir="ltr"><<a href="mailto:sam@swiftstack.com" target="_blank">sam@swiftstack.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On 10/9/13 8:28 PM, Shrinand Javadekar wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
Objects in a swift container can be deleted by either explicitly<br>
deleting them or by setting a expiry timestamp on them. Is there a<br>
performance difference between the two? For example, when I want to<br>
delete an object, instead of deleting it, can I simply set the<br>
X-Delete-After attribute of that object to 0? Is one faster than the other?<br>
<br>
My guess is that setting the object expiry timestamp may be faster since<br>
that would only involve changing the xattrs of the object inode. Delete<br>
will require creation of a new version of the object, truncating it to a<br>
0 byte file and renaming it to change the extension to ".ts".<br>
</blockquote>
<br></div>
Deletion creates a 0-byte tombstone (.ts) file and unlinks the old object (the .data file).  It doesn't "creat[e] a new version of the object" only to truncate it.<div class="im"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Seems like<br>
less work is done when object expiration is set.<br>
</blockquote>
<br></div>
Depends on whether or not object POST-as-copy is in use. If it is, then you'll wind up copying the entire object to change its metadata.<br>
<br>
Default for that is on, BTW, so if you haven't turned it off, you're using it.<br>
<br>
Further, setting X-Delete-At requires updating a container in the special .expiring_objects account. The object expirer periodically walks those containers and deletes objects that have expired, so now you've got a full copy of the whole object *plus* a container update.<br>

<br>
For large objects with POST-as-copy turned off, it might be faster to set X-Delete-At, but it is definitely more work for the cluster. If POST-as-copy is on, setting X-Delete-At will take longer than issuing a DELETE request *and* it'll be more work for the cluster.<br>

<br>
Also note that setting X-Delete-At doesn't guarantee that your object is really deleted at that time. Requests for that object will get 404s after that time, but the disk space won't be reclaimed, nor will the container listing be updated, until the object expirer gets around to actually deleting the object.<div class="im">
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
To try this out, I tried setting the X-Delete-After attribute using the<br>
swift command line client:<br>
<br>
$ swift post -m X-Delete-After: 1 <container-name> <object-name><br>
<br>
After I did this, when I stat the object, I see the attribute "Meta<br>
X-Delete-After: 1". However, the object never got deleted. Any idea what<br>
I'm doing wrong?<br>
</blockquote>
<br></div>
The -m flag sets metadata on the object; metadata headers are prefaced by X-Object-Meta. The above command actually sent the header X-Object-Meta-X-Delete-After: 1, which does not trigger object expiration.<div class="HOEnZb">
<div class="h5"><br>
<br>
<br>
______________________________<u></u>_________________<br>
Mailing list: <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack" target="_blank">http://lists.openstack.org/<u></u>cgi-bin/mailman/listinfo/<u></u>openstack</a><br>
Post to     : <a href="mailto:openstack@lists.openstack.org" target="_blank">openstack@lists.openstack.org</a><br>
Unsubscribe : <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack" target="_blank">http://lists.openstack.org/<u></u>cgi-bin/mailman/listinfo/<u></u>openstack</a><br>
</div></div></blockquote></div><br></div>