Re: Suggestions on the use of lockfiles? [message #33922 is a reply to message #33919] |
Sun, 09 February 2003 12:08   |
rmoss4
Messages: 21 Registered: October 2002
|
Junior Member |
|
|
There is probably 100 different ways to approach this, but I prefer to
start simple. Try this: when the lockfile is created, write some unique
identifier into the lock file (e.g. the host name of the machine doing
the locking). Just before you actually start writing the DB, confirm
that the first line in the lockfile corresponds to the machine that is
getting ready to alter the DB. If it does not, it can go back to the
wait loop.
Robert Moss, PhD
rmoss4@houston.rr.com
Jonathan Greenberg wrote:
> I am having some troubles using lockfiles to do simple database read/writes
> without getting a database corruption (I'm trying to hack my way around
> buying Dataminer):
>
> I have two or more computers running this code:
>
> dblockname is the name of the lockfile for the database
>
> ***
>
> while [program is still running] do begin
> ; Waits for the lockfile to not exist
> while (file_test(dblockname) eq 1) do begin
> wait,1
> endwhile
> ; Creates a lockfile
> openw,dblocklun,dblockname,/GET_LUN
> printf,dblocklun,''
> free_lun,dblocklun
>
> [gets the database, reads and writes to it]
> ; Deletes the lockfile, and returns to the top of the loop
> file_delete,dblockname
>
> endwhile
>
> ***
>
> The problem I'm having is that from time to time (depending on the speed of
> the database I/O), I'm getting errors where, and this is a guess, one
> computer manages to check for a nonexistant lockfile at the same time as
> another, and so both computers break out of the loop at the same time and
> start fooling around with the database at the same time. At the end,
> whichever computer deletes the lockfile first can reenter the loop, but the
> 2nd computer gets an error since the file was already deleted (and the
> database is likely to be corrupted at this point).
>
> Ideas? The astronomy lockfile procedures appear to be unix only, and I'm
> trying to design this for any platform (Windows, Mac, UNIX). Apparently I
> can openw the same file from two computers without error (I wish that I
> could override this fact). Help!
>
> --j
>
|
|
|