[Seaside] Re: Database Integration

Lukas Renggli renggli at gmail.com
Sun Jun 4 14:35:43 UTC 2006


> On Sun, Jun 04, 2006 at 12:03:33PM +0200, Adrian Lienhard wrote:
> > We experienced big concurrency problems (data corruption, lockups)
> > with OmniBase on Linux, accessing the same DB from multiple Squeak
> > images. Unless you are on Windows I would not recommend OmniBase.
> > Furthermore, OmniBase is much less transparent than for example GOODS
> > or Magma and can be tricky to use with Seaside.
>
> For the record, I suspect that I may be partly to blame for this.
> The Unix file locking in OSProcess has a setting that attempts to
> emulate Windows file locking semantics, and I unfortunately distributed
> OSProcess with this as the default preference. This emulation
> cannot be done correctly for separate Squeak images, which makes
> it pretty much useless for any practical application.
>
> So if there were data integrity problems with an OmniBase
> application that used file locking with Win32 emulation enabled,
> it may not be caused by OmniBase. If anyone tries this again
> (and I hope that someone will do so), please make sure that the
> Win32 emulating is turned off:
>   OSProcessAccessor emulateWin32FileLocking: false
>
> I can't say anything about the other concurrency issues, but I don't
> want OmniBase to take the rap for a mistake that I made.

This wasn't the problem, we've tried everything and discovered a
couple of problems, some are fixable others are very hard to
understand. We still don't know what exactly caused the stated
problems, maybe they are related to the ones below, maybe this is
something else ...

- OmniBase is designed on the Win32 locking semantics, that is very
different to the one provided by Unix systems. Things like atomically
opening files in a locked state is not possible in Unix and has to be
emulated somehow.

- The Squeak file primitives cache state (such as the file-size) in
some low-level structures and this is deadly for a file accessed by
multiple images at the same time. The solution to this problem is that
files have to be closed and reopened to get valid file-size
information, however this opens a new range of possible concurrency
issues.

Cheers,
Lukas

PS: OmniBase works very well on Unix if the database is accessed by
only one image at once. Multiple parallel processes within a single
image work fine as well.

-- 
Lukas Renggli
http://www.lukas-renggli.ch


More information about the Seaside mailing list