Beefy Boxes and Bandwidth Generously Provided by pair Networks vroom
"be consistent"
 
PerlMonks  

Re^4: Spurious "Invalid Argument" on file open

by rovf (Priest)
on Oct 24, 2012 at 08:47 UTC ( #1000573=note: print w/ replies, xml ) Need Help??


in reply to Re^3: Spurious "Invalid Argument" on file open
in thread Spurious "Invalid Argument" on file open

I don't see the possibility for a race condition here. A race condition could happen, if something changes to the file between the time I check the existence, and the time I read the file. However, the file is pretty static: It is kind of a configuration file, and after it is created, it doesn't change for weeks, maybe months.


-- 
Ronald Fischer <ynnor@mm.st>


Comment on Re^4: Spurious "Invalid Argument" on file open
Download Code
Re^5: Spurious "Invalid Argument" on file open
by BrowserUk (Pope) on Oct 24, 2012 at 09:15 UTC
    A race condition could happen, if something changes to the file between the time I check the existence, and the time I read the file. However, the file is pretty static:

    With the network involved, it doesn't have to be the file that changed. Any temporary resource state in the fabric between you and the actual file could -- breifly -- manifest itself as in an inability to open the file.

    I'd suggest cutting out the possibility of a race by just opening the file. And if the open fails, retry some number of times before logging an error:

    for my $try ( 1 .. RETRIES ) { if(open(my $rule_fh,'<',$rule_file)) { last; } if( $try == RETRIES ) { die "Can not read file $rule_file : $! / $^E"; } }

    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

    RIP Neil Armstrong

      With the network involved, it doesn't have to be the file that changed. Any temporary resource state in the fabric between you and the actual file could -- breifly -- manifest itself as in an inability to open the file.
      That sounds frightening. I didn't expect this ... thought that in this case the underlying software layer (CIFS) would take care about such glitches. Just to get some idea ... what kind of resource state could, for example, cause such an effect?


      I think I will follow your suggestion to do a retry....

      -- 
      Ronald Fischer <ynnor@mm.st>
        Just to get some idea ... what kind of resource state could, for example, cause such an effect?

        I don't know much about CIFS, but in general, anything that crosses a network can be subject to temporary timeouts.

        Take for example, that even in blocking mode, accept() can return without a valid connection for a variety of reasons.

        Looking at the wikipedia description, Level 2 OpLocks look like a possibility. I'm not sure what timeouts are involved with the SMB protocol, but if the network is heavily congested or the serving node is bogged down, the client could timeout before the server gets around to responding.

        Any code that deals with a network should allow for these possibilities.


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

        RIP Neil Armstrong

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1000573]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (17)
As of 2014-04-16 20:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (434 votes), past polls