<div class="gmail_quote"><div bgcolor="#ffffff"><font size="2"><font face="Comic Sans MS">Dear all,</font></font><br><div><font face="Comic Sans MS"></font> </div>
<div><font size="2" face="Comic Sans MS">We found some problems on using
GFS. We are using RHEL 4U5 with CentOS 4U5 CSGFS RPMs.<br></font></div>
<div><font face="Comic Sans MS"></font> </div>
<div><font size="2" face="Comic Sans MS">Given the following PHP program (for
testing):</font></div>
<div><font face="Comic Sans MS"></font> </div>
<div><font size="2" face="Courier New"><?php</font></div>
<div><font face="Courier New"></font> </div>
<div><font size="2" face="Courier New"> $input
= '/data08/test/src';<br> $tmp_prefix = '/data08/test/tmp';<br>
$dest = '/data08/test/dest';<br>
$hostname = trim( shell_exec('hostname') );<br>
$pid = posix_getpid();</font></div>
<div><font face="Courier New"></font> </div>
<div><font size="2" face="Courier New"> while ( true ) {</font></div>
<div><font face="Courier New"></font> </div>
<div><font size="2" face="Courier New"> $tmp = $tmp_prefix . '_'
. microtime(true) . '_' . $hostname . '_' . $pid;<br> copy(
$input, $tmp );</font></div>
<div><font face="Courier New"></font> </div>
<div><font size="2" face="Courier New"> $is_success = rename(
$tmp, $dest );<br> <br> if ( ! $is_success )
{<br> echo 'error' . "\n\n";<br>
}<br> }</font></div>
<div><font face="Courier New"></font> </div>
<div><font size="2" face="Courier New">?></font></div>
<div><font face="Comic Sans MS"></font> </div><font size="2">
<div><br><font face="Comic Sans MS">The above program only do a simple
task:</font></div>
<div> </div>
<div><font face="Comic Sans MS"> Copy the file "src" to a tmp file, and
then rename the tmp file to "dest".</font></div>
<div> </div>
<div><font face="Comic Sans MS">where "/data08/test/" is a directory
mounted on GFS.</font></div>
<div> </div>
<div> </div>
<div> </div>
<div><font face="Comic Sans MS">When two or more instances of this program
running concurrently in <b>different nodes</b>, the rename operation
was <b>failed</b>.<br>But there is <b>no problem</b> when
two or more instance of this program running concurrently in the <b>same
node</b>.</font></div>
<div> </div>
<div><br><font face="Comic Sans MS"><u>Example stderr when running the above
program:</u></font></div>
<div> </div>
<div><font face="Comic Sans MS"> PHP Warning:
rename(/data08/proga15_test/20090204/tmp_1233720656.1111_mp-bla03_18274,/data08/proga15_test/20090204/dest):
No such file or directory in /data08.mount/proga15_test/20090204/t.php on line
14<br> error<br> <br> PHP Warning:
rename(/data08/proga15_test/20090204/tmp_1233720656.9956_mp-bla03_18274,/data08/proga15_test/20090204/dest):
No such file or directory in /data08.mount/proga15_test/20090204/t.php on line
14<br> error<br> <br> PHP Warning:
rename(/data08/proga15_test/20090204/tmp_1233720659.7083_mp-bla03_18274,/data08/proga15_test/20090204/dest):
No such file or directory in /data08.mount/proga15_test/20090204/t.php on line
14<br> error<br> <br> PHP Warning:
rename(/data08/proga15_test/20090204/tmp_1233720661.1308_mp-bla03_18274,/data08/proga15_test/20090204/dest):
No such file or directory in /data08.mount/proga15_test/20090204/t.php on line
14<br> error<br> <br> PHP Warning:
rename(/data08/proga15_test/20090204/tmp_1233720662.5406_mp-bla03_18274,/data08/proga15_test/20090204/dest):
No such file or directory in /data08.mount/proga15_test/20090204/t.php on line
14<br> error<br> <br> PHP Warning:
rename(/data08/proga15_test/20090204/tmp_1233720663.9784_mp-bla03_18274,/data08/proga15_test/20090204/dest):
No such file or directory in /data08.mount/proga15_test/20090204/t.php on line
14<br> error<br> <br> PHP Warning:
rename(/data08/proga15_test/20090204/tmp_1233720665.5586_mp-bla03_18274,/data08/proga15_test/20090204/dest):
No such file or directory in /data08.mount/proga15_test/20090204/t.php on line
14<br> error</font></div>
<div> </div>
<div> <br><br><font face="Comic Sans MS">Then we've added a while loop before rename.</font><br></div>
<div> </div></font><div><font size="2" face="Courier New"> while ( true ) {</font></div>
<div> </div>
<div><font size="2" face="Courier New"> $tmp = $tmp_prefix . '_'
. microtime(true) . '_' . $hostname . '_' . $pid;<br> copy(
$input, $tmp );</font></div>
<div><br><b> while (<span>!file_exists</span>(<font size="2" face="Courier New">$tmp</font>)) {}</b><br><br></div>
<div><font size="2" face="Courier New"> $is_success = rename(
$tmp, $dest );<br> <br> if ( ! $is_success )
{<br> echo 'error' . "\n\n";<br>
}<br> }</font></div><font size="2"><div><br><font size="2"><font face="Comic Sans MS">The file really exists before rename. It does not generate an infinite loop and the same error occurred</font></font>.<br><br>Any suggestion or idea? Thanks a lot.<br>
<br><font face="Comic Sans MS">Regards,<br>PN</font></div></font></div></div><br>