<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>