On Wed, 24 May 2006, Berger, Daniel wrote:

>> -----Original Message-----
>> From: frank.cameron / gmail.com
>> [mailto:frank.cameron / gmail.com] On Behalf Of brabuhr / gmail.com
>> Sent: Tuesday, May 23, 2006 3:18 PM
>> To: ruby-talk ML
>> Subject: Re: Atomic File.copy from Linux to Windows shared drive
>>
>>
>>> require 'ftools'
>>> require 'timeout'
>>>
>>> begin
>>>    Timeout.timeout(3){
>>>       File.copy('temp.txt', 'temp.bak')
>>>       File.rename('temp.bak', '/X/temp.txt')
>>>       File.unlink('temp.bak')
>>>    }
>>> rescue Errno::EPERM
>>>    # Ignore bogus EPERM errors - harmless
>>> end
>>>
>>> The problem is that File.rename is raising Errno::EXDEV errors, and
>>> simply ignoring those won't work.
>>
>> Shouldn't it be:
>>   File.copy('temp.txt', '/X/temp.bak')
>>   File.rename('/X/temp.bak', '/X/temp.txt')
>
> Whoops! Yeah, that worked.  I still don't know what will happen if the
> share goes down, though.
>
> Regards,
>
> Dan

this __should__ depend on how the drive is mounted.  for instance, with an
nfs 'hard' mount your script would hang until the remote server came back up -
and then proceed.  as amazing as this sounds it routinely works for us with 30
nodes hits giant nfs mounted raids.  i assume there are similar options for
mounting windows shared drives but you'll have to consult the docs for that...
in any case you are looking for something like 'hard' mount.

cheers.

-a
-- 
be kind whenever possible... it is always possible.
- h.h. the 14th dali lama