Hi Dongmin,<br><br>please find the inlined comments.<br><div class="gmail_quote">On Wed, Feb 17, 2010 at 4:05 PM, Dongmin Yu <span dir="ltr">&lt;<a href="mailto:min@hostway.co.kr">min@hostway.co.kr</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">








<div link="blue" vlink="purple" lang="KO">

<div>

<p class="MsoNormal"><span lang="EN-US">Hello,</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">I’m trying to store additional metadata
like content-type and etc at extended attribute.</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">My client code are like</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">fd = glusterfs_open( path );</span></p>

<p class="MsoNormal"><span lang="EN-US">glusterfs_write( fd, data, data_length );</span></p>

<p class="MsoNormal"><span lang="EN-US">glusterfs_close( fd );      
//------</span></p>

<p class="MsoNormal"><span lang="EN-US">glusterfs_setxattr( path, attr_name,
attr_value, value_length,0 );</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">My concern is that above client code runs
on multiple machines and multi-threaded.</span></p>

<p class="MsoNormal"><span lang="EN-US">In higher concurrency, client A could write
content, client B write content, client B write its attribute then client A
write its attribute.</span></p>

<p class="MsoNormal"><span lang="EN-US">So to speak, file content comes from client
B but attribute comes from client A.</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">If I use a lock server, I can guarantee
data integrity. But is there a simpler way to store extended attributes at an
atomic environment? </span></p></div></div></blockquote><div><br>locks should be used to ensure atomicity. There is no other simpler way which I can think of.<br> <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div link="blue" vlink="purple" lang="KO"><div>

<p class="MsoNormal"><span lang="EN-US">I see another function, glusterfs_fsetxattr
which accepts open glusterfs_file descriptor. If I rewrite as following, can I
guarantee the integrity?</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">fd = glusterfs_open( path );</span></p>

<p class="MsoNormal"><span lang="EN-US">glusterfs_write( fd, data, data_length );</span></p>

<p class="MsoNormal"><span lang="EN-US">glusterfs_fsetxattr( fd, attr_name,
attr_value, value_length,0 );</span></p>

<p class="MsoNormal"><span lang="EN-US">glusterfs_close( fd );    </span></p>

<p class="MsoNormal"><span lang="EN-US"></span></p></div></div></blockquote><div><br>No.<br><br>One of the solutions I can think of is, <br><p class="MsoNormal"><span lang="EN-US">fd = glusterfs_open( path );</span></p><p class="MsoNormal">
glusterfs_fcntl (fd, F_SETLKW, flock); /* flock tries to hold write lock on whole file */</p><p class="MsoNormal">                                                       /* please note usage of F_SETLKW, If you want to use F_SETLK you have to check for */<br>
<span lang="EN-US"></span></p><p class="MsoNormal"><span lang="EN-US">                                                       /* return value and proceed with writing only after lock has been acquired */<br></span></p>

<p class="MsoNormal"><span lang="EN-US">glusterfs_write( fd, data, data_length );</span></p>

<p class="MsoNormal"><span lang="EN-US"></span></p>

<p class="MsoNormal"><span lang="EN-US">glusterfs_setxattr( path, attr_name,
attr_value, value_length,0 );</span></p><p class="MsoNormal">glusterfs_fcntl (fd, F_SETLKW, flock); /*flock tries to unlock */<span lang="EN-US"></span><br></p><p class="MsoNormal"><span lang="EN-US">glusterfs_close( fd );      
//------</span></p><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div link="blue" vlink="purple" lang="KO"><div><p class="MsoNormal">
<span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal"><span lang="EN-US">Thanks</span></p>

<p class="MsoNormal"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><b><span style="font-family: Gulim;" lang="EN-US">DongMin Yu</span></b><span style="font-size: 12pt; font-family: Gulim;" lang="EN-US"></span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: Gulim;" lang="EN-US"> </span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: Gulim;" lang="EN-US">HOSTWAY IDC
Corp. / R&amp;D Principal Researcher</span><span style="font-size: 12pt; font-family: Gulim;" lang="EN-US"></span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: Gulim;" lang="EN-US">TEL. +822 2105
6037</span><span style="font-size: 12pt; font-family: Gulim;" lang="EN-US"></span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: Gulim;" lang="EN-US">FAX. +822 2105
6019</span><span style="font-size: 12pt; font-family: Gulim;" lang="EN-US"></span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: Gulim;" lang="EN-US">CELL. +8216
2086 1357</span><span style="font-size: 12pt; font-family: Gulim;" lang="EN-US"></span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: Gulim;" lang="EN-US">EMAIL: <a href="mailto:min.yu@hostwaycorp.com" target="_blank"><span style="color: blue;">min.yu@hostwaycorp.com</span></a>
</span><span style="font-size: 12pt; font-family: Gulim;" lang="EN-US"></span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-family: Gulim;" lang="EN-US">Website: <a href="http://www.hostway.com" target="_blank"><span style="color: blue;">http://www.hostway.com</span></a>
</span><span style="font-size: 12pt; font-family: Gulim;" lang="EN-US"></span></p>

<p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: Gulim;" lang="EN-US"> </span></p>

<p class="MsoNormal"><b><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;; color: black;" lang="EN-US">NOTICE:  This email and any file
transmitted are confidential and/or legally privileged and intended only for
the person(s) directly addressed.  If you are not the intended recipient,
any use, copying, transmission, distribution, or other forms of dissemination
is strictly prohibited.  If you have received this email in error, please
notify the sender immediately and permanently delete the email and files, if
any.</span></b><span lang="EN-US"></span></p>

</div>

</div>


<br>_______________________________________________<br>
Gluster-devel mailing list<br>
<a href="mailto:Gluster-devel@nongnu.org">Gluster-devel@nongnu.org</a><br>
<a href="http://lists.nongnu.org/mailman/listinfo/gluster-devel" target="_blank">http://lists.nongnu.org/mailman/listinfo/gluster-devel</a><br>
<br></blockquote></div><br><br clear="all">regards,<br>-- <br>Raghavendra G<br><br>