Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

My money is on writedata(). I bet there is a case where the file is zeroed out, then prior to the writing of the new value, it fails leaving an empty file. Then the main code which is written to handle a missing file silently, resets the counter to 1 and goes on with its life. Perhaps an error should be logged if the file is zero length. ie reading the first line returns undef which, for example which means your process either just created an empty file or opened an empty file. Either way your counter data has disappeared.

I do wonder why the main file isn't opened RW then locked LOCK_EX then read, increment value, truncate(), and write, and close (unlocking the file). This method only uses one file, one lock, and only opens the file once. The locking will ensure that all the processes play well together.

Also if you have access to a database which has sequences which don't have to relate to a specific table, one could be set up to do the counting. The interface is heavier but automicity is guaranteed and your counter won't mysteriously reset to zero. This probably only makes sense if you are using the database for other things already on the site.

In PostgreSQL the SQL would go like SELECT nextval('my_sequence'). One would then use DBI presumably and fetch the value which would always be the next one in the series. This works for multiple processes and is quite scalable.


In reply to Re: Mysterious Disapperance of file contents by dga
in thread Mysterious Disapperance of file contents by Gorby

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (4)
As of 2024-04-18 20:57 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found